[cig-commits] r7717 - in vendor/django/current: . django django/bin django/conf django/conf/locale django/conf/locale/ca django/conf/locale/ca/LC_MESSAGES django/conf/locale/cs/LC_MESSAGES django/conf/locale/da/LC_MESSAGES django/conf/locale/de/LC_MESSAGES django/conf/locale/el/LC_MESSAGES django/conf/locale/en/LC_MESSAGES django/conf/locale/es/LC_MESSAGES django/conf/locale/es_AR/LC_MESSAGES django/conf/locale/fi django/conf/locale/fi/LC_MESSAGES django/conf/locale/fr/LC_MESSAGES django/conf/locale/it/LC_MESSAGES django/conf/locale/ja/LC_MESSAGES django/conf/locale/kn django/conf/locale/kn/LC_MESSAGES django/conf/locale/lv django/conf/locale/lv/LC_MESSAGES django/conf/locale/mk django/conf/locale/mk/LC_MESSAGES django/conf/locale/nl/LC_MESSAGES django/conf/locale/no/LC_MESSAGES django/conf/locale/pl/LC_MESSAGES django/conf/locale/pt django/conf/locale/pt/LC_MESSAGES django/conf/locale/pt_BR/LC_MESSAGES django/conf/locale/ru/LC_MESSAGES django/conf/locale/sl/LC_MESSAGES django/conf/locale/sr/LC_MESSAGES django/conf/locale/sv/LC_MESSAGES django/conf/locale/ta/LC_MESSAGES django/conf/locale/te django/conf/locale/te/LC_MESSAGES django/conf/locale/tr django/conf/locale/tr/LC_MESSAGES django/conf/locale/zh_CN/LC_MESSAGES django/conf/project_template django/conf/urls django/contrib django/contrib/admin django/contrib/admin/media/css django/contrib/admin/media/js django/contrib/admin/media/js/admin django/contrib/admin/templates/admin django/contrib/admin/templates/admin/auth django/contrib/admin/templates/admin/auth/user django/contrib/admin/templates/admin_doc django/contrib/admin/templatetags django/contrib/admin/views django/contrib/auth django/contrib/auth/handlers django/contrib/comments django/contrib/comments/views django/contrib/contenttypes django/contrib/csrf django/contrib/flatpages django/contrib/formtools django/contrib/formtools/templates django/contrib/formtools/templates/formtools django/contrib/humanize/templatetags django/contrib/localflavor django/contrib/localflavor/uk django/contrib/localflavor/usa django/contrib/sessions django/contrib/sitemaps django/contrib/sitemaps/templates django/contrib/sites django/contrib/syndication django/core django/core/cache django/core/cache/backends django/core/handlers django/core/serializers django/core/servers django/db django/db/backends django/db/backends/ado_mssql django/db/backends/dummy django/db/backends/mysql django/db/backends/mysql_old django/db/backends/oracle django/db/backends/postgresql django/db/backends/postgresql_psycopg2 django/db/backends/sqlite3 django/db/models django/db/models/fields django/dispatch django/forms django/http django/middleware django/newforms django/newforms/extras django/oldforms django/shortcuts django/template django/template/loaders django/templatetags django/test django/utils django/utils/simplejson django/views django/views/generic docs extras scripts tests tests/modeltests tests/modeltests/basic tests/modeltests/choices tests/modeltests/custom_columns tests/modeltests/custom_managers tests/modeltests/custom_methods tests/modeltests/custom_pk tests/modeltests/empty tests/modeltests/field_defaults tests/modeltests/fixtures tests/modeltests/fixtures/fixtures tests/modeltests/generic_relations tests/modeltests/get_latest tests/modeltests/get_object_or_404 tests/modeltests/get_or_create tests/modeltests/invalid_models tests/modeltests/lookup tests/modeltests/m2m_and_m2o tests/modeltests/m2m_intermediary tests/modeltests/m2m_multiple tests/modeltests/m2m_recursive tests/modeltests/m2o_recursive tests/modeltests/m2o_recursive2 tests/modeltests/manipulators tests/modeltests/many_to_many tests/modeltests/many_to_one tests/modeltests/many_to_one_null tests/modeltests/model_forms tests/modeltests/model_inheritance tests/modeltests/mutually_referential tests/modeltests/one_to_one tests/modeltests/or_lookups tests/modeltests/ordering tests/modeltests/pagination tests/modeltests/properties tests/modeltests/reserved_names tests/modeltests/reverse_lookup tests/modeltests/save_delete_hooks tests/modeltests/select_related tests/modeltests/serializers tests/modeltests/str tests/modeltests/test_client tests/modeltests/test_client/fixtures tests/modeltests/transactions tests/modeltests/validation tests/regressiontests tests/regressiontests/bug639 tests/regressiontests/cache tests/regressiontests/datastructures tests/regressiontests/dateformat tests/regressiontests/db_typecasts tests/regressiontests/defaultfilters tests/regressiontests/dispatch tests/regressiontests/dispatch/tests tests/regressiontests/forms tests/regressiontests/httpwrappers tests/regressiontests/humanize tests/regressiontests/initial_sql_regress tests/regressiontests/initial_sql_regress/sql tests/regressiontests/invalid_admin_options tests/regressiontests/many_to_one_regress tests/regressiontests/markup tests/regressiontests/null_queries tests/regressiontests/one_to_one_regress tests/regressiontests/serializers_regress tests/regressiontests/string_lookup tests/regressiontests/templates tests/regressiontests/urlpatterns_reverse tests/templates

leif at geodynamics.org leif at geodynamics.org
Thu Jul 19 15:25:25 PDT 2007


Author: leif
Date: 2007-07-19 15:25:20 -0700 (Thu, 19 Jul 2007)
New Revision: 7717

Added:
   vendor/django/current/MANIFEST.in
   vendor/django/current/django/conf/locale/ca/
   vendor/django/current/django/conf/locale/ca/LC_MESSAGES/
   vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/fi/
   vendor/django/current/django/conf/locale/fi/LC_MESSAGES/
   vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/kn/
   vendor/django/current/django/conf/locale/kn/LC_MESSAGES/
   vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/lv/
   vendor/django/current/django/conf/locale/lv/LC_MESSAGES/
   vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/mk/
   vendor/django/current/django/conf/locale/mk/LC_MESSAGES/
   vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/pt/
   vendor/django/current/django/conf/locale/pt/LC_MESSAGES/
   vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/te/
   vendor/django/current/django/conf/locale/te/LC_MESSAGES/
   vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/tr/
   vendor/django/current/django/conf/locale/tr/LC_MESSAGES/
   vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.po
   vendor/django/current/django/contrib/admin/templates/admin/auth/
   vendor/django/current/django/contrib/admin/templates/admin/auth/user/
   vendor/django/current/django/contrib/admin/templates/admin/auth/user/add_form.html
   vendor/django/current/django/contrib/admin/templates/admin/auth/user/change_password.html
   vendor/django/current/django/contrib/admin/views/auth.py
   vendor/django/current/django/contrib/formtools/
   vendor/django/current/django/contrib/formtools/__init__.py
   vendor/django/current/django/contrib/formtools/preview.py
   vendor/django/current/django/contrib/formtools/templates/
   vendor/django/current/django/contrib/formtools/templates/formtools/
   vendor/django/current/django/contrib/formtools/templates/formtools/form.html
   vendor/django/current/django/contrib/formtools/templates/formtools/preview.html
   vendor/django/current/django/contrib/localflavor/
   vendor/django/current/django/contrib/localflavor/__init__.py
   vendor/django/current/django/contrib/localflavor/uk/
   vendor/django/current/django/contrib/localflavor/uk/__init__.py
   vendor/django/current/django/contrib/localflavor/uk/forms.py
   vendor/django/current/django/contrib/localflavor/usa/
   vendor/django/current/django/contrib/localflavor/usa/__init__.py
   vendor/django/current/django/contrib/localflavor/usa/forms.py
   vendor/django/current/django/contrib/localflavor/usa/us_states.py
   vendor/django/current/django/contrib/sitemaps/
   vendor/django/current/django/contrib/sitemaps/__init__.py
   vendor/django/current/django/contrib/sitemaps/templates/
   vendor/django/current/django/contrib/sitemaps/templates/sitemap.xml
   vendor/django/current/django/contrib/sitemaps/templates/sitemap_index.xml
   vendor/django/current/django/contrib/sitemaps/views.py
   vendor/django/current/django/core/serializers/pyyaml.py
   vendor/django/current/django/db/backends/mysql_old/
   vendor/django/current/django/newforms/
   vendor/django/current/django/newforms/__init__.py
   vendor/django/current/django/newforms/extras/
   vendor/django/current/django/newforms/extras/__init__.py
   vendor/django/current/django/newforms/extras/widgets.py
   vendor/django/current/django/newforms/fields.py
   vendor/django/current/django/newforms/forms.py
   vendor/django/current/django/newforms/models.py
   vendor/django/current/django/newforms/util.py
   vendor/django/current/django/newforms/widgets.py
   vendor/django/current/django/oldforms/
   vendor/django/current/django/test/
   vendor/django/current/django/test/__init__.py
   vendor/django/current/django/test/client.py
   vendor/django/current/django/test/doctest.py
   vendor/django/current/django/test/signals.py
   vendor/django/current/django/test/simple.py
   vendor/django/current/django/test/testcases.py
   vendor/django/current/django/test/utils.py
   vendor/django/current/django/utils/itercompat.py
   vendor/django/current/django/utils/simplejson/jsonfilter.py
   vendor/django/current/docs/databases.txt
   vendor/django/current/docs/distributions.txt
   vendor/django/current/docs/documentation.txt
   vendor/django/current/docs/newforms.txt
   vendor/django/current/docs/release_notes_0.96.txt
   vendor/django/current/docs/sitemaps.txt
   vendor/django/current/docs/testing.txt
   vendor/django/current/scripts/
   vendor/django/current/scripts/rpm-install.sh
   vendor/django/current/setup.cfg
   vendor/django/current/tests/modeltests/fixtures/
   vendor/django/current/tests/modeltests/fixtures/__init__.py
   vendor/django/current/tests/modeltests/fixtures/fixtures/
   vendor/django/current/tests/modeltests/fixtures/fixtures/fixture1.json
   vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.json
   vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.xml
   vendor/django/current/tests/modeltests/fixtures/fixtures/fixture3.xml
   vendor/django/current/tests/modeltests/fixtures/fixtures/initial_data.json
   vendor/django/current/tests/modeltests/fixtures/models.py
   vendor/django/current/tests/modeltests/get_object_or_404/
   vendor/django/current/tests/modeltests/get_object_or_404/__init__.py
   vendor/django/current/tests/modeltests/get_object_or_404/models.py
   vendor/django/current/tests/modeltests/model_forms/
   vendor/django/current/tests/modeltests/model_forms/__init__.py
   vendor/django/current/tests/modeltests/model_forms/models.py
   vendor/django/current/tests/modeltests/select_related/
   vendor/django/current/tests/modeltests/select_related/__init__.py
   vendor/django/current/tests/modeltests/select_related/models.py
   vendor/django/current/tests/modeltests/test_client/
   vendor/django/current/tests/modeltests/test_client/__init__.py
   vendor/django/current/tests/modeltests/test_client/fixtures/
   vendor/django/current/tests/modeltests/test_client/fixtures/testdata.json
   vendor/django/current/tests/modeltests/test_client/models.py
   vendor/django/current/tests/modeltests/test_client/urls.py
   vendor/django/current/tests/modeltests/test_client/views.py
   vendor/django/current/tests/regressiontests/bug639/
   vendor/django/current/tests/regressiontests/bug639/__init__.py
   vendor/django/current/tests/regressiontests/bug639/models.py
   vendor/django/current/tests/regressiontests/bug639/test.jpg
   vendor/django/current/tests/regressiontests/bug639/tests.py
   vendor/django/current/tests/regressiontests/cache/
   vendor/django/current/tests/regressiontests/cache/__init__.py
   vendor/django/current/tests/regressiontests/cache/models.py
   vendor/django/current/tests/regressiontests/cache/tests.py
   vendor/django/current/tests/regressiontests/datastructures/
   vendor/django/current/tests/regressiontests/datastructures/__init__.py
   vendor/django/current/tests/regressiontests/datastructures/models.py
   vendor/django/current/tests/regressiontests/datastructures/tests.py
   vendor/django/current/tests/regressiontests/dateformat/
   vendor/django/current/tests/regressiontests/dateformat/__init__.py
   vendor/django/current/tests/regressiontests/dateformat/models.py
   vendor/django/current/tests/regressiontests/dateformat/tests.py
   vendor/django/current/tests/regressiontests/db_typecasts/
   vendor/django/current/tests/regressiontests/db_typecasts/__init__.py
   vendor/django/current/tests/regressiontests/db_typecasts/models.py
   vendor/django/current/tests/regressiontests/db_typecasts/tests.py
   vendor/django/current/tests/regressiontests/defaultfilters/
   vendor/django/current/tests/regressiontests/defaultfilters/__init__.py
   vendor/django/current/tests/regressiontests/defaultfilters/models.py
   vendor/django/current/tests/regressiontests/defaultfilters/tests.py
   vendor/django/current/tests/regressiontests/dispatch/
   vendor/django/current/tests/regressiontests/dispatch/__init__.py
   vendor/django/current/tests/regressiontests/dispatch/models.py
   vendor/django/current/tests/regressiontests/dispatch/tests/
   vendor/django/current/tests/regressiontests/dispatch/tests/__init__.py
   vendor/django/current/tests/regressiontests/dispatch/tests/test_dispatcher.py
   vendor/django/current/tests/regressiontests/dispatch/tests/test_robustapply.py
   vendor/django/current/tests/regressiontests/dispatch/tests/test_saferef.py
   vendor/django/current/tests/regressiontests/forms/
   vendor/django/current/tests/regressiontests/forms/__init__.py
   vendor/django/current/tests/regressiontests/forms/models.py
   vendor/django/current/tests/regressiontests/forms/tests.py
   vendor/django/current/tests/regressiontests/httpwrappers/
   vendor/django/current/tests/regressiontests/httpwrappers/__init__.py
   vendor/django/current/tests/regressiontests/httpwrappers/models.py
   vendor/django/current/tests/regressiontests/httpwrappers/tests.py
   vendor/django/current/tests/regressiontests/humanize/
   vendor/django/current/tests/regressiontests/humanize/__init__.py
   vendor/django/current/tests/regressiontests/humanize/models.py
   vendor/django/current/tests/regressiontests/humanize/tests.py
   vendor/django/current/tests/regressiontests/invalid_admin_options/
   vendor/django/current/tests/regressiontests/invalid_admin_options/__init__.py
   vendor/django/current/tests/regressiontests/invalid_admin_options/models.py
   vendor/django/current/tests/regressiontests/markup/
   vendor/django/current/tests/regressiontests/markup/__init__.py
   vendor/django/current/tests/regressiontests/markup/models.py
   vendor/django/current/tests/regressiontests/markup/tests.py
   vendor/django/current/tests/regressiontests/null_queries/
   vendor/django/current/tests/regressiontests/null_queries/__init__.py
   vendor/django/current/tests/regressiontests/null_queries/models.py
   vendor/django/current/tests/regressiontests/serializers_regress/
   vendor/django/current/tests/regressiontests/serializers_regress/__init__.py
   vendor/django/current/tests/regressiontests/serializers_regress/models.py
   vendor/django/current/tests/regressiontests/serializers_regress/tests.py
   vendor/django/current/tests/regressiontests/templates/
   vendor/django/current/tests/regressiontests/templates/__init__.py
   vendor/django/current/tests/regressiontests/templates/models.py
   vendor/django/current/tests/regressiontests/templates/tests.py
   vendor/django/current/tests/regressiontests/templates/urls.py
   vendor/django/current/tests/regressiontests/templates/views.py
   vendor/django/current/tests/regressiontests/urlpatterns_reverse/
   vendor/django/current/tests/regressiontests/urlpatterns_reverse/__init__.py
   vendor/django/current/tests/regressiontests/urlpatterns_reverse/models.py
   vendor/django/current/tests/regressiontests/urlpatterns_reverse/tests.py
   vendor/django/current/tests/templates/
   vendor/django/current/tests/templates/404.html
   vendor/django/current/tests/templates/500.html
   vendor/django/current/tests/templates/login.html
   vendor/django/current/tests/urls.py
Modified:
   vendor/django/current/AUTHORS
   vendor/django/current/README
   vendor/django/current/django/__init__.py
   vendor/django/current/django/bin/compile-messages.py
   vendor/django/current/django/bin/daily_cleanup.py
   vendor/django/current/django/bin/make-messages.py
   vendor/django/current/django/conf/__init__.py
   vendor/django/current/django/conf/global_settings.py
   vendor/django/current/django/conf/locale/cs/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/cs/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/da/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/da/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/de/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/de/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/de/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/de/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/el/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/el/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/en/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/en/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/es/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/es/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/fr/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/fr/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/it/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/it/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/it/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/it/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/ja/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/ja/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/ja/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/ja/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/nl/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/nl/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/no/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/no/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/no/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/no/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/pl/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/pl/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/ru/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/ru/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/sl/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/sl/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/sr/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/sr/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/sr/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/sv/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/sv/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/sv/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/sv/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/locale/ta/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/ta/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
   vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/django.po
   vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
   vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
   vendor/django/current/django/conf/project_template/settings.py
   vendor/django/current/django/conf/project_template/urls.py
   vendor/django/current/django/conf/urls/defaults.py
   vendor/django/current/django/contrib/admin/media/css/forms.css
   vendor/django/current/django/contrib/admin/media/css/global.css
   vendor/django/current/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
   vendor/django/current/django/contrib/admin/media/js/admin/RelatedObjectLookups.js
   vendor/django/current/django/contrib/admin/media/js/core.js
   vendor/django/current/django/contrib/admin/media/js/dateparse.js
   vendor/django/current/django/contrib/admin/media/js/urlify.js
   vendor/django/current/django/contrib/admin/templates/admin/base.html
   vendor/django/current/django/contrib/admin/templates/admin/change_form.html
   vendor/django/current/django/contrib/admin/templates/admin/change_list.html
   vendor/django/current/django/contrib/admin/templates/admin/edit_inline_tabular.html
   vendor/django/current/django/contrib/admin/templates/admin/login.html
   vendor/django/current/django/contrib/admin/templates/admin/search_form.html
   vendor/django/current/django/contrib/admin/templates/admin_doc/model_detail.html
   vendor/django/current/django/contrib/admin/templates/admin_doc/view_detail.html
   vendor/django/current/django/contrib/admin/templatetags/admin_list.py
   vendor/django/current/django/contrib/admin/templatetags/admin_modify.py
   vendor/django/current/django/contrib/admin/urls.py
   vendor/django/current/django/contrib/admin/views/decorators.py
   vendor/django/current/django/contrib/admin/views/doc.py
   vendor/django/current/django/contrib/admin/views/main.py
   vendor/django/current/django/contrib/admin/views/template.py
   vendor/django/current/django/contrib/auth/__init__.py
   vendor/django/current/django/contrib/auth/create_superuser.py
   vendor/django/current/django/contrib/auth/decorators.py
   vendor/django/current/django/contrib/auth/forms.py
   vendor/django/current/django/contrib/auth/handlers/modpython.py
   vendor/django/current/django/contrib/auth/management.py
   vendor/django/current/django/contrib/auth/models.py
   vendor/django/current/django/contrib/auth/views.py
   vendor/django/current/django/contrib/comments/models.py
   vendor/django/current/django/contrib/comments/views/comments.py
   vendor/django/current/django/contrib/contenttypes/management.py
   vendor/django/current/django/contrib/contenttypes/models.py
   vendor/django/current/django/contrib/csrf/middleware.py
   vendor/django/current/django/contrib/flatpages/README.TXT
   vendor/django/current/django/contrib/flatpages/views.py
   vendor/django/current/django/contrib/humanize/templatetags/humanize.py
   vendor/django/current/django/contrib/sessions/middleware.py
   vendor/django/current/django/contrib/sessions/models.py
   vendor/django/current/django/contrib/sites/management.py
   vendor/django/current/django/contrib/syndication/feeds.py
   vendor/django/current/django/core/cache/__init__.py
   vendor/django/current/django/core/cache/backends/dummy.py
   vendor/django/current/django/core/cache/backends/memcached.py
   vendor/django/current/django/core/context_processors.py
   vendor/django/current/django/core/handlers/base.py
   vendor/django/current/django/core/handlers/modpython.py
   vendor/django/current/django/core/handlers/wsgi.py
   vendor/django/current/django/core/mail.py
   vendor/django/current/django/core/management.py
   vendor/django/current/django/core/paginator.py
   vendor/django/current/django/core/serializers/__init__.py
   vendor/django/current/django/core/serializers/base.py
   vendor/django/current/django/core/serializers/json.py
   vendor/django/current/django/core/serializers/python.py
   vendor/django/current/django/core/serializers/xml_serializer.py
   vendor/django/current/django/core/servers/basehttp.py
   vendor/django/current/django/core/servers/fastcgi.py
   vendor/django/current/django/core/urlresolvers.py
   vendor/django/current/django/core/validators.py
   vendor/django/current/django/core/xheaders.py
   vendor/django/current/django/db/__init__.py
   vendor/django/current/django/db/backends/ado_mssql/base.py
   vendor/django/current/django/db/backends/ado_mssql/creation.py
   vendor/django/current/django/db/backends/dummy/base.py
   vendor/django/current/django/db/backends/mysql/base.py
   vendor/django/current/django/db/backends/mysql/client.py
   vendor/django/current/django/db/backends/mysql/creation.py
   vendor/django/current/django/db/backends/mysql/introspection.py
   vendor/django/current/django/db/backends/mysql_old/base.py
   vendor/django/current/django/db/backends/mysql_old/creation.py
   vendor/django/current/django/db/backends/mysql_old/introspection.py
   vendor/django/current/django/db/backends/oracle/base.py
   vendor/django/current/django/db/backends/oracle/creation.py
   vendor/django/current/django/db/backends/postgresql/base.py
   vendor/django/current/django/db/backends/postgresql/creation.py
   vendor/django/current/django/db/backends/postgresql_psycopg2/base.py
   vendor/django/current/django/db/backends/sqlite3/base.py
   vendor/django/current/django/db/backends/sqlite3/creation.py
   vendor/django/current/django/db/backends/util.py
   vendor/django/current/django/db/models/__init__.py
   vendor/django/current/django/db/models/base.py
   vendor/django/current/django/db/models/fields/__init__.py
   vendor/django/current/django/db/models/fields/generic.py
   vendor/django/current/django/db/models/fields/related.py
   vendor/django/current/django/db/models/loading.py
   vendor/django/current/django/db/models/manager.py
   vendor/django/current/django/db/models/manipulators.py
   vendor/django/current/django/db/models/options.py
   vendor/django/current/django/db/models/query.py
   vendor/django/current/django/db/models/related.py
   vendor/django/current/django/dispatch/dispatcher.py
   vendor/django/current/django/forms/__init__.py
   vendor/django/current/django/http/__init__.py
   vendor/django/current/django/middleware/cache.py
   vendor/django/current/django/middleware/common.py
   vendor/django/current/django/middleware/doc.py
   vendor/django/current/django/middleware/gzip.py
   vendor/django/current/django/middleware/http.py
   vendor/django/current/django/oldforms/__init__.py
   vendor/django/current/django/shortcuts/__init__.py
   vendor/django/current/django/template/__init__.py
   vendor/django/current/django/template/context.py
   vendor/django/current/django/template/defaultfilters.py
   vendor/django/current/django/template/defaulttags.py
   vendor/django/current/django/template/loader.py
   vendor/django/current/django/template/loader_tags.py
   vendor/django/current/django/template/loaders/app_directories.py
   vendor/django/current/django/template/loaders/filesystem.py
   vendor/django/current/django/templatetags/__init__.py
   vendor/django/current/django/utils/datastructures.py
   vendor/django/current/django/utils/dateformat.py
   vendor/django/current/django/utils/feedgenerator.py
   vendor/django/current/django/utils/functional.py
   vendor/django/current/django/utils/simplejson/LICENSE.txt
   vendor/django/current/django/utils/simplejson/__init__.py
   vendor/django/current/django/utils/simplejson/decoder.py
   vendor/django/current/django/utils/simplejson/encoder.py
   vendor/django/current/django/utils/simplejson/scanner.py
   vendor/django/current/django/utils/text.py
   vendor/django/current/django/views/debug.py
   vendor/django/current/django/views/defaults.py
   vendor/django/current/django/views/generic/create_update.py
   vendor/django/current/django/views/generic/date_based.py
   vendor/django/current/django/views/generic/list_detail.py
   vendor/django/current/django/views/generic/simple.py
   vendor/django/current/django/views/i18n.py
   vendor/django/current/django/views/static.py
   vendor/django/current/docs/add_ons.txt
   vendor/django/current/docs/admin_css.txt
   vendor/django/current/docs/apache_auth.txt
   vendor/django/current/docs/api_stability.txt
   vendor/django/current/docs/authentication.txt
   vendor/django/current/docs/cache.txt
   vendor/django/current/docs/contributing.txt
   vendor/django/current/docs/csrf.txt
   vendor/django/current/docs/db-api.txt
   vendor/django/current/docs/design_philosophies.txt
   vendor/django/current/docs/django-admin.txt
   vendor/django/current/docs/email.txt
   vendor/django/current/docs/faq.txt
   vendor/django/current/docs/fastcgi.txt
   vendor/django/current/docs/flatpages.txt
   vendor/django/current/docs/forms.txt
   vendor/django/current/docs/generic_views.txt
   vendor/django/current/docs/i18n.txt
   vendor/django/current/docs/install.txt
   vendor/django/current/docs/legacy_databases.txt
   vendor/django/current/docs/middleware.txt
   vendor/django/current/docs/model-api.txt
   vendor/django/current/docs/modpython.txt
   vendor/django/current/docs/outputting_csv.txt
   vendor/django/current/docs/outputting_pdf.txt
   vendor/django/current/docs/overview.txt
   vendor/django/current/docs/redirects.txt
   vendor/django/current/docs/release_notes_0.95.txt
   vendor/django/current/docs/request_response.txt
   vendor/django/current/docs/serialization.txt
   vendor/django/current/docs/sessions.txt
   vendor/django/current/docs/settings.txt
   vendor/django/current/docs/sites.txt
   vendor/django/current/docs/static_files.txt
   vendor/django/current/docs/syndication_feeds.txt
   vendor/django/current/docs/templates.txt
   vendor/django/current/docs/templates_python.txt
   vendor/django/current/docs/tutorial01.txt
   vendor/django/current/docs/tutorial02.txt
   vendor/django/current/docs/tutorial03.txt
   vendor/django/current/docs/tutorial04.txt
   vendor/django/current/docs/url_dispatch.txt
   vendor/django/current/extras/django_bash_completion
   vendor/django/current/setup.py
   vendor/django/current/tests/modeltests/basic/models.py
   vendor/django/current/tests/modeltests/choices/models.py
   vendor/django/current/tests/modeltests/custom_columns/models.py
   vendor/django/current/tests/modeltests/custom_managers/models.py
   vendor/django/current/tests/modeltests/custom_methods/models.py
   vendor/django/current/tests/modeltests/custom_pk/models.py
   vendor/django/current/tests/modeltests/empty/models.py
   vendor/django/current/tests/modeltests/field_defaults/models.py
   vendor/django/current/tests/modeltests/generic_relations/models.py
   vendor/django/current/tests/modeltests/get_latest/models.py
   vendor/django/current/tests/modeltests/get_or_create/models.py
   vendor/django/current/tests/modeltests/invalid_models/models.py
   vendor/django/current/tests/modeltests/lookup/models.py
   vendor/django/current/tests/modeltests/m2m_and_m2o/models.py
   vendor/django/current/tests/modeltests/m2m_intermediary/models.py
   vendor/django/current/tests/modeltests/m2m_multiple/models.py
   vendor/django/current/tests/modeltests/m2m_recursive/models.py
   vendor/django/current/tests/modeltests/m2o_recursive/models.py
   vendor/django/current/tests/modeltests/m2o_recursive2/models.py
   vendor/django/current/tests/modeltests/manipulators/models.py
   vendor/django/current/tests/modeltests/many_to_many/models.py
   vendor/django/current/tests/modeltests/many_to_one/models.py
   vendor/django/current/tests/modeltests/many_to_one_null/models.py
   vendor/django/current/tests/modeltests/model_inheritance/models.py
   vendor/django/current/tests/modeltests/mutually_referential/models.py
   vendor/django/current/tests/modeltests/one_to_one/models.py
   vendor/django/current/tests/modeltests/or_lookups/models.py
   vendor/django/current/tests/modeltests/ordering/models.py
   vendor/django/current/tests/modeltests/pagination/models.py
   vendor/django/current/tests/modeltests/properties/models.py
   vendor/django/current/tests/modeltests/reserved_names/models.py
   vendor/django/current/tests/modeltests/reverse_lookup/models.py
   vendor/django/current/tests/modeltests/save_delete_hooks/models.py
   vendor/django/current/tests/modeltests/serializers/models.py
   vendor/django/current/tests/modeltests/str/models.py
   vendor/django/current/tests/modeltests/transactions/models.py
   vendor/django/current/tests/modeltests/validation/models.py
   vendor/django/current/tests/regressiontests/initial_sql_regress/models.py
   vendor/django/current/tests/regressiontests/initial_sql_regress/sql/simple.sql
   vendor/django/current/tests/regressiontests/many_to_one_regress/models.py
   vendor/django/current/tests/regressiontests/one_to_one_regress/models.py
   vendor/django/current/tests/regressiontests/string_lookup/models.py
   vendor/django/current/tests/runtests.py
Log:
Imported Django v0.96.


Modified: vendor/django/current/AUTHORS
===================================================================
--- vendor/django/current/AUTHORS	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/AUTHORS	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,7 +1,6 @@
 Django was originally created in late 2003 at World Online, the Web division
 of the Lawrence Journal-World newspaper in Lawrence, Kansas.
 
-
 The PRIMARY AUTHORS are (and/or have been):
 
 Adrian Holovaty <http://www.holovaty.com/>, who originally created Django with
@@ -42,99 +41,165 @@
 people who have submitted patches, reported bugs, added translations, helped
 answer newbie questions, and generally made Django that much better:
 
-    akaihola
+    adurdin at gmail.com
     Andreas
+    andy at jadedplanet.net
+    ant9000 at netwise.it
     David Ascher <http://ascher.ca/>
     Arthur <avandorp at gmail.com>
     Jiri Barton
     Ned Batchelder <http://www.nedbatchelder.com/>
     Shannon -jj Behrens <http://jjinux.blogspot.com/>
+    Esdras Beleza <linux at esdrasbeleza.com>
     James Bennett
+    Ben <afternoon at uk2.net>
     Paul Bissex <http://e-scribe.com/>
     Simon Blanchard
     Andrew Brehaut <http://brehaut.net/blog>
-    andy at jadedplanet.net
+    brut.alll at gmail.com
+    Jonathan Buchanan <jonathan.buchanan at gmail.com>
     Antonio Cavedoni <http://cavedoni.com/>
     C8E
     Chris Chamberlin <dja at cdc.msbx.net>
     Amit Chakradeo <http://amit.chakradeo.net/>
     ChaosKCW
     Ian Clelland <clelland at gmail.com>
+    crankycoder at gmail.com
     Matt Croydon <http://www.postneo.com/>
+    Jure Cuhalev <gandalf at owca.info>
+    dackze+django at gmail.com
+    Dirk Datzert <dummy at habmalnefrage.de>
     Jonathan Daugherty (cygnus) <http://www.cprogrammer.org/>
+    dave at thebarproject.com
     Jason Davies (Esaj) <http://www.jasondavies.com/>
     Alex Dedul
     deric at monowerks.com
     dne at mayonnaise.net
+    Maximillian Dornseif <md at hudora.de>
     Jeremy Dunck <http://dunck.us/>
+    Andy Dustman <farcepest at gmail.com>
     Clint Ecker
+    Enrico <rico.bl at gmail.com>
+    Ludvig Ericson <ludvig.ericson at gmail.com>
+    Dirk Eschler <dirk.eschler at gmx.net>
+    Marc Fargas <telenieko at telenieko.com>
+    favo at exoweb.net
+    Eric Floehr <eric at intellovations.com>
+    Jorge Gajon <gajon at gajon.org>
     gandalf at owca.info
     Baishampayan Ghose
+    martin.glueck at gmail.com
+    Simon Greenhill <dev at simon.net.nz>
+    Owen Griffiths
     Espen Grindhaug <http://grindhaug.org/>
+    Brian Harring <ferringb at gmail.com>
     Brant Harris
+    Hawkeye
+    Joe Heck <http://www.rhonabwy.com/wp/>
+    Joel Heenan <joelh-django at planetjoel.com>
     hipertracker at gmail.com
     Ian Holsman <http://feh.holsman.net/>
     Kieran Holland <http://www.kieranholland.com>
     Robert Rock Howard <http://djangomojo.com/>
     Jason Huggins <http://www.jrandolph.com/blog/>
+    Tom Insam
+    Baurzhan Ismagulov <ibr at radix50.net>
     jcrasta at gmail.com
     Michael Josephson <http://www.sdjournal.com/>
     jpellerin at gmail.com
     junzhang.jn at gmail.com
+    Antti Kaihola <http://akaihola.blogspot.com/>
+    Ben Dean Kawamura <ben.dean.kawamura at gmail.com>
     Garth Kidd <http://www.deadlybloodyserious.com/>
     kilian <kilian.cavalotti at lip6.fr>
     Sune Kirkeby <http://ibofobi.dk/>
+    Bastian Kleineidam <calvin at debian.org>
     Cameron Knight (ckknight)
+    Meir Kriheli <http://mksoft.co.il/>
     Bruce Kroeze <http://coderseye.com/>
     Joseph Kocherhans
     konrad at gwu.edu
     lakin.wecker at gmail.com
     Stuart Langridge <http://www.kryogenix.org/>
+    Nicola Larosa <nico at teknico.net>
     Eugene Lazutkin <http://lazutkin.com/blog/>
+    Jeong-Min Lee <falsetru at gmail.com>
     Christopher Lenz <http://www.cmlenz.net/>
+    lerouxb at gmail.com
+    Waylan Limberg <waylan at gmail.com>
     limodou
+    mattmcc
     Martin Maney <http://www.chipy.org/Martin_Maney>
+    masonsimon+django at gmail.com
     Manuzhai
-    Petar Marić
+    Petar Marić <http://www.petarmaric.com/>
+    Nuno Mariz <nmariz at gmail.com>
     mark at junklight.com
+    Yasushi Masuda <whosaysni at gmail.com>
     mattycakes at gmail.com
     Jason McBrayer <http://www.carcosa.net/jason/>
+    mccutchen at gmail.com
     michael.mcewan at gmail.com
-    mir at noris.de
+    mikko at sorl.net
+    mitakummaa at gmail.com
     mmarshall
     Eric Moritz <http://eric.themoritzfamily.com/>
     Robin Munn <http://www.geekforgod.com/>
+    Robert Myers <myer0052 at gmail.com>
     Nebojša Dorđević
+    Fraser Nevett <mail at nevett.org>
     Sam Newman <http://www.magpiebrain.com/>
     Neal Norwitz <nnorwitz at google.com>
     oggie rob <oz.robharvey at gmail.com>
     Jay Parlar <parlar at gmail.com>
+    pavithran s <pavithran.s at gmail.com>
     pgross at thoughtworks.com
     phaedo <http://phaedo.cx/>
     phil at produxion.net
+    phil.h.smith at gmail.com
     Gustavo Picon
     Luke Plant <http://lukeplant.me.uk/>
     plisk
     Daniel Poelzleithner <http://poelzi.org/>
     J. Rademaker
+    Michael Radziej <mir at noris.de>
+    ramiro
     Brian Ray <http://brianray.chipy.org/>
+    remco at diji.biz
     rhettg at gmail.com
     Oliver Rutherfurd <http://rutherfurd.net/>
     Ivan Sagalaev (Maniac) <http://www.softwaremaniacs.org/>
     David Schein
+    scott at staplefish.com
+    serbaut at gmail.com
+    Pete Shinners <pete at shinners.org>
+    SmileyChris <smileychris at gmail.com>
+    smurf at smurf.noris.de
     sopel
+    Georgi Stanojevski <glisha at gmail.com>
+    Thomas Steinacher <http://www.eggdrop.ch/>
+    nowell strite
     Radek Å varz <http://www.svarz.cz/translate/>
     Swaroop C H <http://www.swaroopch.info>
     Aaron Swartz <http://www.aaronsw.com/>
+    Tyson Tate <tyson at fallingbullets.com>
     Tom Tobin
-    Tom Insam
     Joe Topjian <http://joe.terrarum.net/geek/code/python/django/>
+    torne-django at wolfpuppy.org.uk
+    Karen Tracey <graybark at bellsouth.net>
+    Makoto Tsuyuki <mtsuyuki at gmail.com>
     Amit Upadhyay
     Geert Vanderkelen
+    viestards.lists at gmail.com
     Milton Waddams
+    wam-djangobug at wamber.net
+    Dan Watson <http://theidioteque.net/>
+    Chris Wesseling <Chris.Wesseling at cwi.nl>
     Rachel Willmer <http://www.willmer.com/kb/>
+    Gary Wilson <gary.wilson at gmail.com>
     wojtek
     ye7cakf02 at sneakemail.com
+    ymasuda at ethercube.com
     Cheng Zhang
 
 A big THANK YOU goes to:

Added: vendor/django/current/MANIFEST.in
===================================================================
--- vendor/django/current/MANIFEST.in	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/MANIFEST.in	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,10 @@
+include AUTHORS
+include INSTALL
+include LICENSE
+recursive-include docs *
+recursive-include scripts *
+recursive-include django/conf/locale *
+recursive-include django/contrib/admin/templates *
+recursive-include django/contrib/admin/media *
+recursive-include django/contrib/comments/templates *
+recursive-include django/contrib/sitemaps/templates *

Modified: vendor/django/current/README
===================================================================
--- vendor/django/current/README	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/README	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,10 +25,10 @@
 To get more help:
 
     * Join the #django channel on irc.freenode.net. Lots of helpful people
-      hang out there. Read the archives at http://loglibrary.com/179 .
+      hang out there. Read the archives at http://simon.bofh.ms/logger/django/ .
 
     * Join the django-users mailing list, or read the archives, at
-      http://groups-beta.google.com/group/django-users.
+      http://groups.google.com/group/django-users.
 
 To contribute to Django:
 

Modified: vendor/django/current/django/__init__.py
===================================================================
--- vendor/django/current/django/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1 +1 @@
-VERSION = (0, 95.1, None)
+VERSION = (0, 96, None)

Modified: vendor/django/current/django/bin/compile-messages.py
===================================================================
--- vendor/django/current/django/bin/compile-messages.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/bin/compile-messages.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,9 +1,10 @@
 #!/usr/bin/env python
 
+import optparse
 import os
 import sys
 
-def compile_messages():
+def compile_messages(locale=None):
     basedir = None
 
     if os.path.isdir(os.path.join('conf', 'locale')):
@@ -11,10 +12,13 @@
     elif os.path.isdir('locale'):
         basedir = os.path.abspath('locale')
     else:
-        print "this script should be run from the django svn tree or your project or app tree"
+        print "This script should be run from the Django SVN tree or your project or app tree."
         sys.exit(1)
 
-    for (dirpath, dirnames, filenames) in os.walk(basedir):
+    if locale is not None:
+        basedir = os.path.join(basedir, locale, 'LC_MESSAGES')
+
+    for dirpath, dirnames, filenames in os.walk(basedir):
         for f in filenames:
             if f.endswith('.po'):
                 sys.stderr.write('processing file %s in %s\n' % (f, dirpath))
@@ -29,8 +33,17 @@
                 if sys.platform == 'win32': # Different shell-variable syntax
                     cmd = 'msgfmt -o "%djangocompilemo%" "%djangocompilepo%"'
                 else:
-                    cmd = 'msgfmt -o "$djangocompilemo" "$djangocompilepo"' 
+                    cmd = 'msgfmt -o "$djangocompilemo" "$djangocompilepo"'
                 os.system(cmd)
 
+def main():
+    parser = optparse.OptionParser()
+    parser.add_option('-l', '--locale', dest='locale',
+            help="The locale to process. Default is to process all.")
+    options, args = parser.parse_args()
+    if len(args):
+        parser.error("This program takes no arguments")
+    compile_messages(options.locale)
+
 if __name__ == "__main__":
-    compile_messages()
+    main()

Modified: vendor/django/current/django/bin/daily_cleanup.py
===================================================================
--- vendor/django/current/django/bin/daily_cleanup.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/bin/daily_cleanup.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,16 +1,19 @@
-"Daily cleanup file"
+#!/usr/bin/env python
 
+"""
+Daily cleanup job.
+
+Can be run as a cronjob to clean out old data from the database (only expired
+sessions at the moment).
+"""
+
 from django.db import backend, connection, transaction
 
-DOCUMENTATION_DIRECTORY = '/home/html/documentation/'
-
 def clean_up():
     # Clean up old database records
     cursor = connection.cursor()
     cursor.execute("DELETE FROM %s WHERE %s < NOW()" % \
-        (backend.quote_name('core_sessions'), backend.quote_name('expire_date')))
-    cursor.execute("DELETE FROM %s WHERE %s < NOW() - INTERVAL '1 week'" % \
-        (backend.quote_name('registration_challenges'), backend.quote_name('request_date')))
+        (backend.quote_name('django_session'), backend.quote_name('expire_date')))
     transaction.commit_unless_managed()
 
 if __name__ == "__main__":

Modified: vendor/django/current/django/bin/make-messages.py
===================================================================
--- vendor/django/current/django/bin/make-messages.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/bin/make-messages.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -81,7 +81,7 @@
                     src = pythonize_re.sub('\n#', src)
                     open(os.path.join(dirpath, '%s.py' % file), "wb").write(src)
                     thefile = '%s.py' % file
-                    cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy -o - "%s"' % (
+                    cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy --from-code UTF-8 -o - "%s"' % (
                         os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
                     (stdin, stdout, stderr) = os.popen3(cmd, 'b')
                     msgs = stdout.read()
@@ -103,7 +103,7 @@
                         open(os.path.join(dirpath, '%s.py' % file), "wb").write(templatize(src))
                         thefile = '%s.py' % file
                     if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
-                    cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy -o - "%s"' % (
+                    cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy --from-code UTF-8 -o - "%s"' % (
                         os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
                     (stdin, stdout, stderr) = os.popen3(cmd, 'b')
                     msgs = stdout.read()

Modified: vendor/django/current/django/conf/__init__.py
===================================================================
--- vendor/django/current/django/conf/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,6 +7,7 @@
 """
 
 import os
+import time     # Needed for Windows
 from django.conf import global_settings
 
 ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
@@ -77,7 +78,7 @@
         self.SETTINGS_MODULE = settings_module
 
         try:
-            mod = __import__(self.SETTINGS_MODULE, '', '', [''])
+            mod = __import__(self.SETTINGS_MODULE, {}, {}, [''])
         except ImportError, e:
             raise EnvironmentError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
 
@@ -97,7 +98,7 @@
         new_installed_apps = []
         for app in self.INSTALLED_APPS:
             if app.endswith('.*'):
-                appdir = os.path.dirname(__import__(app[:-2], '', '', ['']).__file__)
+                appdir = os.path.dirname(__import__(app[:-2], {}, {}, ['']).__file__)
                 for d in os.listdir(appdir):
                     if d.isalpha() and os.path.isdir(os.path.join(appdir, d)):
                         new_installed_apps.append('%s.%s' % (app[:-2], d))
@@ -105,8 +106,10 @@
                 new_installed_apps.append(app)
         self.INSTALLED_APPS = new_installed_apps
 
-        # move the time zone info into os.environ
-        os.environ['TZ'] = self.TIME_ZONE
+        if hasattr(time, 'tzset'):
+            # Move the time zone info into os.environ. See ticket #2315 for why
+            # we don't do this unconditionally (breaks Windows).
+            os.environ['TZ'] = self.TIME_ZONE
 
     def get_all_members(self):
         return dir(self)

Modified: vendor/django/current/django/conf/global_settings.py
===================================================================
--- vendor/django/current/django/conf/global_settings.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/global_settings.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,7 +25,7 @@
 INTERNAL_IPS = ()
 
 # Local time zone for this installation. All choices can be found here:
-# http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
+# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
 TIME_ZONE = 'America/Chicago'
 
 # Language code for this installation. All choices can be found here:
@@ -38,6 +38,7 @@
 LANGUAGES = (
     ('ar', gettext_noop('Arabic')),
     ('bn', gettext_noop('Bengali')),
+    ('ca', gettext_noop('Catalan')),
     ('cs', gettext_noop('Czech')),
     ('cy', gettext_noop('Welsh')),
     ('da', gettext_noop('Danish')),
@@ -46,6 +47,7 @@
     ('en', gettext_noop('English')),
     ('es', gettext_noop('Spanish')),
     ('es_AR', gettext_noop('Argentinean Spanish')),
+    ('fi', gettext_noop('Finnish')),
     ('fr', gettext_noop('French')),
     ('gl', gettext_noop('Galician')),
     ('hu', gettext_noop('Hungarian')),
@@ -53,8 +55,13 @@
     ('is', gettext_noop('Icelandic')),
     ('it', gettext_noop('Italian')),
     ('ja', gettext_noop('Japanese')),
+    ('kn', gettext_noop('Kannada')),
+    ('lv', gettext_noop('Latvian')),
+    ('mk', gettext_noop('Macedonian')),
     ('nl', gettext_noop('Dutch')),
     ('no', gettext_noop('Norwegian')),
+    ('pl', gettext_noop('Polish')),
+    ('pt', gettext_noop('Portugese')),
     ('pt-br', gettext_noop('Brazilian')),
     ('ro', gettext_noop('Romanian')),
     ('ru', gettext_noop('Russian')),
@@ -63,6 +70,8 @@
     ('sr', gettext_noop('Serbian')),
     ('sv', gettext_noop('Swedish')),
     ('ta', gettext_noop('Tamil')),
+    ('te', gettext_noop('Telugu')),
+    ('tr', gettext_noop('Turkish')),
     ('uk', gettext_noop('Ukrainian')),
     ('zh-cn', gettext_noop('Simplified Chinese')),
     ('zh-tw', gettext_noop('Traditional Chinese')),
@@ -92,12 +101,13 @@
 SEND_BROKEN_LINK_EMAILS = False
 
 # Database connection info.
-DATABASE_ENGINE = ''           # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
+DATABASE_ENGINE = ''           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
 DATABASE_NAME = ''             # Or path to database file if using sqlite3.
 DATABASE_USER = ''             # Not used with sqlite3.
 DATABASE_PASSWORD = ''         # Not used with sqlite3.
 DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
 DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
+DATABASE_OPTIONS = {}          # Set to empty dictionary for default.
 
 # Host for sending e-mail.
 EMAIL_HOST = 'localhost'
@@ -221,14 +231,14 @@
 # http://www.djangoproject.com/documentation/templates/#now
 MONTH_DAY_FORMAT = 'F j'
 
-# Whether to enable Psyco, which optimizes Python code. Requires Psyco.
-# http://psyco.sourceforge.net/
-ENABLE_PSYCO = False
-
 # Do you want to manage transactions manually?
 # Hint: you really don't!
 TRANSACTIONS_MANAGED = False
 
+# The User-Agent string to use when checking for URL validity through the
+# isExistingURL validator.
+URL_VALIDATOR_USER_AGENT = "Django/0.96pre (http://www.djangoproject.com)"
+
 ##############
 # MIDDLEWARE #
 ##############
@@ -252,6 +262,7 @@
 SESSION_COOKIE_NAME = 'sessionid'         # Cookie name. This can be whatever you want.
 SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # Age of cookie, in seconds (default: 2 weeks).
 SESSION_COOKIE_DOMAIN = None              # A string like ".lawrence.com", or None for standard domain cookie.
+SESSION_COOKIE_SECURE = False             # Whether the session cookie should be secure (https:// only).
 SESSION_SAVE_EVERY_REQUEST = False        # Whether to save the session data on every request.
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # Whether sessions expire when a user closes his browser.
 
@@ -270,6 +281,10 @@
 
 COMMENTS_ALLOW_PROFANITIES = False
 
+# The profanities that will trigger a validation error in the
+# 'hasNoProfanities' validator. All of these should be in lowercase.
+PROFANITIES_LIST = ('asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit')
+
 # The group ID that designates which users are banned.
 # Set to None if you're not using it.
 COMMENTS_BANNED_USERS_GROUP = None
@@ -295,3 +310,21 @@
 ##################
 
 AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
+
+###########
+# TESTING #
+###########
+
+# The name of the method to use to invoke the test suite
+TEST_RUNNER = 'django.test.simple.run_tests'
+
+# The name of the database to use for testing purposes.
+# If None, a name of 'test_' + DATABASE_NAME will be assumed
+TEST_DATABASE_NAME = None
+
+############
+# FIXTURES #
+############
+
+# The list of directories to search for fixtures
+FIXTURE_DIRS = ()

Added: vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ca/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2383 @@
+# translation of django.po to
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Ricardo Javier Cárdenes Medina <ricardo.cardenes at gmail.com>, 2005.
+# Ricardo Javier Cardenes Medina <ricardo.cardenes at gmail.com>, 2005.
+# Marc Fargas <marc at fargas.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-15 11:05+1100\n"
+"PO-Revision-Date: 2007-01-19 10:23+0100\n"
+"Last-Translator: Marc Fargas <marc at fargas.com>\n"
+"Language-Team:  <es at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: db/models/manipulators.py:305
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "Ja existeix %(object)s amb aquest %(fieldname)s."
+
+#: db/models/manipulators.py:306 contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339
+msgid "and"
+msgstr "i"
+
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Si us plau, introdueixi un %s vàlid."
+
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Separi múltiples IDs amb comes."
+
+#: db/models/fields/related.py:644
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Premi \"Control\" o \"Command\" en un Mac per escollir més d'un."
+
+#: 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] ""
+"Si us plau, introdueixi IDs de %(self)s vàlids. El valor %(value)r és "
+"invàlid."
+msgstr[1] ""
+"Si us plau, introdueixi IDs de %(self)s vàlids. Els valors %(value)r són "
+"invàlids."
+
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "Ja existeix  %(optname)s amb auqest %(fieldname)s."
+
+#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
+#: oldforms/__init__.py:352 newforms/fields.py:78 newforms/fields.py:373
+#: newforms/fields.py:449 newforms/fields.py:460
+msgid "This field is required."
+msgstr "Aquest camp és obligatori."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Aquest valor ha de ser  un enter."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)"
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Aquest camp no pot ser null (estar buit)."
+
+#: db/models/fields/__init__.py:454 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD."
+
+#: db/models/fields/__init__.py:521 core/validators.py:156
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Introdueixi un data/hora vàlida en format YYYY-MM-DD HH:MM."
+
+#: db/models/fields/__init__.py:625
+msgid "Enter a valid filename."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr ""
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Bengalí"
+
+#: conf/global_settings.py:41
+#, fuzzy
+msgid "Catalan"
+msgstr "Italià"
+
+#: conf/global_settings.py:42
+msgid "Czech"
+msgstr "Chec"
+
+#: conf/global_settings.py:43
+msgid "Welsh"
+msgstr "Galès"
+
+#: conf/global_settings.py:44
+msgid "Danish"
+msgstr "Danès"
+
+#: conf/global_settings.py:45
+msgid "German"
+msgstr "Alemany"
+
+#: conf/global_settings.py:46
+msgid "Greek"
+msgstr "Grec"
+
+#: conf/global_settings.py:47
+msgid "English"
+msgstr "Anglès"
+
+#: conf/global_settings.py:48
+msgid "Spanish"
+msgstr "Espanyol"
+
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: conf/global_settings.py:50
+#, fuzzy
+msgid "Finnish"
+msgstr "Danès"
+
+#: conf/global_settings.py:51
+msgid "French"
+msgstr "Francés"
+
+#: conf/global_settings.py:52
+msgid "Galician"
+msgstr "Galleg"
+
+#: conf/global_settings.py:53
+msgid "Hungarian"
+msgstr "Húngar"
+
+#: conf/global_settings.py:54
+msgid "Hebrew"
+msgstr "Hebreu"
+
+#: conf/global_settings.py:55
+msgid "Icelandic"
+msgstr "Islandés"
+
+#: conf/global_settings.py:56
+msgid "Italian"
+msgstr "Italià"
+
+#: conf/global_settings.py:57
+msgid "Japanese"
+msgstr "Japonés"
+
+#: conf/global_settings.py:58
+msgid "Latvian"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Macedonian"
+msgstr ""
+
+#: conf/global_settings.py:60
+msgid "Dutch"
+msgstr "Holandés"
+
+#: conf/global_settings.py:61
+msgid "Norwegian"
+msgstr "Norueg"
+
+#: conf/global_settings.py:62
+#, fuzzy
+msgid "Polish"
+msgstr "Anglès"
+
+#: conf/global_settings.py:63
+msgid "Brazilian"
+msgstr "Brasileny"
+
+#: conf/global_settings.py:64
+msgid "Romanian"
+msgstr "Rumanés"
+
+#: conf/global_settings.py:65
+msgid "Russian"
+msgstr "Rús"
+
+#: conf/global_settings.py:66
+msgid "Slovak"
+msgstr "Eslovac"
+
+#: conf/global_settings.py:67
+msgid "Slovenian"
+msgstr "Esloveni"
+
+#: conf/global_settings.py:68
+msgid "Serbian"
+msgstr "Serbi"
+
+#: conf/global_settings.py:69
+msgid "Swedish"
+msgstr "Suec"
+
+#: conf/global_settings.py:70
+msgid "Tamil"
+msgstr ""
+
+#: conf/global_settings.py:71
+msgid "Turkish"
+msgstr ""
+
+#: conf/global_settings.py:72
+msgid "Ukrainian"
+msgstr "Ucranià"
+
+#: conf/global_settings.py:73
+msgid "Simplified Chinese"
+msgstr "Xinés simplificat"
+
+#: conf/global_settings.py:74
+msgid "Traditional Chinese"
+msgstr "Xinés tradicional"
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "any"
+msgstr[1] "anys"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "mes"
+msgstr[1] "mesos"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "setmana"
+msgstr[1] "setmanes"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "dia"
+msgstr[1] "dies"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "hora"
+msgstr[1] "hores"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minut"
+msgstr[1] "minuts"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Dilluns"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Dimarts"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Dimecres"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Dijous"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Divendres"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Dissabte"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Diumenge"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Gener"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Febrer"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Març"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Abril"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Maig"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Juny"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Juliol"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Agost"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Setembre"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Octubre"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembre"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Desembre"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "gen"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "feb"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "mar"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "abr"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "mai"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "jun"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "jul"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "ago"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "set"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "oct"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "nov"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "des"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Gen."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Feb."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Ago."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Set."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Oct."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Des."
+
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "F j, Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "F j, Y, H:i"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "H:i"
+
+#: utils/translation/trans_real.py:380
+#, fuzzy
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F j, Y"
+
+#: utils/translation/trans_real.py:381
+#, fuzzy
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j, Y"
+
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Aseguris de que el seu texte té menys de %s caracter."
+msgstr[1] "Aseguris de que el seu texte té menys de %s caracters."
+
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "No es permeten salts de linea."
+
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Esculli una opció vàlida; %(data)s' no està dintre de %(choices)s."
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:150
+#: newforms/widgets.py:162
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:162
+msgid "Yes"
+msgstr "Si"
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:162
+msgid "No"
+msgstr "No"
+
+#: oldforms/__init__.py:667 core/validators.py:173 core/validators.py:442
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "El fitxer enviat està buit."
+
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Introdueixi un número enter entre -32,768 i 32,767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Introdueixi un número positiu."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Introdueixi un número entre 0 i 32,767."
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "clau de la sessió"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "dades de la sessió"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "data de caducitat"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "sessió"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "sessions"
+
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr ""
+
+#: contrib/auth/forms.py:25
+#, fuzzy
+msgid "A user with that username already exists."
+msgstr "Ja existeix  %(optname)s amb auqest %(fieldname)s."
+
+#: contrib/auth/forms.py:53
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"El seu navegador no sembla tenir les 'cookies' (galetes) activades. Aquestes "
+"són necessàries per iniciar la sessió."
+
+#: 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 ""
+"Si us plau, introdueixi un nom d'usuari i contrasenya vàlids. Tingui en "
+"compte que tots dos camps son sensibles a majúscules i minúscules."
+
+#: 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
+#, fuzzy
+msgid "Logged out"
+msgstr "Finalitzar sessió"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "nom"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "nom en clau"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "permís"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "permissos"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "grup"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "grups"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "nom d'usuari"
+
+#: 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 "nom propi"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "cognoms"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "adreça de correu electrònic"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "contrasenya"
+
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "és membre del personal"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "actiu"
+
+#: contrib/auth/models.py:96
+#, fuzzy
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "estat de superusuari"
+
+#: 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 "últim inici de sessió"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "data de creació"
+
+#: 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 ""
+"Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els "
+"permissos dels grups dels que sigui membre."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "permissos de l'usuari"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "usuari"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "usuaris"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Informaciò personal"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "permissos"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Dates importants"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Grups"
+
+#: contrib/auth/models.py:258
+msgid "message"
+msgstr "missatge"
+
+#: contrib/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "nom de la classe del model en python"
+
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr "tipus de contingut"
+
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "tipus de continguts"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "redirigir desde"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Aquesta ruta hauria de ser el camí absolut, excluint el nom del domini. "
+"Exemple '/events/search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "redirigir a"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Això pot ser bé una ruta absoluta (com abans) o una URL completa que comenci "
+"per http:// ."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "redirecció"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "redireccions"
+
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
+msgid "URL"
+msgstr "URL"
+
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Exemple: '/about/contact/'. Asseguri's de posar les barres al principi i al "
+"final."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "tìtol"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "contingut"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "habilitar comentaris"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "nom de la plantilla"
+
+#: contrib/flatpages/models.py:13
+#, fuzzy
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Exemple: 'flatpages/contact_page'. Si no el proporciona, el sistema "
+"utilitzarà 'flatpages/default'."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "ha de estar registrat"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Si està marcat, només els usuaris registrats podran veure la pàgina."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "pàgina estàtica"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "pàgines estàtiques"
+
+#: contrib/comments/models.py:67 contrib/comments/models.py:166
+msgid "object ID"
+msgstr "ID de l'objete"
+
+#: contrib/comments/models.py:68
+msgid "headline"
+msgstr "encapçalament"
+
+#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:167
+msgid "comment"
+msgstr "comentari"
+
+#: contrib/comments/models.py:70
+msgid "rating #1"
+msgstr "calificació 1"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "calificació 2"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "calificació 3"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "calificació 4"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "calificació 5"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "calificació 6"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "calificació 7"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "calificació 8"
+
+#: contrib/comments/models.py:82
+msgid "is valid rating"
+msgstr "es calificació vàlida"
+
+#: contrib/comments/models.py:83 contrib/comments/models.py:169
+msgid "date/time submitted"
+msgstr "data/hora d'enviament"
+
+#: contrib/comments/models.py:84 contrib/comments/models.py:170
+msgid "is public"
+msgstr "és públic"
+
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
+msgid "IP address"
+msgstr "Adreça IP"
+
+#: contrib/comments/models.py:86
+msgid "is removed"
+msgstr "està eliminat"
+
+#: 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 ""
+"Marqui aquesta caixa si el comentari és inapropiat. En lloc seu es mostrarà "
+"\"Aquest comentari ha estat eliminat\" "
+
+#: contrib/comments/models.py:91
+msgid "comments"
+msgstr "comentaris"
+
+#: contrib/comments/models.py:131 contrib/comments/models.py:207
+msgid "Content object"
+msgstr "Objete Contingut"
+
+#: 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 ""
+"Enviat per %(user)s el %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "nom de la persona"
+
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "adreça ip"
+
+#: contrib/comments/models.py:173
+msgid "approved by staff"
+msgstr "aprovat per el \"staff\""
+
+#: contrib/comments/models.py:176
+msgid "free comment"
+msgstr "comentari lliure"
+
+#: contrib/comments/models.py:177
+msgid "free comments"
+msgstr "comentaris lliures"
+
+#: contrib/comments/models.py:233
+msgid "score"
+msgstr "puntuació"
+
+#: contrib/comments/models.py:234
+msgid "score date"
+msgstr "data de la puntuació"
+
+#: contrib/comments/models.py:237
+msgid "karma score"
+msgstr "puntuació de karma"
+
+#: contrib/comments/models.py:238
+msgid "karma scores"
+msgstr "punts de karma"
+
+#: contrib/comments/models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "%(score)d punt per %(user)s"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Aquest comentari va ser marcat per %(user)s:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/models.py:265
+msgid "flag date"
+msgstr "data de la marca"
+
+#: contrib/comments/models.py:268
+msgid "user flag"
+msgstr "marca d'usuari"
+
+#: contrib/comments/models.py:269
+msgid "user flags"
+msgstr "marques d'usuari"
+
+#: contrib/comments/models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "Marca de %r"
+
+#: contrib/comments/models.py:278
+msgid "deletion date"
+msgstr "data d'eliminació"
+
+#: contrib/comments/models.py:280
+msgid "moderator deletion"
+msgstr "eliminació del moderador"
+
+#: contrib/comments/models.py:281
+msgid "moderator deletions"
+msgstr "eliminacions del moderador"
+
+#: contrib/comments/models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "eliminació del moderador per %r"
+
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:17
+msgid "Username:"
+msgstr "Usuari:"
+
+#: 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 "Finalitzar sessió"
+
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Contrasenya:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Contrasenya oblidada?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Calificacions"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Requerit"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Opcional"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Enviar una fotografia"
+
+#: contrib/comments/templates/comments/form.html:28
+#: contrib/comments/templates/comments/freeform.html:5
+msgid "Comment:"
+msgstr "Comentari:"
+
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
+msgid "Preview comment"
+msgstr "Previsualitzar comentari"
+
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "El seu nom:"
+
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Els usuaris anònims no poden votar"
+
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "ID del comentari invàlid"
+
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "No pots votar-te a tu mateix"
+
+#: contrib/comments/views/comments.py:27
+msgid ""
+"This rating is required because you've entered at least one other rating."
+msgstr "Es precisa aquesta puntuació perquè has introduit almenys un altre."
+
+#: 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] ""
+"Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s "
+"comentari:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s "
+"comentaris:\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 ""
+"Aquest comentari va ser publicat per un usuari incomplert\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Només s'admed POST"
+
+#: contrib/comments/views/comments.py:192
+#: contrib/comments/views/comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Un o més dels caps requerits no ha estat sotmés"
+
+#: contrib/comments/views/comments.py:196
+#: contrib/comments/views/comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr ""
+"Algú està jugant amb el formulari de comentaris (violació de seguretat)"
+
+#: 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 ""
+"El formulari de comentaris tenia un paràmetre 'target' invàlid -- el ID del "
+"objecte era invàlid"
+
+#: contrib/comments/views/comments.py:257
+#: contrib/comments/views/comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr ""
+"El formulari del comentari no ha proveit ni 'previsualitzar' ni 'enviar'"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "nom del domini"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "nom per mostrar"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "lloc"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "llocs"
+
+#: contrib/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>Per %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "Tots"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "Cualsevol data"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "Avui"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "Últims 7 dies"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "Aquest mes"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "Aquest any"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "moment de l'acció"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "id del objecte"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "'repr' de l'objecte"
+
+#: contrib/admin/models.py:21
+msgid "action flag"
+msgstr "marca de l'acció"
+
+#: contrib/admin/models.py:22
+msgid "change message"
+msgstr "missatge del canvi"
+
+#: contrib/admin/models.py:25
+msgid "log entry"
+msgstr "entrada del registre"
+
+#: contrib/admin/models.py:26
+msgid "log entries"
+msgstr "entrades del registre"
+
+#: contrib/admin/templatetags/admin_list.py:238
+msgid "All dates"
+msgstr "Totes les dates"
+
+#: 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 "Inici"
+
+#: 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 "Documentació"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "'Bookmarklets'"
+
+#: 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 "Canviar clau"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "'Bookmarklets' de documentació"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">Per a instalar 'bookmarklets', arrosegui l'enllaç a la "
+"seva barra de\n"
+"marcadors, o faci click amb el botò dret en l'enllaç i afegeixi'l als "
+"marcadors.\n"
+"Ara pot escollir el 'bookmarklet' desde cualsevol pàgina del lloc.\n"
+"Observi que alguns d'aquests 'bookmarklets' precisen que estigui veient\n"
+"el lloc desde un ordinador senyalat com a \"intern\" (parli\n"
+"amb el seu administrador de sistemes si no està segur de la condició del "
+"seu).</p>\n"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "Documentació d'aquesta pàgina"
+
+#: 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 ""
+"El porta desde cualsevol pàgina de la documentació a la vista que la genera."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "Mostra el ID de l'objecte"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Mostra el 'content-type' (tipus de contingut) i el ID inequívoc de les "
+"pàgines que representen un únic objecte."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "Editar aquest objecte (finestra actual)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+"El porta a la pàgina d'administració de pàgines que representen un únic "
+"objecte."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "Editar aquest objecte (nova finestra)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Com abans, però obre la pàgina d'administració en una nova finestra."
+
+#: contrib/admin/templates/admin/submit_line.html:3
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+msgid "Delete"
+msgstr "Eliminar"
+
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "Desar com a nou"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "Desar i afegir-ne un de nou"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "Desar i continuar editant"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "Desar"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Error del servidor"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Error del servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Error del servidor <em>(500)</em>"
+
+#: 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 ""
+"Hi ha hagut un error. S'ha informat als administradors del lloc per correu "
+"electrònic y hauria d'arreglar-se en breu. Gràcies per la seva paciència."
+
+#: contrib/admin/templates/admin/filter.html:2
+#, fuzzy, python-format
+msgid " By %(filter_title)s "
+msgstr "Per %(title)s "
+
+#: 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 "Cercar"
+
+#: 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 "Històric"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Data/hora"
+
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "User"
+msgstr "Usuari"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Acció"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "F j, Y, H:i "
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Aquest objecte no te historial de canvis. Probablement no va ser afegit "
+"utilitzant aquest lloc administratiu."
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, fuzzy, 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 ""
+"Eliminar el/la %(object_name)s '%(object)s' provocaria l'eliminació "
+"d'objectes relacionats, però el seu compte no te permisos per a esborrar els "
+"tipus d'objecte següents:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:21
+#, fuzzy, 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 ""
+"Està segur voler esborrar els/les %(object_name)s \"%(object)s\"? "
+"S'esborraran els següents elements relacionats:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "Si, estic segur"
+
+#: 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 "Afegir %(name)s"
+
+#: contrib/admin/templates/admin/change_form.html:15
+#: contrib/admin/templates/admin/index.html:28
+msgid "Add"
+msgstr "Afegir"
+
+#: contrib/admin/templates/admin/change_form.html:22
+msgid "View on site"
+msgstr "Veure en el lloc"
+
+#: 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] "Si us plau, corregeixi l'error mostrat abaix."
+msgstr[1] "Si us plau, corregeixi els errors mostrats abaix."
+
+#: contrib/admin/templates/admin/change_form.html:50
+msgid "Ordering"
+msgstr "Ordre"
+
+#: contrib/admin/templates/admin/change_form.html:53
+msgid "Order:"
+msgstr "Ordre:"
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "Benvingut,"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "No s'ha pogut trobar la pàgina"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Ho sentim, però no s'ha pogut trobar la pàgina solicitada"
+
+#: contrib/admin/templates/admin/login.html:25
+#: contrib/admin/views/decorators.py:24
+msgid "Log in"
+msgstr "Iniciar sessió"
+
+#: contrib/admin/templates/admin/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Models disponibles en la aplicació %(name)s."
+
+#: contrib/admin/templates/admin/index.html:18
+#, fuzzy, python-format
+msgid "%(name)s"
+msgstr "Afegir %(name)s"
+
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
+msgstr "Modificar"
+
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
+msgstr "No té permís per editar res."
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
+msgstr "Accions recents"
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
+msgstr "Les meves accions"
+
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
+msgstr "Cap disponible"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Lloc administratiu de Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Adminsitració de Django"
+
+#: 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
+#, fuzzy
+msgid "Username"
+msgstr "Usuari:"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#, fuzzy
+msgid "Password"
+msgstr "Contrasenya:"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#, fuzzy
+msgid "Password (again)"
+msgstr "Canvi de clau"
+
+#: 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 <strong>%(username)s</strong>."
+msgstr ""
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Actualment:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Modificar:"
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Data:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Hora:"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Gràcies per emprar algun temps de cualitat amb el lloc web avui."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Iniciar sessió de nou"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+"Està rebent aquest missatge degut a que va solicitar un restabliment de "
+"contrasenya."
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "del seu compte d'usuari a %(site_name)s."
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "La seva nova contrasenya és: %(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 "Sentis lliure de canviar-la en aquesta pàgina:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "El seu nom d'usuari, en cas d'haver-lo oblidat:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Gràcies per fer us del nostre lloc!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "L'equip de %(site_name)s"
+
+#: 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 "Restablir contrasenya"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Contrasenya restaber-ta amb èxit"
+
+#: 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 ""
+"Li hem enviat una contrasenya nova a l'adreça de correu electrònic que ens "
+"ha indicat. L'hauria de rebre en breu."
+
+#: 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 "Canvi de clau"
+
+#: 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 ""
+"Si us plau, introdueixi la seva contrasenya antiga, per seguretat, i tot "
+"seguit introdueixi la seva nova contrasenya dues vegades per verificar que "
+"l'ha escrit correctament."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Contrasenya antiga:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Contrasenya nova:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirmar contrasenya:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Canviar la meva clau:"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Canvi de clau exitò"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "La seva clau ha estat canviada."
+
+#: 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 ""
+"Ha oblidat la seva contrasenya? Introdueixi la seva adreça de correu "
+"electrònic i crearem una nova que li enviarem per correu."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Adreça de correu electrònic:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Restablir la meva contrasenya"
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Lloc administratiu"
+
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "El/la %(name)s \"%(obj)s\".ha estat agregat/da amb èxit."
+
+#: 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 "Pot editar-lo de nou abaix."
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr "Pot agregar un altre %s abaix."
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "Agregar %s"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "Agregat %s."
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "Modificat %s."
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "Eliminat %s."
+
+#: contrib/admin/views/main.py:342
+msgid "No fields changed."
+msgstr "Cap camp canviat."
+
+#: contrib/admin/views/main.py:345
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "S'ha modificat amb èxist el/la %(name)s \"%(obj)s."
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"S'ha agregat amb èxit el/la %(name)s \"%(obj)s\". Pot editar-lo de nou abaix."
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "Modificar %s"
+
+#: contrib/admin/views/main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Un o més %(fieldname)s en %(name)s: %(obj)s"
+
+#: contrib/admin/views/main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Un o més %(fieldname)s en %(name)s:"
+
+#: contrib/admin/views/main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "El/la %(name)s \"%(obj)s\".ha estat eliminat amb èxit."
+
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "Està segur?"
+
+#: contrib/admin/views/main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "Modificar històric: %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "Seleccioni %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "Seleccioni %s per modificar"
+
+#: contrib/admin/views/main.py:758
+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 ""
+"Si us plau, identifiquis de nou doncs la seva sessió ha expirat. No es "
+"preocupi, el seu enviament està emmagatzemat."
+
+#: 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 ""
+"Sembla ser que el seu navegador no està configurat per acceptar "
+"'cookies' (galetes). Si us plau, habiliti les 'cookies', recarregui aquesta "
+"pàgina i provi-ho de nou. "
+
+#: contrib/admin/views/decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Els noms d'usuari no poden contenir el caracter '@'."
+
+#: contrib/admin/views/decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr ""
+"La seva adreça de correu no és el seu nom d'usuari. Provi '%s' en tot cas."
+
+#: 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
+#, fuzzy, python-format
+msgid "App %r not found"
+msgstr "No s'ha pogut trobar la pàgina"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr ""
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr ""
+
+#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
+#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
+msgid "model:"
+msgstr ""
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr ""
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr ""
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr ""
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
+#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
+msgid "Integer"
+msgstr "Enter"
+
+#: contrib/admin/views/doc.py:292
+msgid "Boolean (Either True or False)"
+msgstr "Booleà (Verdader o Fals)"
+
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "Cadena (fins a %(maxlength)s)"
+
+#: contrib/admin/views/doc.py:294
+msgid "Comma-separated integers"
+msgstr "Enters separats per comes"
+
+#: contrib/admin/views/doc.py:295
+msgid "Date (without time)"
+msgstr "Data (sense hora)"
+
+#: contrib/admin/views/doc.py:296
+msgid "Date (with time)"
+msgstr "Data (amb hora)"
+
+#: contrib/admin/views/doc.py:297
+msgid "E-mail address"
+msgstr "Adreça de correu electrònic"
+
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
+msgid "File path"
+msgstr "Ruta del fitxer"
+
+#: contrib/admin/views/doc.py:300
+msgid "Decimal number"
+msgstr "Número decimal"
+
+#: contrib/admin/views/doc.py:306
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleà (Verdader, Fals o 'None' (cap))"
+
+#: contrib/admin/views/doc.py:307
+msgid "Relation to parent model"
+msgstr "Relació amb el model pare"
+
+#: contrib/admin/views/doc.py:308
+msgid "Phone number"
+msgstr "Número de telèfon"
+
+#: contrib/admin/views/doc.py:313
+msgid "Text"
+msgstr "Texte"
+
+#: contrib/admin/views/doc.py:314
+msgid "Time"
+msgstr "Hora"
+
+#: contrib/admin/views/doc.py:316
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estat dels E.U.A. (dos lletres majúscules)"
+
+#: contrib/admin/views/doc.py:317
+msgid "XML text"
+msgstr "Texte XML"
+
+#: 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
+#, fuzzy
+msgid "Add user"
+msgstr "Agregar %s"
+
+#: contrib/admin/views/auth.py:57
+#, fuzzy
+msgid "Password changed successfully."
+msgstr "Canvi de clau exitò"
+
+#: contrib/admin/views/auth.py:64
+#, fuzzy, python-format
+msgid "Change password: %s"
+msgstr "Canviar clau"
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, fuzzy, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Aseguris de que el seu texte té menys de %s caracter."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, fuzzy, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Aseguris de que el seu texte té menys de %s caracter."
+
+#: newforms/fields.py:126 core/validators.py:120
+msgid "Enter a whole number."
+msgstr "Introdueixi un número senser."
+
+#: newforms/fields.py:128
+#, fuzzy, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Aquest valor ha de ser una potència de %s."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr ""
+
+#: newforms/fields.py:163
+#, fuzzy
+msgid "Enter a valid date."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: newforms/fields.py:190
+#, fuzzy
+msgid "Enter a valid time."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: newforms/fields.py:226
+#, fuzzy
+msgid "Enter a valid date/time."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: newforms/fields.py:240
+#, fuzzy
+msgid "Enter a valid value."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: newforms/fields.py:269 core/validators.py:161
+msgid "Enter a valid e-mail address."
+msgstr "Introdueixi una adreça de correu vàlida."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+#, fuzzy
+msgid "Enter a valid URL."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: newforms/fields.py:311
+#, fuzzy
+msgid "This URL appears to be a broken link."
+msgstr "La URL %sés un enllaç trencat."
+
+#: newforms/fields.py:359
+#, fuzzy
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Esculli una opció vàlida; %(data)s' no està dintre de %(choices)s."
+
+#: newforms/fields.py:377 newforms/fields.py:453
+#, fuzzy
+msgid "Enter a list of values."
+msgstr "Introdueixi un nom de fitxer vàlid."
+
+#: newforms/fields.py:386
+#, fuzzy, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Esculli una opció vàlida; %(data)s' no està dintre de %(choices)s."
+
+#: template/defaultfilters.py:436
+msgid "yes,no,maybe"
+msgstr "si,no,potser"
+
+#: views/generic/create_update.py:43
+#, fuzzy, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "S'ha modificat amb èxist el/la %(name)s \"%(obj)s."
+
+#: views/generic/create_update.py:117
+#, fuzzy, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "El/la %(name)s \"%(obj)s\".ha estat eliminat amb èxit."
+
+#: views/generic/create_update.py:184
+#, fuzzy, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "L'equip de %(site_name)s"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Aquest valor ha de contenir només números, guions, i guions baixos."
+
+#: core/validators.py:68
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Aquest valor ha de contenir només lletres, números, guions, guions baixos, i "
+"barres (/)."
+
+#: core/validators.py:72
+#, fuzzy
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"Aquest valor ha de contenir només lletres, números, guions, guions baixos, i "
+"barres (/)."
+
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "No es permeten majúscules aquí."
+
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "No es permeten minúscules aquí."
+
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Introdueixi només dígits separats per comes."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Introdueixi adreces de correu electrònic vàlides separades per comes."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "Per favor introdueixi una adreça IP vàlida."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "No s'admeten valor buits."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "No s'admeten caracters no numèrics."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Aquest valor no pot contenir només dígits."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Només s'admeted caracters alfabètics aquí."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr ""
+
+#: core/validators.py:143
+#, fuzzy, python-format
+msgid "Invalid date: %s."
+msgstr "URL invalida: %s"
+
+#: core/validators.py:152
+msgid "Enter a valid time in HH:MM format."
+msgstr "Introdueixi una hora vàlida en el format HH:MM."
+
+#: core/validators.py:177
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Envii una imatge vàilda. El fitxer que ha enviat no era una imatge o estaba "
+"corrupte."
+
+#: core/validators.py:184
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "La URL %s no apunta una imatge vàlida."
+
+#: core/validators.py:188
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"El números de telèfon han de guardar-se en el format XXX-XXX-XXXX. \"%s\" no "
+"és vàlid."
+
+#: core/validators.py:196
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "La URL %s no apunta a un video QuickTime vàlid."
+
+#: core/validators.py:200
+msgid "A valid URL is required."
+msgstr "Es precisa d'una URL vàlida."
+
+#: core/validators.py:214
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Es precisa HTML vàlid. Els errors específics sòn:\n"
+"%s"
+
+#: core/validators.py:221
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML incorrectament formatejat: %s"
+
+#: core/validators.py:238
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL invalida: %s"
+
+#: core/validators.py:243 core/validators.py:245
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "La URL %sés un enllaç trencat."
+
+#: core/validators.py:251
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Introdueixi una abreviatura vàlida d'estat d'els E.U.A.."
+
+#: core/validators.py:265
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Vigili la seva boca! Aquí no admetem la paraula: %s."
+msgstr[1] "Vigili la seva boca! Aquí no admetem les paraules: %s."
+
+#: core/validators.py:272
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Aquest camp ha de concordar amb el camp '%s'."
+
+#: core/validators.py:291
+msgid "Please enter something for at least one field."
+msgstr "Si us plau, introdueixi alguna cosa alemnys en un camp."
+
+#: core/validators.py:300 core/validators.py:311
+msgid "Please enter both fields or leave them both empty."
+msgstr "Si us plau, ompli els dos camps o deixi'ls tots dos en blanc."
+
+#: core/validators.py:318
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "S'ha de proporcionar aquest camps si %(field)s és %(value)s"
+
+#: core/validators.py:330
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "S'ha de proporcionar aquest camps si %(field)s no és %(value)s"
+
+#: core/validators.py:349
+msgid "Duplicate values are not allowed."
+msgstr "No s'admeten valors duplicats."
+
+#: core/validators.py:364
+#, fuzzy, python-format
+msgid "This value must be between %s and %s."
+msgstr "Aquest valor ha de ser una potència de %s."
+
+#: core/validators.py:366
+#, fuzzy, python-format
+msgid "This value must be at least %s."
+msgstr "Aquest valor ha de ser una potència de %s."
+
+#: core/validators.py:368
+#, fuzzy, python-format
+msgid "This value must be no more than %s."
+msgstr "Aquest valor ha de ser una potència de %s."
+
+#: core/validators.py:404
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Aquest valor ha de ser una potència de %s."
+
+#: core/validators.py:415
+msgid "Please enter a valid decimal number."
+msgstr "Si us plau, introdueixi un número decimal vàlid."
+
+#: core/validators.py:419
+#, 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] ""
+"Si us plau, introdueixi un número decimal vàlid amb no més de %s digit."
+msgstr[1] ""
+"Si us plau, introdueixi un número decimal vàlid amb no més de %s digits."
+
+#: core/validators.py:422
+#, fuzzy, 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] ""
+"Si us plau, introdueixi un número decimal vàlid amb no més de %s digit."
+msgstr[1] ""
+"Si us plau, introdueixi un número decimal vàlid amb no més de %s digits."
+
+#: core/validators.py:425
+#, 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] ""
+"Si us plau, introdueixi un número decimal vàlid amb no més de %s digit "
+"decimal."
+msgstr[1] ""
+"Si us plau, introdueixi un número decimal vàlid amb no més de %s digits "
+"decimals."
+
+#: core/validators.py:435
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Asseguris de que el fitxer que ha enviat té, com a mínim, %s bytes."
+
+#: core/validators.py:436
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Asseguris de que el fitxer que ha enviat té, com a màxim %s bytes."
+
+#: core/validators.py:453
+msgid "The format for this field is wrong."
+msgstr "El format per aquest camp és incorrecte."
+
+#: core/validators.py:468
+msgid "This field is invalid."
+msgstr "El camp no és vàlid."
+
+#: core/validators.py:504
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "No s'ha pogut obtenir res de %s."
+
+#: core/validators.py:507
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"La URL %(url)s ha va tornar la capcelera Content-Type '%(contenttype)s', que "
+"no és vàlida."
+
+#: core/validators.py:540
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Si us plau, tanqui l'etiqueta %(tag)s desde la linea %(line)s. (La linea "
+"comença amb \"%(start)s\".)"
+
+#: core/validators.py:544
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Part del text que comença en la linea %(line)s no està permés en aquest "
+"contexte. (La linea comença per \"%(start)s\".)"
+
+#: core/validators.py:549
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"El \"%(attr)s\" de la linea %(line)s no és un atribut vàlido. (La linea "
+"comença per \"%(start)s\".)"
+
+#: core/validators.py:554
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"La \"<%(tag)s>\" de la linea %(line)s no és una etiqueta vàlida. (La línea "
+"comença per \"%(start)s\".)"
+
+#: core/validators.py:558
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"A una etiqueta de la linea %(line)s li falta un o més atributs requerits.(La "
+"linea comença per \"%(start)s\".)"
+
+#: core/validators.py:563
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"L'atribut \"%(attr)s\" de la linena %(line)s té un valor que no és vàlid. "
+"(La linea comença per \"%(start)s\".)"
+
+#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+#~ msgstr "Ha <a href=\"/password_reset/\">oblidat la seva clau</a>?"
+
+#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
+#~ msgstr "Utilitzi '[algo]$[salt]$[hexdigest]'"

Added: vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ca/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,121 @@
+# translation of djangojs.po to
+# Spanish translation for the django-admin JS files.
+# Copyright (C)
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Jorge Gajon <gajon at gajon.org>, 2005.
+# Marc Fargas <marc at fargas.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: djangojs\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-15 11:05+1100\n"
+"PO-Revision-Date: 2007-01-19 10:30+0100\n"
+"Last-Translator: Marc Fargas <marc at fargas.com>\n"
+"Language-Team:  <es at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "%s Disponibles"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Seleccionar tots"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Afegir"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Eliminar"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "%s Escollits"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Faci les seves seleccions i faci click a"
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Deseleccionar tots"
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre Desembre"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Diumenge Dilluns Dimarts Dimecres Dijous Divendres Dissabte"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "D L M X J V S"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr "Ara"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr "Rellotje"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr "Esculli una hora"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr "Mitja nit"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr "6 a.m."
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr "Migdia"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr "Avui"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr "Calendari"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr "Ahir"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr "Demà"
+
+#: 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 ""

Modified: vendor/django/current/django/conf/locale/cs/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/cs/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/cs/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/cs/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,15 +8,14 @@
 "Project-Id-Version: Django Czech translation\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:11+0200\n"
-"PO-Revision-Date: 2006-05-20 22:44+0100\n"
-"Last-Translator: Radek Å varz <translate at svarz.cz>\n"
+"PO-Revision-Date: 2006-10-07 13:10+0100\n"
+"Last-Translator: \n"
 "Language-Team: Czech\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "X-Poedit-Country: CZECH REPUBLIC\n"
-"X-Poedit-Bookmarks: -1,-1,-1,-1,-1,-1,-1,-1,-1,139\n"
 
 #: contrib/comments/models.py:67
 #: contrib/comments/models.py:166
@@ -80,7 +79,7 @@
 msgstr "je veřejné"
 
 #: contrib/comments/models.py:85
-#: contrib/admin/views/doc.py:289
+#: contrib/admin/views/doc.py:304
 msgid "IP address"
 msgstr "IP adresa"
 
@@ -214,11 +213,11 @@
 msgid "No voting for yourself"
 msgstr "Nelze hlasovat pro sebe"
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid "This rating is required because you've entered at least one other rating."
 msgstr "Toto hodnocení je povinné, protože jste zadal(a) alespoň jedno jiné hodnocení."
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s comment:\n"
@@ -241,7 +240,7 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
@@ -252,22 +251,22 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "Je povolená pouze metoda POST"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "Jedno nebo více povinných polí nebylo vyplněné"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr "Někdo falšoval formulář komentáře (bezpečnostní narušení)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
 msgstr "Formulář komentáře měl neplatný parametr 'target' -- ID objektu nebylo platné"
@@ -284,18 +283,9 @@
 msgstr "Uživatelské jméno:"
 
 #: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Heslo:"
-
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr "Zapomenuté heslo?"
-
-#: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -313,6 +303,15 @@
 msgid "Log out"
 msgstr "Odhlásit se"
 
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Heslo:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Zapomenuté heslo?"
+
 #: contrib/comments/templates/comments/form.html:12
 msgid "Ratings"
 msgstr "Hodnocení"
@@ -331,13 +330,13 @@
 msgid "Post a photo"
 msgstr "Zařadit fotografii"
 
-#: contrib/comments/templates/comments/form.html:27
+#: contrib/comments/templates/comments/form.html:28
 #: contrib/comments/templates/comments/freeform.html:5
 msgid "Comment:"
 msgstr "Komentář:"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
 msgid "Preview comment"
 msgstr "Náhled komentáře"
 
@@ -357,6 +356,7 @@
 #: contrib/admin/filterspecs.py:70
 #: contrib/admin/filterspecs.py:88
 #: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "VÅ¡e"
 
@@ -420,217 +420,292 @@
 msgid "log entries"
 msgstr "log záznamy"
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/templatetags/admin_list.py:230
 msgid "All dates"
 msgstr "VÅ¡echna data"
 
-#: contrib/admin/views/decorators.py:9
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
+#: contrib/admin/views/decorators.py:10
+#: contrib/auth/forms.py:59
 msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
 msgstr "Prosíme, vložte správné uživatelské jméno a heslo. Poznámka - u obou položek se rozlišuje velikost písmen."
 
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "Přihlášení"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
 msgstr "Prosíme, znovu se přihlašte, Vaše sezení vypršelo. Nemusíte se obávat, Vaše podání je uloženo."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
 msgstr "Vypadá to, že Váš prohlížeč není nastaven, aby akceptoval cookies. Prosíme, zapněte cookies, obnovte tuto stránku a zkuste znovu."
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "Uživatelská jména nemohou obsahovat znak '@'."
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Vaše e-mailová adresa není Vaše uživatelské jméno. Zkuste místo toho '%s'."
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
 msgstr "Django správa"
 
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/main.py:257
+#: contrib/admin/views/auth.py:17
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně přidán."
 
-#: contrib/admin/views/main.py:264
-#: contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:261
+#: contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:22
 msgid "You may edit it again below."
 msgstr "Můžete to opět upravit níže."
 
-#: contrib/admin/views/main.py:272
-#: contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:271
+#: contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
 msgstr "Můžete přidat další %s níže."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr "%s: přidat"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "Záznam %s byl přidán."
 
-#: contrib/admin/views/main.py:336
-#: contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339
 msgid "and"
 msgstr "a"
 
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "%s: změněno"
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "Záznam %s byl smazán."
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "Nebyly změněny žádné pole."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" byl úspěšně změněn."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "The %(name)s \"%(obj)s\" byl úspěšně přidán. Můžete to opět upravit níže."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "%s: změnit"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:473
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Jedno nebo více %(fieldname)s z %(name)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:478
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Jedno nebo více %(fieldname)s z %(name)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:511
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně smazán."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:514
 msgid "Are you sure?"
 msgstr "Jste si jist(á)?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:536
 #, python-format
 msgid "Change history: %s"
 msgstr "Historie změn: %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s"
 msgstr "Vybrat %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s to change"
 msgstr "Vyberte %s pro změnu"
 
-#: contrib/admin/views/doc.py:277
-#: contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288
-#: contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295
-#: contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "Databázová chyba"
+
+#: 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 "pohled (view):"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "Aplikace %r nenalezena"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "Model %r v aplikaci %r nenalezen"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "související objekt `%s.%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 `%s.%s` objects"
+msgstr "související objekty `%s.%s`"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "%s: vše"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "%s: počet"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Pole na objektech  %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 "Celé číslo"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "Boolean (buď Ano (True), nebo Ne (False))"
 
-#: contrib/admin/views/doc.py:279
-#: contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Text (maximálně %(maxlength)s znaků)"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "Celá čísla oddělená čárkou"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "Datum (bez času)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "Datum (s časem)"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "E-mailová adresa"
 
-#: contrib/admin/views/doc.py:284
-#: contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "Cesta k souboru"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr "Desetiné číslo"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "Boolean (buď Ano (True), Ne (False), nebo Nic (None))"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr "V relaci k rodičovskému modelu"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "Telefonní číslo"
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "Text"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "ÄŒas"
 
-#: contrib/admin/views/doc.py:300
+#: contrib/admin/views/doc.py:315
 #: contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
 msgstr "Stát US (2 velké znaky)"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "text XML"
 
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s pravděpodobně není objekt urlpattern"
+
+#: contrib/admin/views/auth.py:28
+msgid "Add user"
+msgstr "Přidat uživatele"
+
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -641,7 +716,7 @@
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -662,9 +737,10 @@
 #: contrib/admin/templates/admin/object_history.html:5
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/logged_out.html:4
@@ -737,6 +813,11 @@
 msgid "Models available in the %(name)s application."
 msgstr "Dostupné modely v aplikaci %(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"
@@ -771,7 +852,7 @@
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
 msgstr "<a href=\"/password_reset/\">Zapomněl(a) jste své heslo?</a>"
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "Vítejte,"
 
@@ -782,13 +863,13 @@
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
-msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Mazání %(object_name)s  '%(object)s' by vyústilo ve vymazání souvisejících objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
+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 "Mazání %(object_name)s  '%(escaped_object)s' by vyústilo ve vymazání souvisejících objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
-msgstr "Jste si jist(á), že chcete smazat %(object_name)s \"%(object)s\"? Všechny následující související položky budou smazány:"
+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 "Jste si jist(á), že chcete smazat %(object_name)s \"%(escaped_object)s\"? Všechny následující související položky budou smazány:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -796,13 +877,34 @@
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
-msgid " By %(title)s "
-msgstr "Od %(title)s"
+msgid " By %(filter_title)s "
+msgstr " Dle %(filter_title)s "
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
 msgstr "Provést"
 
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 výsledek"
+msgstr[1] "%(counter)s výsledky"
+msgstr[2] "%(counter)s výsledků"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "celkem %(full_result_count)s"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Zobrazit všechny"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filtr"
+
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
 msgstr "Pohled na stránku"
@@ -838,6 +940,30 @@
 msgid "Save"
 msgstr "Uložit"
 
+#: 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 "Něco není v pořádku s Vaší instalací databáze. Ujistěte se, že byly vytvořeny odpovídající tabulky databáze a že databáze je přístupná pro čtení daným databázovým uživatelem."
+
+#: 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 "Nejdříve vložte uživatelské jméno a heslo. Poté budete moci upravovat více uživatelských možností."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Uživatelské jméno"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Heslo"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Heslo (znova)"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr "Pro ověření vložte stejné heslo znovu."
+
 #: 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
@@ -1031,11 +1157,11 @@
 msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
 msgstr "Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na 'http://'."
 
-#: contrib/redirects/models.py:12
+#: contrib/redirects/models.py:13
 msgid "redirect"
 msgstr "přesměrovat"
 
-#: contrib/redirects/models.py:13
+#: contrib/redirects/models.py:14
 msgid "redirects"
 msgstr "přesměrování"
 
@@ -1060,8 +1186,8 @@
 msgstr "jméno šablony"
 
 #: contrib/flatpages/models.py:13
-msgid "Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."
-msgstr "Například: 'flatfiles/kontaktni_stranka'. Pokud toto není zadáno, systém použije 'flatfiles/default'."
+msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
+msgstr "Například: 'flatpages/kontaktni_stranka.html'. Pokud toto není zadáno, systém použije 'flatpages/default.html'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1079,150 +1205,170 @@
 msgid "flat pages"
 msgstr "statické stránky"
 
-#: contrib/auth/models.py:13
-#: contrib/auth/models.py:26
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Odhlášeno"
+
+#: contrib/auth/models.py:38
+#: contrib/auth/models.py:57
 msgid "name"
 msgstr "jméno"
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr "codename"
 
-#: contrib/auth/models.py:17
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr "oprávnění"
 
-#: contrib/auth/models.py:18
-#: contrib/auth/models.py:27
+#: contrib/auth/models.py:43
+#: contrib/auth/models.py:58
 msgid "permissions"
 msgstr "oprávnění"
 
-#: contrib/auth/models.py:29
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr "skupina"
 
-#: contrib/auth/models.py:30
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:61
+#: contrib/auth/models.py:100
 msgid "groups"
 msgstr "skupiny"
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr "uživatelské jméno"
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
+msgstr "Požadováno. 30 znaků nebo méně. Pouze alfanumerické znaky (znaky, čísla a podtržítka)."
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr "křestní jméno"
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr "příjmení"
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr "e-mailová adresa"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr "heslo"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "Use '[algo]$[salt]$[hexdigest]'"
 msgstr "Použijte '[algo]$[salt]$[hexdigest]'"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr "administrativní přístup "
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
 msgstr "Rozhodne, zda se může uživatel přihlásit do správy webu."
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr "aktivní"
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."
+msgstr "Rozhodne, zda se může uživatel přihlásit do správy webu. Nastavte toto místo mazání účtů."
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr "stav superuživatel"
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid "Designates that this user has all permissions without explicitly assigning them."
+msgstr "Stanoví, že tento uživatel má veškerá oprávnění bez jejich explicitního přiřazení."
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr "poslední přihlášení"
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr "datum zaregistrování"
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
 msgstr "Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro každou skupinu, ve které je."
 
-#: contrib/auth/models.py:67
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr "uživatelskí oprávnění"
 
-#: contrib/auth/models.py:70
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr "uživatel"
 
-#: contrib/auth/models.py:71
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr "uživatelé"
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr "Osobní informace"
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr "Oprávnění"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr "Důležitá data"
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr "Skupiny"
 
-#: contrib/auth/models.py:219
+#: contrib/auth/models.py:256
 msgid "message"
 msgstr "zpráva"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:52
 msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
 msgstr "Váš prohlížeč pravděpodobně nemá zapnuté cookies. Cookies jsou potřeba pro zalogování."
 
-#: contrib/contenttypes/models.py:25
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr "Tento účet není aktivní."
+
+#: contrib/contenttypes/models.py:20
 msgid "python model class name"
 msgstr "jméno modelu Pythonu"
 
-#: contrib/contenttypes/models.py:28
+#: contrib/contenttypes/models.py:23
 msgid "content type"
 msgstr "typ obsahu"
 
-#: contrib/contenttypes/models.py:29
+#: contrib/contenttypes/models.py:24
 msgid "content types"
 msgstr "typy obsahu"
 
-#: contrib/sessions/models.py:35
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "klíč sezení"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "data sezení"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "datum expirace"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "sezení"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "sezení"
 
@@ -1242,18 +1388,6 @@
 msgid "sites"
 msgstr "weby"
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "j.n.Y"
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "j.n.Y, H:i"
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
 #: utils/dates.py:6
 msgid "Monday"
 msgstr "Pondělí"
@@ -1453,203 +1587,263 @@
 msgstr[1] "minuty"
 msgstr[2] "minut"
 
-#: conf/global_settings.py:37
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j.n.Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j.n.Y, H:i"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "H:i"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "j. F"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Arabic"
+
+#: conf/global_settings.py:40
 msgid "Bengali"
 msgstr "Bengálsky"
 
-#: conf/global_settings.py:38
+#: conf/global_settings.py:41
 msgid "Czech"
 msgstr "ÄŒesky"
 
-#: conf/global_settings.py:39
+#: conf/global_settings.py:42
 msgid "Welsh"
 msgstr "Welšsky"
 
-#: conf/global_settings.py:40
+#: conf/global_settings.py:43
 msgid "Danish"
 msgstr "Dánsky"
 
-#: conf/global_settings.py:41
+#: conf/global_settings.py:44
 msgid "German"
 msgstr "Německy"
 
-#: conf/global_settings.py:42
+#: conf/global_settings.py:45
 msgid "Greek"
 msgstr "Řecky"
 
-#: conf/global_settings.py:43
+#: conf/global_settings.py:46
 msgid "English"
 msgstr "Anglicky"
 
-#: conf/global_settings.py:44
+#: conf/global_settings.py:47
 msgid "Spanish"
 msgstr "Španělsky"
 
-#: conf/global_settings.py:45
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "Argentinean Spanish"
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "Finsky"
+
+#: conf/global_settings.py:50
 msgid "French"
 msgstr "Francouzsky"
 
-#: conf/global_settings.py:46
+#: conf/global_settings.py:51
 msgid "Galician"
 msgstr "Galicijsky"
 
-#: conf/global_settings.py:47
+#: conf/global_settings.py:52
 msgid "Hungarian"
 msgstr "Maďarsky"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:53
 msgid "Hebrew"
 msgstr "Hebrejsky"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:54
 msgid "Icelandic"
 msgstr "Islandština"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:55
 msgid "Italian"
 msgstr "Italsky"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:56
 msgid "Japanese"
 msgstr "Japonština"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:57
 msgid "Dutch"
 msgstr "Holandština"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:58
 msgid "Norwegian"
 msgstr "Norsky"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:59
 msgid "Brazilian"
 msgstr "Brazilsky"
 
-#: conf/global_settings.py:55
+#: conf/global_settings.py:60
 msgid "Romanian"
 msgstr "Rumunsky"
 
-#: conf/global_settings.py:56
+#: conf/global_settings.py:61
 msgid "Russian"
 msgstr "Rusky"
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:62
 msgid "Slovak"
 msgstr "Slovensky"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:63
 msgid "Slovenian"
 msgstr "Slovinsky"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:64
 msgid "Serbian"
 msgstr "Srbsky"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:65
 msgid "Swedish"
 msgstr "Švédsky"
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:66
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:67
+msgid "Turkish"
+msgstr "Turecky"
+
+#: conf/global_settings.py:68
 msgid "Ukrainian"
 msgstr "Ukrajinsky"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:69
 msgid "Simplified Chinese"
 msgstr "Jednoduchá čínština"
 
-#: conf/global_settings.py:63
+#: conf/global_settings.py:70
 msgid "Traditional Chinese"
 msgstr "Tradiční čínština"
 
-#: core/validators.py:60
+#: core/validators.py:63
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka."
 
-#: core/validators.py:64
+#: core/validators.py:67
 msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
 msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka, pomlčky nebo lomítka."
 
-#: core/validators.py:72
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo čárky."
+
+#: core/validators.py:75
 msgid "Uppercase letters are not allowed here."
 msgstr "Velká písmena zde nejsou povolená."
 
-#: core/validators.py:76
+#: core/validators.py:79
 msgid "Lowercase letters are not allowed here."
 msgstr "Malá písmena zde nejsou povolená."
 
-#: core/validators.py:83
+#: core/validators.py:86
 msgid "Enter only digits separated by commas."
 msgstr "Vložte pouze cifry oddělené čárkami."
 
-#: core/validators.py:95
+#: core/validators.py:98
 msgid "Enter valid e-mail addresses separated by commas."
 msgstr "Vložte platné e-mailové adresy oddělené čárkami."
 
-#: core/validators.py:99
+#: core/validators.py:102
 msgid "Please enter a valid IP address."
 msgstr "Prosíme, zadejte platnou IP adresu."
 
-#: core/validators.py:103
+#: core/validators.py:106
 msgid "Empty values are not allowed here."
 msgstr "Zde nejsou povolené prázdné hodnoty."
 
-#: core/validators.py:107
+#: core/validators.py:110
 msgid "Non-numeric characters aren't allowed here."
 msgstr "Znaky, které nejsou čísla, nejsou zde povoleny."
 
-#: core/validators.py:111
+#: core/validators.py:114
 msgid "This value can't be comprised solely of digits."
 msgstr "Tato hodnota nemůže být složená pouze z cifer."
 
-#: core/validators.py:116
+#: core/validators.py:119
 msgid "Enter a whole number."
 msgstr "Vložte celé číslo."
 
-#: core/validators.py:120
+#: core/validators.py:123
 msgid "Only alphabetical characters are allowed here."
 msgstr "Zde jsou povoleny pouze alfanumerické znaky."
 
-#: core/validators.py:124
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr "Rok musí být 1900 a vyšší."
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Neplatné datum: %s."
+
+#: core/validators.py:146
+#: db/models/fields/__init__.py:415
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Vložte platné datum ve formátu RRRR-MM-DD."
 
-#: core/validators.py:128
+#: core/validators.py:151
 msgid "Enter a valid time in HH:MM format."
 msgstr "Vložte platný čas ve formátu HH:MM."
 
-#: core/validators.py:132
-#: db/models/fields/__init__.py:468
+#: core/validators.py:155
+#: db/models/fields/__init__.py:477
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr "Vložte platné datum a čas ve formátu RRRR-MM-DD HH:MM."
 
-#: core/validators.py:136
+#: core/validators.py:160
 msgid "Enter a valid e-mail address."
 msgstr "Vložte platnou e-mailovou adresu."
 
-#: core/validators.py:148
+#: core/validators.py:172
+#: core/validators.py:401
+#: forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Soubor nebyl odeslán. Zkontrolujte encoding type formuláře."
+
+#: core/validators.py:176
 msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
 msgstr "Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl obrázek, nebo byl porušen."
 
-#: core/validators.py:155
+#: core/validators.py:183
 #, python-format
 msgid "The URL %s does not point to a valid image."
 msgstr "URL %s neukazuje na platný obrázek."
 
-#: core/validators.py:159
+#: core/validators.py:187
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr "Telefonní čísla musí být ve formátu XXX-XXX-XXXX. \"%s\" není platné."
 
-#: core/validators.py:167
+#: core/validators.py:195
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
 msgstr "URL %s neodkazuje na platné video ve formátu QuickTime."
 
-#: core/validators.py:171
+#: core/validators.py:199
 msgid "A valid URL is required."
 msgstr "Je vyžadováno platné URL."
 
-#: core/validators.py:185
+#: core/validators.py:213
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
@@ -1658,27 +1852,27 @@
 "Je vyžadováno platné HTML. Konkrétní chyby jsou:\n"
 "%s"
 
-#: core/validators.py:192
+#: core/validators.py:220
 #, python-format
 msgid "Badly formed XML: %s"
 msgstr "Špatně formované XML: %s"
 
-#: core/validators.py:202
+#: core/validators.py:230
 #, python-format
 msgid "Invalid URL: %s"
 msgstr "Neplatné URL: %s"
 
-#: core/validators.py:206
-#: core/validators.py:208
+#: core/validators.py:234
+#: core/validators.py:236
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr "Odkaz na URL %s je rozbitý."
 
-#: core/validators.py:214
+#: core/validators.py:242
 msgid "Enter a valid U.S. state abbreviation."
 msgstr "Vložte platnou zkraku U.S. státu."
 
-#: core/validators.py:229
+#: core/validators.py:256
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1686,44 +1880,44 @@
 msgstr[1] "Mluvte slušně! Slova %s zde nejsou přípustná."
 msgstr[2] "Mluvte slušně! Slova %s zde nejsou přípustná."
 
-#: core/validators.py:236
+#: core/validators.py:263
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr "Toto pole se musí shodovat s polem '%s'."
 
-#: core/validators.py:255
+#: core/validators.py:282
 msgid "Please enter something for at least one field."
 msgstr "Prosíme, vložte něco alespoň pro jedno pole."
 
-#: core/validators.py:264
-#: core/validators.py:275
+#: core/validators.py:291
+#: core/validators.py:302
 msgid "Please enter both fields or leave them both empty."
 msgstr "Prosíme, vložte obě pole, nebo je nechte obě prázdná."
 
-#: core/validators.py:282
+#: core/validators.py:309
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
 msgstr "Toto pole musí být vyplněno, když %(field)s má %(value)s"
 
-#: core/validators.py:294
+#: core/validators.py:321
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
 msgstr "Toto pole musí být vyplněno, když %(field)s nemá %(value)s"
 
-#: core/validators.py:313
+#: core/validators.py:340
 msgid "Duplicate values are not allowed."
 msgstr "Duplikátní hodnoty nejsou povolené."
 
-#: core/validators.py:336
+#: core/validators.py:363
 #, python-format
 msgid "This value must be a power of %s."
 msgstr "Tato hodnota musí být mocninou %s."
 
-#: core/validators.py:347
+#: core/validators.py:374
 msgid "Please enter a valid decimal number."
 msgstr "Prosíme, vložte platné číslo."
 
-#: core/validators.py:349
+#: core/validators.py:378
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
 msgid_plural "Please enter a valid decimal number with at most %s total digits."
@@ -1731,72 +1925,95 @@
 msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
 msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
 
-#: core/validators.py:352
+#: core/validators.py:381
 #, python-format
+msgid "Please enter a valid decimal number with a whole part of at most %s digit."
+msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou."
+msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi."
+msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi."
+
+#: core/validators.py:384
+#, 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] "Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem."
 msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem."
 msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem."
 
-#: core/validators.py:362
+#: core/validators.py:394
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr "Ujistěte se, že posílaný soubor je velký nejméně %s bytů."
 
-#: core/validators.py:363
+#: core/validators.py:395
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr "Ujistěte se, že posílaný soubor je velký nejvíce %s bytů."
 
-#: core/validators.py:376
+#: core/validators.py:412
 msgid "The format for this field is wrong."
 msgstr "Formát pro toto pole je špatný."
 
-#: core/validators.py:391
+#: core/validators.py:427
 msgid "This field is invalid."
 msgstr "Toto pole není platné."
 
-#: core/validators.py:426
+#: core/validators.py:463
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr "Nemohl jsem získat nic z %s."
 
-#: core/validators.py:429
+#: core/validators.py:466
 #, python-format
 msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr "URL %(url)s vrátilo neplatnou hlavičku Content-Type '%(contenttype)s'."
 
-#: core/validators.py:462
+#: core/validators.py:499
 #, python-format
 msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
 msgstr "Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s \"%(start)s\".)"
 
-#: core/validators.py:466
+#: core/validators.py:503
 #, python-format
 msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
 msgstr "Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. (Řádka začíná s \"%(start)s\".)"
 
-#: core/validators.py:471
+#: core/validators.py:508
 #, python-format
 msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
 msgstr "\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%(start)s\".)"
 
-#: core/validators.py:476
+#: core/validators.py:513
 #, python-format
 msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
 msgstr "\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%(start)s\".)"
 
-#: core/validators.py:480
+#: core/validators.py:517
 #, python-format
 msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
 msgstr "Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. (Řádka začíná s \"%(start)s\".)"
 
-#: core/validators.py:485
+#: core/validators.py:522
 #, python-format
 msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
 msgstr "Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s \"%(start)s\".)"
 
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "Záznam %(verbose_name)s byl úspěšně vytvořen."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "Záznam %(verbose_name)s byl úspěšně změnen."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "Záznam %(verbose_name)s byl smazán."
+
 #: db/models/manipulators.py:302
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
@@ -1809,42 +2026,42 @@
 
 #: db/models/fields/__init__.py:114
 #: db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542
-#: db/models/fields/__init__.py:553
+#: db/models/fields/__init__.py:551
+#: db/models/fields/__init__.py:562
 #: forms/__init__.py:346
 msgid "This field is required."
 msgstr "Toto pole je povinné."
 
-#: db/models/fields/__init__.py:337
+#: db/models/fields/__init__.py:340
 msgid "This value must be an integer."
 msgstr "Tato hodnota musí být celé číslo."
 
-#: db/models/fields/__init__.py:369
+#: db/models/fields/__init__.py:372
 msgid "This value must be either True or False."
 msgstr "Tato hodnota musí být buď Ano (True), nebo Ne (False)."
 
-#: db/models/fields/__init__.py:385
+#: db/models/fields/__init__.py:388
 msgid "This field cannot be null."
 msgstr "Toto pole nemůže být prázdné (null)."
 
-#: db/models/fields/__init__.py:562
+#: db/models/fields/__init__.py:571
 msgid "Enter a valid filename."
 msgstr "Vložte platný název souboru."
 
-#: db/models/fields/related.py:43
+#: db/models/fields/related.py:51
 #, python-format
 msgid "Please enter a valid %s."
 msgstr "Prosíme, zadejte %s správně."
 
-#: db/models/fields/related.py:579
+#: db/models/fields/related.py:618
 msgid "Separate multiple IDs with commas."
 msgstr "Oddělte více identifikátorů čárkami."
 
-#: db/models/fields/related.py:581
+#: db/models/fields/related.py:620
 msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr "Podržte  \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné položky."
 
-#: db/models/fields/related.py:625
+#: db/models/fields/related.py:664
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
@@ -1852,7 +2069,7 @@
 msgstr[1] "Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné."
 msgstr[2] "Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné."
 
-#: forms/__init__.py:380
+#: forms/__init__.py:381
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
@@ -1860,59 +2077,34 @@
 msgstr[1] "Ujistěte se, že Váš text má méně než %s znaky."
 msgstr[2] "Ujistěte se, že Váš text má méně než %s znaků."
 
-#: forms/__init__.py:385
+#: forms/__init__.py:386
 msgid "Line breaks are not allowed here."
 msgstr "Zalomení řádky zde nenjsou povolená."
 
-#: forms/__init__.py:480
-#: forms/__init__.py:551
-#: forms/__init__.py:589
+#: forms/__init__.py:487
+#: forms/__init__.py:560
+#: forms/__init__.py:599
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
 msgstr "Vyberte platnou volbu. '%(data)s' není mezi %(choices)s."
 
-#: forms/__init__.py:645
+#: forms/__init__.py:663
 msgid "The submitted file is empty."
 msgstr "Odevzdaný soubor je prázdný."
 
-#: forms/__init__.py:699
+#: forms/__init__.py:719
 msgid "Enter a whole number between -32,768 and 32,767."
 msgstr "Vložte celé číslo mezi -32,768 a 32,767."
 
-#: forms/__init__.py:708
+#: forms/__init__.py:729
 msgid "Enter a positive number."
 msgstr "Vložte celé kladné číslo."
 
-#: forms/__init__.py:717
+#: forms/__init__.py:739
 msgid "Enter a whole number between 0 and 32,767."
 msgstr "Vložte celé číslo mezi 0 a 32,767."
 
-#: template/defaultfilters.py:379
+#: template/defaultfilters.py:401
 msgid "yes,no,maybe"
 msgstr "ano, ne, možná"
 
-#~ msgid "Comment"
-#~ msgstr "Komentář"
-#~ msgid "Comments"
-#~ msgstr "Komentáře"
-#~ msgid "String (up to 50)"
-#~ msgstr "Text (max. 50 znaků)"
-#~ msgid "label"
-#~ msgstr "nadpis"
-#~ msgid "package"
-#~ msgstr "balík"
-#~ msgid "packages"
-#~ msgstr "balíky"
-#~ msgid "Error in Template"
-#~ msgstr "Chyba v Å¡ablonÄ›"
-#~ msgid ""
-#~ "\n"
-#~ "In template %(name)s, error at line %(line)s:\n"
-#~ msgstr ""
-#~ "\n"
-#~ "V šabloně %(name)s, chyba na řádce %(line)s:\n"
-
-#, fuzzy
-#~ msgid "count"
-#~ msgstr "počet"
-

Modified: vendor/django/current/django/conf/locale/da/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/da/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/da/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/da/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,104 +1,100 @@
-# SOME DESCRIPTIVE TITLE.
+# translation of django.po to Dansk
+# Rune Rønde Laursen <runerl at skjoldhoej.dk>, 2006.
 # Copyright (C) 2005 and beyond
 # This file is distributed under the same license as the PACKAGE package.
 # Morten Bagai <m at bagai.com>, Nov 2005.
-#
-#
+# Rune Rønde Laursen <runerl at skjoldhoej.dk>, Sept 2006.
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:12+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Morten Bagai <m at bagai.com>\n"
-"Language-Team: Danish\n"
+"PO-Revision-Date: 2006-09-24 10:34+0200\n"
+"Last-Translator: Rune Rønde Laursen <runerl at skjoldhoej.dk>\n"
+"Language-Team: Dansk <dansk at klid.dk>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
 
 #: contrib/comments/models.py:67 contrib/comments/models.py:166
-#, fuzzy
 msgid "object ID"
-msgstr "objekt id"
+msgstr "objekt ID"
 
 #: contrib/comments/models.py:68
 msgid "headline"
-msgstr ""
+msgstr "overskrift"
 
 #: contrib/comments/models.py:69 contrib/comments/models.py:90
 #: contrib/comments/models.py:167
-#, fuzzy
 msgid "comment"
-msgstr "indhold"
+msgstr "kommentar"
 
 #: contrib/comments/models.py:70
 msgid "rating #1"
-msgstr ""
+msgstr "rangering # 1"
 
 #: contrib/comments/models.py:71
 msgid "rating #2"
-msgstr ""
+msgstr "rangering # 2"
 
 #: contrib/comments/models.py:72
 msgid "rating #3"
-msgstr ""
+msgstr "rangering # 3"
 
 #: contrib/comments/models.py:73
 msgid "rating #4"
-msgstr ""
+msgstr "rangering # 4"
 
 #: contrib/comments/models.py:74
 msgid "rating #5"
-msgstr ""
+msgstr "rangering # 5"
 
 #: contrib/comments/models.py:75
 msgid "rating #6"
-msgstr ""
+msgstr "rangering # 6"
 
 #: contrib/comments/models.py:76
 msgid "rating #7"
-msgstr ""
+msgstr "rangering # 7"
 
 #: contrib/comments/models.py:77
 msgid "rating #8"
-msgstr ""
+msgstr "rangering # 8"
 
 #: contrib/comments/models.py:82
 msgid "is valid rating"
-msgstr ""
+msgstr "er gyldig rangering"
 
 #: contrib/comments/models.py:83 contrib/comments/models.py:169
 msgid "date/time submitted"
-msgstr ""
+msgstr "dato/tidspunkt oprettet"
 
 #: contrib/comments/models.py:84 contrib/comments/models.py:170
 msgid "is public"
-msgstr ""
+msgstr "er offentlig"
 
 #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
-#, fuzzy
 msgid "IP address"
-msgstr "e-mail adresse"
+msgstr "IP-adresse"
 
 #: contrib/comments/models.py:86
 msgid "is removed"
-msgstr ""
+msgstr "er fjernet"
 
 #: contrib/comments/models.py:86
 msgid ""
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
-msgstr ""
+msgstr "Afkryds denne boks hvis kommentaren er upassende. Beskeden \"Denne kommentar er blevet fjernet\" vil blive vist istedet."
 
 #: contrib/comments/models.py:91
-#, fuzzy
 msgid "comments"
-msgstr "indhold"
+msgstr "kommentarer"
 
 #: contrib/comments/models.py:131 contrib/comments/models.py:207
-#, fuzzy
 msgid "Content object"
-msgstr "indholdstype"
+msgstr "Indholdsobjekt"
 
 #: contrib/comments/models.py:159
 #, python-format
@@ -109,52 +105,52 @@
 "\n"
 "http://%(domain)s%(url)s"
 msgstr ""
+"Indsendt af %(user)s den %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
 
 #: contrib/comments/models.py:168
-#, fuzzy
 msgid "person's name"
-msgstr "fornavn"
+msgstr "personens navn"
 
 #: contrib/comments/models.py:171
-#, fuzzy
 msgid "ip address"
-msgstr "e-mail adresse"
+msgstr "IP-adresse"
 
 #: contrib/comments/models.py:173
 msgid "approved by staff"
-msgstr ""
+msgstr "godkendt af personale"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
-msgstr "tillad kommentarer"
+msgstr "fri kommentar"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
-msgstr "tillad kommentarer"
+msgstr "frie kommentarer"
 
 #: contrib/comments/models.py:233
 msgid "score"
-msgstr ""
+msgstr "score"
 
 #: contrib/comments/models.py:234
-#, fuzzy
 msgid "score date"
-msgstr "udløbsdato"
+msgstr "scoringsdato"
 
 #: contrib/comments/models.py:237
 msgid "karma score"
-msgstr ""
+msgstr "karma score"
 
 #: contrib/comments/models.py:238
 msgid "karma scores"
-msgstr ""
+msgstr "karma score"
 
 #: contrib/comments/models.py:242
 #, python-format
 msgid "%(score)d rating by %(user)s"
-msgstr ""
+msgstr "%(score)d rangering efter %(user)s"
 
 #: contrib/comments/models.py:258
 #, python-format
@@ -163,62 +159,59 @@
 "\n"
 "%(text)s"
 msgstr ""
+"Denne kommentar blev markeret af %(user)s:\n"
+"\n"
+"%(text)s"
 
 #: contrib/comments/models.py:265
-#, fuzzy
 msgid "flag date"
-msgstr "flad side"
+msgstr "mærkedato"
 
 #: contrib/comments/models.py:268
-#, fuzzy
 msgid "user flag"
-msgstr "Bruger"
+msgstr "bruger-mærke"
 
 #: contrib/comments/models.py:269
-#, fuzzy
 msgid "user flags"
-msgstr "Brugere"
+msgstr "bruger-mærker"
 
 #: contrib/comments/models.py:273
 #, python-format
 msgid "Flag by %r"
-msgstr ""
+msgstr "Mærket af %r"
 
 #: contrib/comments/models.py:278
-#, fuzzy
 msgid "deletion date"
-msgstr "sessionsdata"
+msgstr "sletningsdato"
 
 #: contrib/comments/models.py:280
 msgid "moderator deletion"
-msgstr ""
+msgstr "moderator-sletning"
 
 #: contrib/comments/models.py:281
 msgid "moderator deletions"
-msgstr ""
+msgstr "moderator-sletninger"
 
 #: contrib/comments/models.py:285
 #, python-format
 msgid "Moderator deletion by %r"
-msgstr ""
+msgstr "Moderator-sletning af %r"
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
-msgstr ""
+msgstr "Anonyme brugere kan ikke stemme"
 
 #: contrib/comments/views/karma.py:23
-#, fuzzy
 msgid "Invalid comment ID"
-msgstr "tillad kommentarer"
+msgstr "Ugyldigt kommentar-ID"
 
 #: contrib/comments/views/karma.py:25
 msgid "No voting for yourself"
-msgstr ""
+msgstr "Du kan ikke selv stemme"
 
 #: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr ""
+msgid "This rating is required because you've entered at least one other rating."
+msgstr "Denne rangering er påkrævet fordi du har indtastet mindst en anden rangering."
 
 #: contrib/comments/views/comments.py:112
 #, python-format
@@ -233,7 +226,13 @@
 "\n"
 "%(text)s"
 msgstr[0] ""
+"Denne kommentar blev indsendt af en bruger som har indsendt færre end %(count)s kommentar:\n"
+"\n"
+"%(text)s"
 msgstr[1] ""
+"Denne kommentar blev indsendt af en bruger som har indsendt færre end %(count)s kommentarer:\n"
+"\n"
+"%(text)s"
 
 #: contrib/comments/views/comments.py:117
 #, python-format
@@ -242,33 +241,36 @@
 "\n"
 "%(text)s"
 msgstr ""
+"Denne kommentar blev indsendt af en overfladisk bruger:\n"
+"\n"
+"%(text)s"
 
 #: contrib/comments/views/comments.py:189
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
-msgstr ""
+msgstr "Kun POST er tilladt"
 
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr ""
+msgstr "En eller flere af de påkrævede felter blev ikke indsendt"
 
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr ""
+msgstr "Nogen har misbrugt kommentarformularen (sikkerhedsovertrædelse)"
 
 #: contrib/comments/views/comments.py:207
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
 "invalid"
-msgstr ""
+msgstr "Kommentarformularen havde en ugyldigt 'target'-parameter -- objekt-ID'var ugyldigt"
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr ""
+msgstr "Kommentarformularen tilbød ikke hverken 'forhåndsvis' eller 'indsend'"
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
@@ -282,9 +284,8 @@
 msgstr "Adgangskode:"
 
 #: contrib/comments/templates/comments/form.html:6
-#, fuzzy
 msgid "Forgotten your password?"
-msgstr "Ændre adgangskode"
+msgstr "Har du glemt dit kodeord?"
 
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
@@ -309,38 +310,35 @@
 
 #: contrib/comments/templates/comments/form.html:12
 msgid "Ratings"
-msgstr ""
+msgstr "Rangeringer"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr ""
+msgstr "Påkrævet"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Optional"
-msgstr ""
+msgstr "Valgfri"
 
 #: contrib/comments/templates/comments/form.html:23
 msgid "Post a photo"
-msgstr ""
+msgstr "Indsend et foto"
 
 #: contrib/comments/templates/comments/form.html:27
 #: contrib/comments/templates/comments/freeform.html:5
-#, fuzzy
 msgid "Comment:"
-msgstr "tillad kommentarer"
+msgstr "Kommentar:"
 
 #: contrib/comments/templates/comments/form.html:32
 #: contrib/comments/templates/comments/freeform.html:9
-#, fuzzy
 msgid "Preview comment"
-msgstr "tillad kommentarer"
+msgstr "Forhåndsvis kommentar"
 
 #: contrib/comments/templates/comments/freeform.html:4
-#, fuzzy
 msgid "Your name:"
-msgstr "brugernavn"
+msgstr "Dit navn:"
 
 #: contrib/admin/filterspecs.py:40
 #, python-format
@@ -348,45 +346,45 @@
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
+"<h3>Af %s:</h3>\n"
+"<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
 #: contrib/admin/filterspecs.py:143
 msgid "All"
-msgstr ""
+msgstr "Alle"
 
 #: contrib/admin/filterspecs.py:109
 msgid "Any date"
-msgstr ""
+msgstr "NÃ¥r som helst"
 
 #: contrib/admin/filterspecs.py:110
-#, fuzzy
 msgid "Today"
-msgstr "Mandag"
+msgstr "Idag"
 
 #: contrib/admin/filterspecs.py:113
 msgid "Past 7 days"
-msgstr ""
+msgstr "De sidste 7 dage"
 
 #: contrib/admin/filterspecs.py:115
 msgid "This month"
-msgstr ""
+msgstr "Denne måned"
 
 #: contrib/admin/filterspecs.py:117
 msgid "This year"
-msgstr ""
+msgstr "Dette år"
 
 #: contrib/admin/filterspecs.py:143
 msgid "Yes"
-msgstr ""
+msgstr "Ja"
 
 #: contrib/admin/filterspecs.py:143
-#, fuzzy
 msgid "No"
-msgstr "Nov."
+msgstr "Nej"
 
 #: contrib/admin/filterspecs.py:150
 msgid "Unknown"
-msgstr ""
+msgstr "Ukendt"
 
 #: contrib/admin/models.py:16
 msgid "action time"
@@ -394,7 +392,7 @@
 
 #: contrib/admin/models.py:19
 msgid "object id"
-msgstr "objekt id"
+msgstr "objekt-ID"
 
 #: contrib/admin/models.py:20
 msgid "object repr"
@@ -418,14 +416,14 @@
 
 #: contrib/admin/templatetags/admin_list.py:228
 msgid "All dates"
-msgstr ""
+msgstr "Alle datoer"
 
 #: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
 #: contrib/auth/forms.py:41
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
-msgstr ""
+msgstr "Indtast venligst et korrekt brugernavn og kodeord. Læg mærke til at begge felter er versalfølsomme."
 
 #: contrib/admin/views/decorators.py:23
 #: contrib/admin/templates/admin/login.html:25
@@ -436,196 +434,189 @@
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
-msgstr ""
+msgstr "Log venligst ind igen, da din session er udløbet. Der er ingen grund til bekymring, informationen du indsendte er blevet gemt."
 
 #: contrib/admin/views/decorators.py:68
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
-msgstr ""
+msgstr "Det ser ud til din browser ikke er indstillet til at acceptere cookier. Slå venligst cookier til, genindlæs denne side og prøv igen."
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
-msgstr ""
+msgstr "Brugernavne kan ikke indeholde tegnet '@'."
 
 #: contrib/admin/views/decorators.py:84
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
+msgstr "Din e-mail-adresse er ikke dit brugernavn. Prøv '%s' i stedet."
 
 #: contrib/admin/views/main.py:226
-#, fuzzy
 msgid "Site administration"
-msgstr "Django administration"
+msgstr "Website-administration"
 
 #: contrib/admin/views/main.py:260
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" blev tilføjet i databasen."
 
 #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
 msgid "You may edit it again below."
-msgstr ""
+msgstr "Du kan redigere det igen herunder."
 
 #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
 #, python-format
 msgid "You may add another %s below."
-msgstr ""
+msgstr "Du kan tilføje endnu en %s herunder."
 
 #: contrib/admin/views/main.py:290
-#, fuzzy, python-format
+#, python-format
 msgid "Add %s"
-msgstr "Tilføj"
+msgstr "Tilføj %s"
 
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
-msgstr ""
+msgstr "Tilføjede %s."
 
 #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
 msgid "and"
-msgstr ""
+msgstr "og"
 
 #: contrib/admin/views/main.py:338
-#, fuzzy, python-format
+#, python-format
 msgid "Changed %s."
-msgstr "Ændre"
+msgstr "Ændrede %s."
 
 #: contrib/admin/views/main.py:340
 #, python-format
 msgid "Deleted %s."
-msgstr ""
+msgstr "Slettede %s."
 
 #: contrib/admin/views/main.py:343
 msgid "No fields changed."
-msgstr ""
+msgstr "Ingen filer ændret."
 
 #: contrib/admin/views/main.py:346
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" blev ændret."
 
 #: contrib/admin/views/main.py:354
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" blev tilføjet. Du kan redigere det igen herunder."
 
 #: contrib/admin/views/main.py:392
-#, fuzzy, python-format
+#, python-format
 msgid "Change %s"
-msgstr "Ændre"
+msgstr "Ændr %s"
 
 #: contrib/admin/views/main.py:470
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
+msgstr "Et eller flere %(fieldname)s i %(name)s: %(obj)s"
 
 #: contrib/admin/views/main.py:475
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
-msgstr ""
+msgstr "Et eller flere %(fieldname)s i %(name)s:"
 
 #: contrib/admin/views/main.py:508
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" blev slettet."
 
 #: contrib/admin/views/main.py:511
 msgid "Are you sure?"
-msgstr ""
+msgstr "Er du sikker?"
 
 #: contrib/admin/views/main.py:533
-#, fuzzy, python-format
+#, python-format
 msgid "Change history: %s"
-msgstr "Ændre adgangskode"
+msgstr "Ændringshistorik: %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s"
-msgstr ""
+msgstr "Vælg %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s to change"
-msgstr ""
+msgstr "Vælg %s for at ændre"
 
 #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
 #: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
 msgid "Integer"
-msgstr ""
+msgstr "Heltal"
 
 #: contrib/admin/views/doc.py:278
 msgid "Boolean (Either True or False)"
-msgstr ""
+msgstr "Boolsk (enten \"true\" eller \"false\")"
 
 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
 #, python-format
 msgid "String (up to %(maxlength)s)"
-msgstr ""
+msgstr "Tekst (op til %(maxlength)s)"
 
 #: contrib/admin/views/doc.py:280
 msgid "Comma-separated integers"
-msgstr ""
+msgstr "Kommaadskilte heltal"
 
 #: contrib/admin/views/doc.py:281
-#, fuzzy
 msgid "Date (without time)"
-msgstr "handlingstid"
+msgstr "Dato (uden tid)"
 
 #: contrib/admin/views/doc.py:282
-#, fuzzy
 msgid "Date (with time)"
-msgstr "Dato/tid"
+msgstr "Dato (med tid)"
 
 #: contrib/admin/views/doc.py:283
-#, fuzzy
 msgid "E-mail address"
-msgstr "E-mail adresse:"
+msgstr "E-mail-adresse"
 
 #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
 msgid "File path"
-msgstr ""
+msgstr "Filsti"
 
 #: contrib/admin/views/doc.py:285
-#, fuzzy
 msgid "Decimal number"
-msgstr "December"
+msgstr "Decimaltal"
 
 #: contrib/admin/views/doc.py:291
 msgid "Boolean (Either True, False or None)"
-msgstr ""
+msgstr "Boolsk (enten \"true\", \"false\", eller \"none\")"
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr ""
+msgstr "Relation-til-forælder-model"
 
 #: contrib/admin/views/doc.py:293
-#, fuzzy
 msgid "Phone number"
-msgstr "Indtast et heltal."
+msgstr "Telefonnummer"
 
 #: contrib/admin/views/doc.py:298
 msgid "Text"
-msgstr ""
+msgstr "Tekst"
 
 #: contrib/admin/views/doc.py:299
 msgid "Time"
-msgstr ""
+msgstr "Tid"
 
 #: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
 msgid "URL"
-msgstr "Internetadresse"
+msgstr "URL"
 
 #: contrib/admin/views/doc.py:301
 msgid "U.S. state (two uppercase letters)"
-msgstr ""
+msgstr "Stat (i USA, to store bogstaver)"
 
 #: contrib/admin/views/doc.py:302
 msgid "XML text"
-msgstr ""
+msgstr "XML tekst"
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
@@ -636,7 +627,7 @@
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
-msgstr ""
+msgstr "Dokumentation"
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
@@ -704,7 +695,7 @@
 
 #: contrib/admin/templates/admin/base_site.html:4
 msgid "Django site admin"
-msgstr "Django site administration"
+msgstr "Django website-administration"
 
 #: contrib/admin/templates/admin/base_site.html:7
 msgid "Django administration"
@@ -726,9 +717,7 @@
 msgid ""
 "There's been an error. It's been reported to the site administrators via e-"
 "mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Der opstod en fejl. Fejlen er rapporteret til site-administratoren via e-"
-"mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed."
+msgstr "Der opstod en fejl. Fejlen er rapporteret til website-administratoren via e-mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed."
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
@@ -737,12 +726,12 @@
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
-msgstr "Vi Beklager, men den ønskede side kunne ikke findes"
+msgstr "Vi beklager, men den ønskede side kunne ikke findes"
 
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modeller til rådighed i %(name)s applikationen."
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
@@ -751,11 +740,11 @@
 
 #: contrib/admin/templates/admin/index.html:34
 msgid "Change"
-msgstr "Ændre"
+msgstr "Ændr"
 
 #: contrib/admin/templates/admin/index.html:44
 msgid "You don't have permission to edit anything."
-msgstr "Du har ikke rettigehed til at foretage ændringer"
+msgstr "Du har ikke rettigheder til at foretage ændringer."
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
@@ -772,7 +761,7 @@
 #: contrib/admin/templates/admin/change_list.html:11
 #, python-format
 msgid "Add %(name)s"
-msgstr ""
+msgstr "Tilføj %(name)s"
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
@@ -780,12 +769,12 @@
 
 #: contrib/admin/templates/admin/base.html:23
 msgid "Welcome,"
-msgstr "Velkommen"
+msgstr "Velkommen,"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:9
 #: contrib/admin/templates/admin/submit_line.html:3
 msgid "Delete"
-msgstr ""
+msgstr "Slet"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
@@ -795,16 +784,14 @@
 "types of objects:"
 msgstr ""
 "Hvis du sletter %(object_name)s '%(object)s' vil du også slette relaterede "
-"objekter, men du har ikke rettigheder til at slette flg. typer objekter:"
+"objekter, men du har ikke rettigheder til at slette følgende objekttyper:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
 "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
 "the following related items will be deleted:"
-msgstr ""
-"Er du sikker på at du vil slette %(object_name) \"%(object)s\"? Alle de "
-"følgende relaterede objekter vil blive slettet:"
+msgstr "Er du sikker på du vil slette %(object_name)s \"%(object)s\"? Alle følgende relaterede objekter vil blive slettet:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -813,62 +800,61 @@
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
 msgid " By %(title)s "
-msgstr ""
+msgstr " Efter %(title)s "
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
-msgstr ""
+msgstr "Kør"
 
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
-msgstr ""
+msgstr "Se på website"
 
 #: contrib/admin/templates/admin/change_form.html:30
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ret venligst fejlen herunder."
+msgstr[1] "Ret venligst fejlene herunder."
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
-msgstr ""
+msgstr "Rækkefølge"
 
 #: contrib/admin/templates/admin/change_form.html:51
 msgid "Order:"
-msgstr ""
+msgstr "Rækkefølge:"
 
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
-msgstr ""
+msgstr "Gem som ny"
 
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save and add another"
-msgstr ""
+msgstr "Gem og tilføj endnu en"
 
 #: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and continue editing"
-msgstr ""
+msgstr "Gem og fortsæt med at redigere"
 
 #: contrib/admin/templates/admin/submit_line.html:7
-#, fuzzy
 msgid "Save"
-msgstr "aktiv"
+msgstr "Gem"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
 #: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admin/templates/registration/password_change_form.html:6
 #: contrib/admin/templates/registration/password_change_form.html:10
 msgid "Password change"
-msgstr "Ændre passord"
+msgstr "Ændr adgangskode"
 
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
 msgid "Password change successful"
-msgstr "Adgangskoden er ændret"
+msgstr "Adgangskoden blev ændret"
 
 #: contrib/admin/templates/registration/password_change_done.html:12
 msgid "Your password was changed."
-msgstr "Din adgangskode er ændret"
+msgstr "Din adgangskode blev ændret."
 
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/password_reset_form.html:6
@@ -881,13 +867,11 @@
 msgid ""
 "Forgotten your password? Enter your e-mail address below, and we'll reset "
 "your password and e-mail the new one to you."
-msgstr ""
-"Har din adgangskode? Indtast din email-adresse nedenfor, så sender vi dig en "
-"ny kode via e-mail"
+msgstr "Har du glemt din adgangskode? Indtast din e-mail-adresse herunder, så sender vi dig en ny adgangskode."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
-msgstr "E-mail adresse:"
+msgstr "E-mail-adresse:"
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
@@ -895,7 +879,7 @@
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Tak for den tid du brugte på sitet idag"
+msgstr "Tak for den kvalitetstid du brugte på websitet idag."
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
@@ -910,18 +894,16 @@
 msgid ""
 "We've e-mailed a new password to the e-mail address you submitted. You "
 "should be receiving it shortly."
-msgstr ""
-"Vi har e-mailet en ny adgangskode til dig. Du skulle modtage den om ganske "
-"kort tid."
+msgstr "Vi har sendt en ny adgangskode til din e-mail-adresse. Du skulle modtage den om ganske kort tid."
 
 #: contrib/admin/templates/registration/password_change_form.html:12
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
 msgstr ""
-"Indtast venligst din gamle adgangskode af sikkerhedsgrunde, og indtast så "
-"dit nye password to gange, så vi kan være sikre på, at det er indtastet "
-"korrekt"
+"Indtast venligst din gamle adgangskode, for en sikkerheds skyld og indtast så "
+"din nye adgangskode to gange, så vi kan være sikre på, at den er indtastet "
+"korrekt."
 
 #: contrib/admin/templates/registration/password_change_form.html:17
 msgid "Old password:"
@@ -937,17 +919,16 @@
 
 #: contrib/admin/templates/registration/password_change_form.html:23
 msgid "Change my password"
-msgstr "Ændre adgangskode"
+msgstr "Ændr min adgangskode"
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Du modtager denne e-mail, fordi du har bedt om at få nulstillet dit password"
+msgstr "Du modtager denne e-mail, fordi du har bedt om at få nulstillet din adgangskode"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
 msgid "for your user account at %(site_name)s"
-msgstr "for din konto hos %(site_name)s"
+msgstr "til din brugerkonto ved %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_email.html:5
 #, python-format
@@ -956,15 +937,15 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:7
 msgid "Feel free to change this password by going to this page:"
-msgstr "Du kan ændre din adgangskode ved at gå til denne side"
+msgstr "Du kan ændre din adgangskode ved at gå til denne side:"
 
 #: contrib/admin/templates/registration/password_reset_email.html:11
 msgid "Your username, in case you've forgotten:"
-msgstr "I det tilfælde, at du har glemt dit brugernavn er det:"
+msgstr "I det tilfælde at du har glemt dit brugernavn er det:"
 
 #: contrib/admin/templates/registration/password_reset_email.html:13
 msgid "Thanks for using our site!"
-msgstr "Tak, fordi du brugte vores site!"
+msgstr "Tak fordi du brugte vores website!"
 
 #: contrib/admin/templates/registration/password_reset_email.html:15
 #, python-format
@@ -973,11 +954,11 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
-msgstr ""
+msgstr "Bookmarklets"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:5
 msgid "Documentation bookmarklets"
-msgstr ""
+msgstr "Documentation bookmarklets"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:9
 msgid ""
@@ -989,60 +970,64 @@
 "as \"internal\" (talk to your system administrator if you aren't sure if\n"
 "your computer is \"internal\").</p>\n"
 msgstr ""
+"\n"
+"<p class=\"help\">For at installere bookmarklets, træk linket til din bogmærkelinje\n, eller højreklik på linket og tilføj det til dine bogmærker. Du kan nu\n"
+"markere bookmarkletten fra enhver side på websitet. Bid mærke i at nogle af disse \n"
+"bookmarkletter kræver at du ser på websitet fra en computer der opfattes \n"
+"som \"intern\" (tal med din systemadministrator, hvis du ikke er sikker på om\n"
+"din computer er \"intern\").</p>\n"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:19
 msgid "Documentation for this page"
-msgstr ""
+msgstr "Dokumentation for denne side"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:20
 msgid ""
 "Jumps you from any page to the documentation for the view that generates "
 "that page."
-msgstr ""
+msgstr "Bringer dig fra en hvilken som helst side til dokumentationen for det view der genererer den pågældende side."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
-#, fuzzy
 msgid "Show object ID"
-msgstr "objekt id"
+msgstr "Vis objekt-ID"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:23
 msgid ""
 "Shows the content-type and unique ID for pages that represent a single "
 "object."
-msgstr ""
+msgstr "Viser indholdstypen og unikt ID for sider der repræsenterer et enkelt objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
-msgstr ""
+msgstr "Redigér dette objekt (i det aktuelle vindue)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
+msgstr "Springer til administrationssiden for sider der repræsenterer et enkelt objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
-msgstr ""
+msgstr "Redigér dette objekt (i nyt vindue)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:29
 msgid "As above, but opens the admin page in a new window."
-msgstr ""
+msgstr "Som ovenfor, men åbner administrationssiden i et nyt vindue."
 
 #: contrib/admin/templates/widget/date_time.html:3
 msgid "Date:"
-msgstr ""
+msgstr "Dato:"
 
 #: contrib/admin/templates/widget/date_time.html:4
 msgid "Time:"
-msgstr ""
+msgstr "Tid:"
 
 #: contrib/admin/templates/widget/file.html:2
 msgid "Currently:"
-msgstr ""
+msgstr "Nuværende:"
 
 #: contrib/admin/templates/widget/file.html:3
-#, fuzzy
 msgid "Change:"
-msgstr "Ændre"
+msgstr "Ændr:"
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
@@ -1054,7 +1039,7 @@
 "events/search/'."
 msgstr ""
 "Dette skal være en absolut sti uden domænenavnet. For eksempel: '/nyheder/"
-"find/"
+"søg/"
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
@@ -1065,7 +1050,7 @@
 "This can be either an absolute path (as above) or a full URL starting with "
 "'http://'."
 msgstr ""
-"Dette kan enten være en absolut sti (som over), eller en komplet URL "
+"Dette kan enten være en absolut sti (som ovenfor), eller en komplet URL "
 "startende med 'http://'"
 
 #: contrib/redirects/models.py:12
@@ -1077,11 +1062,8 @@
 msgstr "omaddresseringer"
 
 #: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Eksempel: '/om/kontakt/'. Vær sikker på at du har en skråstreg foran og og "
-"bagefter."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Eksempel: '/om/kontakt/'. Vær sikker på at du har en skråstreg foran og bagved."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
@@ -1100,22 +1082,19 @@
 msgstr "skabelonnavn"
 
 #: contrib/flatpages/models.py:13
-#, fuzzy
 msgid ""
 "Example: 'flatpages/contact_page'. If this isn't provided, the system will "
 "use 'flatpages/default'."
-msgstr ""
-"Eksempel: 'fladesider/kontakt_side'. Vist denne ikke denne er gitt, vill "
-"'flatfiles/default' bli brukt."
+msgstr "Eksempel: 'fladesider/kontakt_side'. Hvis dette ikke tilbydes, bruger systemet 'fladesider/default'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
-msgstr "registrering kreves"
+msgstr "registrering påkrævet"
 
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
 msgstr ""
-"Hvis denne box er krydset af, vil kun brugere, der er logget ind, kunne se "
+"Hvis denne boks er markeret, vil kun brugere der er logget ind, kunne se "
 "siden."
 
 #: contrib/flatpages/models.py:18
@@ -1135,24 +1114,20 @@
 msgstr "kodenavn"
 
 #: contrib/auth/models.py:17
-#, fuzzy
 msgid "permission"
-msgstr "Rettighed"
+msgstr "rettighed"
 
 #: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
 msgid "permissions"
-msgstr "Rettigheder"
+msgstr "rettigheder"
 
 #: contrib/auth/models.py:29
-#, fuzzy
 msgid "group"
-msgstr "Gruppe"
+msgstr "gruppe"
 
 #: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
 msgid "groups"
-msgstr "Grupper"
+msgstr "grupper"
 
 #: contrib/auth/models.py:55
 msgid "username"
@@ -1168,7 +1143,7 @@
 
 #: contrib/auth/models.py:58
 msgid "e-mail address"
-msgstr "e-mail adresse"
+msgstr "e-mail-adresse"
 
 #: contrib/auth/models.py:59
 msgid "password"
@@ -1176,7 +1151,7 @@
 
 #: contrib/auth/models.py:59
 msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr ""
+msgstr "Brug '[algo]$[salt]$[hexdigest]'"
 
 #: contrib/auth/models.py:60
 msgid "staff status"
@@ -1184,7 +1159,7 @@
 
 #: contrib/auth/models.py:60
 msgid "Designates whether the user can log into this admin site."
-msgstr "Bestemmer om brugeren kan logge ind på dette administrationssite"
+msgstr "Bestemmer om brugeren kan logge ind på dette administrationswebsite."
 
 #: contrib/auth/models.py:61
 msgid "active"
@@ -1192,7 +1167,7 @@
 
 #: contrib/auth/models.py:62
 msgid "superuser status"
-msgstr "superbruger"
+msgstr "superbrugerstatus"
 
 #: contrib/auth/models.py:63
 msgid "last login"
@@ -1207,23 +1182,20 @@
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
 msgstr ""
-"I tillæg til de rettighder, som manuelt er tildelt brugeren, vil denne også "
-"få alle rettigheder tildelt hver gruppe han/hun er medlem af"
+"Udover de rettigheder, der manuelt er tildelt brugeren, vil denne også "
+"få alle rettigheder der er tildelt hver gruppe, brugeren er medlem af."
 
 #: contrib/auth/models.py:67
-#, fuzzy
 msgid "user permissions"
-msgstr "Rettigheder"
+msgstr "brugerrettigheder"
 
 #: contrib/auth/models.py:70
-#, fuzzy
 msgid "user"
-msgstr "Bruger"
+msgstr "bruger"
 
 #: contrib/auth/models.py:71
-#, fuzzy
 msgid "users"
-msgstr "Brugere"
+msgstr "brugere"
 
 #: contrib/auth/models.py:76
 msgid "Personal info"
@@ -1242,20 +1214,18 @@
 msgstr "Grupper"
 
 #: contrib/auth/models.py:219
-#, fuzzy
 msgid "message"
-msgstr "Meddelelse"
+msgstr "meddelelse"
 
 #: contrib/auth/forms.py:30
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
-msgstr ""
+msgstr "Din browser ser ud til ikke at have cookier aktiveret. Cookier er påkrævet for at kunne logge ind."
 
 #: contrib/contenttypes/models.py:25
-#, fuzzy
 msgid "python model class name"
-msgstr "python modulnavn"
+msgstr "python model klassenavn"
 
 #: contrib/contenttypes/models.py:28
 msgid "content type"
@@ -1295,11 +1265,11 @@
 
 #: contrib/sites/models.py:15
 msgid "site"
-msgstr "side"
+msgstr "website"
 
 #: contrib/sites/models.py:16
 msgid "sites"
-msgstr "sider"
+msgstr "websites"
 
 #: utils/translation.py:360
 msgid "DATE_FORMAT"
@@ -1391,52 +1361,51 @@
 
 #: utils/dates.py:19
 msgid "jan"
-msgstr ""
+msgstr "jan"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "feb"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mar"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "apr"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "may"
-msgstr "Maj"
+msgstr "maj"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "jun"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "jul"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "aug"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "sept"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "okt"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "dec"
 
 #: utils/dates.py:27
 msgid "Jan."
@@ -1469,44 +1438,42 @@
 #: utils/timesince.py:12
 msgid "year"
 msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ã¥r"
+msgstr[1] "Ã¥r"
 
 #: utils/timesince.py:13
 msgid "month"
 msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "måned"
+msgstr[1] "måneder"
 
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "uge"
+msgstr[1] "uger"
 
 #: utils/timesince.py:15
-#, fuzzy
 msgid "day"
 msgid_plural "days"
-msgstr[0] "Maj"
-msgstr[1] "Maj"
+msgstr[0] "dag"
+msgstr[1] "dage"
 
 #: utils/timesince.py:16
 msgid "hour"
 msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "time"
+msgstr[1] "timer"
 
 #: utils/timesince.py:17
-#, fuzzy
 msgid "minute"
 msgid_plural "minutes"
-msgstr[0] "side"
-msgstr[1] "side"
+msgstr[0] "minut"
+msgstr[1] "minutter"
 
 #: conf/global_settings.py:37
 msgid "Bengali"
-msgstr ""
+msgstr "Bengalsk"
 
 #: conf/global_settings.py:38
 msgid "Czech"
@@ -1517,9 +1484,8 @@
 msgstr "Walisisk"
 
 #: conf/global_settings.py:40
-#, fuzzy
 msgid "Danish"
-msgstr "Spansk"
+msgstr "Dansk"
 
 #: conf/global_settings.py:41
 msgid "German"
@@ -1527,7 +1493,7 @@
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Græsk"
 
 #: conf/global_settings.py:43
 msgid "English"
@@ -1547,11 +1513,11 @@
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Ungarsk"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Hebræisk"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
@@ -1563,11 +1529,11 @@
 
 #: conf/global_settings.py:51
 msgid "Japanese"
-msgstr ""
+msgstr "Japansk"
 
 #: conf/global_settings.py:52
 msgid "Dutch"
-msgstr ""
+msgstr "Hollandsk"
 
 #: conf/global_settings.py:53
 msgid "Norwegian"
@@ -1590,9 +1556,8 @@
 msgstr "Slovakisk"
 
 #: conf/global_settings.py:58
-#, fuzzy
 msgid "Slovenian"
-msgstr "Slovakisk"
+msgstr "Slovensk"
 
 #: conf/global_settings.py:59
 msgid "Serbian"
@@ -1603,9 +1568,8 @@
 msgstr "Svensk"
 
 #: conf/global_settings.py:61
-#, fuzzy
 msgid "Ukrainian"
-msgstr "Brasiliansk"
+msgstr "Ukrainsk"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
@@ -1620,20 +1584,18 @@
 msgstr "Dette felt må kun indeholde bogstaver, tal og understreger."
 
 #: core/validators.py:64
-#, fuzzy
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
-msgstr ""
-"Dette felt må kun indeholde bogstaver, tal, understreger og skråstreger."
+msgstr "Dette felt må kun indeholde bogstaver, tal, understreger, streger eller skråstreger."
 
 #: core/validators.py:72
 msgid "Uppercase letters are not allowed here."
-msgstr "Store bogstaver er ikke tilladt her"
+msgstr "Store bogstaver er ikke tilladt her."
 
 #: core/validators.py:76
 msgid "Lowercase letters are not allowed here."
-msgstr "Små bogstaver er ikke tilladt her"
+msgstr "Små bogstaver er ikke tilladt her."
 
 #: core/validators.py:83
 msgid "Enter only digits separated by commas."
@@ -1641,11 +1603,11 @@
 
 #: core/validators.py:95
 msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Indtast gyldige email-adresser adskilt af kommaer"
+msgstr "Indtast gyldige e-mail-adresser adskilt af kommaer."
 
 #: core/validators.py:99
 msgid "Please enter a valid IP address."
-msgstr "Venlist indtast en gyldig email-adresse."
+msgstr "Indtast venligst en gyldig IP-adresse."
 
 #: core/validators.py:103
 msgid "Empty values are not allowed here."
@@ -1653,11 +1615,11 @@
 
 #: core/validators.py:107
 msgid "Non-numeric characters aren't allowed here."
-msgstr "Der må kun være tal her"
+msgstr "Der må kun være tal i dette felt."
 
 #: core/validators.py:111
 msgid "This value can't be comprised solely of digits."
-msgstr "Denne værdi kan ikke kun bestå af tal."
+msgstr "Denne værdi kan ikke udelukkende bestå af tal."
 
 #: core/validators.py:116
 msgid "Enter a whole number."
@@ -1681,26 +1643,25 @@
 
 #: core/validators.py:136
 msgid "Enter a valid e-mail address."
-msgstr "Indtast en gyldig email-adresse."
+msgstr "Indtast en gyldig e-mail-adresse."
 
 #: core/validators.py:148
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr ""
-"Upload en billed-fil. Filen du uploadede var enten ikke et billede eller en "
-"ødelagt billed-fil"
+"Indsend en billedfil. Filen du indsendte var enten ikke et billede eller en "
+"ødelagt billedfil."
 
 #: core/validators.py:155
 #, python-format
 msgid "The URL %s does not point to a valid image."
-msgstr "URLen %s viser ikke til en gyldig billed-fil"
+msgstr "URLen %s viser ikke til en gyldig billedfil."
 
 #: core/validators.py:159
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Telefonnumre skal være i XXX-XXX-XXXX formatet. \"%s\" er ikke godkjent."
+msgstr "Telefonnumre skal være i formatet XXXXXXXX. \"%s\" er ikke godkendt."
 
 #: core/validators.py:167
 #, python-format
@@ -1709,7 +1670,7 @@
 
 #: core/validators.py:171
 msgid "A valid URL is required."
-msgstr "En gyldig URL er påkrævet"
+msgstr "En gyldig URL er påkrævet."
 
 #: core/validators.py:185
 #, python-format
@@ -1733,11 +1694,11 @@
 #: core/validators.py:206 core/validators.py:208
 #, python-format
 msgid "The URL %s is a broken link."
-msgstr "Denne URL %s linker ikke til en gyldig side eller fil"
+msgstr "Denne URL %s linker ikke til en gyldig side eller fil."
 
 #: core/validators.py:214
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "Indtast en gyldig amerikansk statsforkortelse"
+msgstr "Indtast en gyldig amerikansk statsforkortelse."
 
 #: core/validators.py:229
 #, python-format
@@ -1753,25 +1714,25 @@
 
 #: core/validators.py:255
 msgid "Please enter something for at least one field."
-msgstr "Indtast venligst noget i mindst et felt"
+msgstr "Indtast venligst noget, i mindst ét felt"
 
 #: core/validators.py:264 core/validators.py:275
 msgid "Please enter both fields or leave them both empty."
-msgstr "Udfyld begge felter, eller lad dem begge være blanke"
+msgstr "Udfyld begge felter, eller lad dem begge være tomme."
 
 #: core/validators.py:282
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Dette felt skal udfyldes, hvis %(field)s er lig %(value)s"
+msgstr "Dette felt skal udfyldes, hvis %(field)s er lig %(value)s."
 
 #: core/validators.py:294
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Dette felt skal udfyldes, hvis %(field)s ikke er lig %(value)s"
+msgstr "Dette felt skal udfyldes, hvis %(field)s ikke er lig %(value)s."
 
 #: core/validators.py:313
 msgid "Duplicate values are not allowed."
-msgstr "Duplikate værdier er ikke tilladt her"
+msgstr "Identiske værdier er ikke tilladt her."
 
 #: core/validators.py:336
 #, python-format
@@ -1783,34 +1744,32 @@
 msgstr "Indtast venligst et gyldigt decimaltal."
 
 #: core/validators.py:349
-#, fuzzy, python-format
+#, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Indtast en gyldig decimal med max %s tal ialt"
-msgstr[1] "Indtast en gyldig decimal med max %s tal ialt"
+msgid_plural "Please enter a valid decimal number with at most %s total digits."
+msgstr[0] "Indtast et gyldigt decimaltal med maksimalt %s ciffer i alt."
+msgstr[1] "Indtast et gyldigt decimaltal med maksimalt %s cifre i alt."
 
 #: core/validators.py:352
 #, python-format
 msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Indtast en gyldig decimal med max %s tal efter kommaet"
-msgstr[1] "Indtast en gyldig decimal med max %s tal efter kommaet"
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] "Indtast en gyldig decimal med maksimalt %s tal efter kommaet"
+msgstr[1] "Indtast en gyldig decimal med maksimalt %s tal efter kommaet"
 
 #: core/validators.py:362
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Tjek at den uploadede fil er mindst % bytes."
+msgstr "Tjek at den indsendte fil er mindst %s bytes."
 
 #: core/validators.py:363
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Tjek at den uploadede file er max %s bytes."
+msgstr "Tjek at den indsendte fil er maksimalt %s bytes."
 
 #: core/validators.py:376
 msgid "The format for this field is wrong."
-msgstr "Formatet i dette feltet er feil."
+msgstr "Formatet i dette felt er forkert."
 
 #: core/validators.py:391
 msgid "This field is invalid."
@@ -1823,18 +1782,15 @@
 
 #: core/validators.py:429
 #, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"URLen %(url)s returnerede ikke en godkendt Content-Type '%(contenttype)s'."
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "URLen %(url)s returnerede ikke en godkendt Content-Type header '%(contenttype)s'."
 
 #: core/validators.py:462
 #, python-format
 msgid ""
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
 "\"%(start)s\".)"
-msgstr ""
-"Luk venligst %(tag)s på linje %(line)s. (Linjen starer med \"%(start)s\".)"
+msgstr "Luk venligst %(tag)s på linje %(line)s. (Linjen starter med \"%(start)s\".)"
 
 #: core/validators.py:466
 #, python-format
@@ -1860,8 +1816,8 @@
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
-"\"<%(tag)s>\" på linje %(line)s er ikke et gyldigt tag. (Linjen starter med "
-"\"%(start)s\".)"
+"\"<%(tag)s>\" på linje %(line)s er et ugyldigt tag. (Linjen starter med \"%"
+"(start)s\".)"
 
 #: core/validators.py:480
 #, python-format
@@ -1869,7 +1825,7 @@
 "A tag on line %(line)s is missing one or more required attributes. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
-"Et tag på linje %(line)s mangler en obligatorisk attribut. (Linjen starter "
+"Et tag på linje %(line)s mangler en påkrævet attribut. (Linjen starter "
 "med \"%(start)s\".)"
 
 #: core/validators.py:485
@@ -1878,120 +1834,94 @@
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
-"\"%(attr)s\" attributten på linje $(line)s har en ugyldig værdi. (Linjen "
+"\"%(attr)s\" attributten på linje %(line)s har en ugyldig værdi. (Linjen "
 "starter med \"%(start)s\".)"
 
 #: db/models/manipulators.py:302
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
+msgstr "%(object)s med denne %(type)s eksisterer allerede for den givne %(field)s."
 
 #: db/models/fields/__init__.py:40
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr ""
+msgstr "%(optname)s med dette %(fieldname)s eksisterer allerede."
 
 #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
 #: forms/__init__.py:346
-#, fuzzy
 msgid "This field is required."
-msgstr "Dette felt er ugyldigt."
+msgstr "Dette felt er påkrævet."
 
 #: db/models/fields/__init__.py:337
-#, fuzzy
 msgid "This value must be an integer."
-msgstr "Denne værdi skal være en potens af %s."
+msgstr "Denne værdi skal et heltal."
 
 #: db/models/fields/__init__.py:369
-#, fuzzy
 msgid "This value must be either True or False."
-msgstr "Denne værdi skal være en potens af %s."
+msgstr "Denne værdi skal være enten true eller false."
 
 #: db/models/fields/__init__.py:385
-#, fuzzy
 msgid "This field cannot be null."
-msgstr "Dette felt er ugyldigt."
+msgstr "Dette felt kan ikke være null."
 
 #: db/models/fields/__init__.py:562
-#, fuzzy
 msgid "Enter a valid filename."
-msgstr "Indtast en gyldig email-adresse."
+msgstr "Indtast et gyldigt filnavn."
 
 #: db/models/fields/related.py:43
-#, fuzzy, python-format
+#, python-format
 msgid "Please enter a valid %s."
-msgstr "Venlist indtast en gyldig email-adresse."
+msgstr "Indtast venligst en gyldig %s."
 
 #: db/models/fields/related.py:579
-#, fuzzy
 msgid "Separate multiple IDs with commas."
-msgstr "Adskil id'er med kommaer."
+msgstr "Adskil flere ID'er med kommaer."
 
 #: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Hold \"Kontrol\", eller \"Æbletasten\" på Mac, nede for at vælge mere end en."
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Hold \"Kontrol\", eller \"Æbletasten\" på Mac nede, for at vælge mere end en."
 
 #: db/models/fields/related.py:625
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Indtast venligst et gyldigt %(self)s-ID. Værdien %(value)r er ugyldig."
+msgstr[1] "Indtast venligst gyldige %(self)s-ID'er. Værdierne %(value)r er ugyldige."
 
 #: forms/__init__.py:380
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Sørg for din tekst er kortere end %s tegn."
+msgstr[1] "Sørg for din tekst er kortere end %s tegn."
 
 #: forms/__init__.py:385
-#, fuzzy
 msgid "Line breaks are not allowed here."
-msgstr "Små bogstaver er ikke tilladt her"
+msgstr "Linjebrud er ikke tilladt her."
 
 #: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr ""
+msgstr "Markér et gyldigt valg; '%(data)s' er ikke i %(choices)s."
 
 #: forms/__init__.py:645
 msgid "The submitted file is empty."
-msgstr ""
+msgstr "Den indsendte fil er tom."
 
 #: forms/__init__.py:699
-#, fuzzy
 msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Indtast et heltal."
+msgstr "Indtast et heltal mellem -32,768 og 32,767."
 
 #: forms/__init__.py:708
-#, fuzzy
 msgid "Enter a positive number."
-msgstr "Indtast et heltal."
+msgstr "Indtast et positivt tal."
 
 #: forms/__init__.py:717
-#, fuzzy
 msgid "Enter a whole number between 0 and 32,767."
-msgstr "Indtast et heltal."
+msgstr "Indtast et heltal mellem 0 og 32,767."
 
 #: template/defaultfilters.py:379
 msgid "yes,no,maybe"
-msgstr ""
+msgstr "ja,nej,måske"
 
-#, fuzzy
-#~ msgid "Comments"
-#~ msgstr "tillad kommentarer"
-
-#~ msgid "label"
-#~ msgstr "mærkat"
-
-#~ msgid "package"
-#~ msgstr "pakke"
-
-#~ msgid "packages"
-#~ msgstr "pakker"

Modified: vendor/django/current/django/conf/locale/de/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/de/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/de/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/de/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,3 @@
-# SOME DESCRIPTIVE TITLE.
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
@@ -7,1992 +6,2220 @@
 msgstr ""
 "Project-Id-Version: Django 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:11+0200\n"
-"PO-Revision-Date: 2005-10-08 00:03+0200\n"
-"Last-Translator: Georg Bauer <gb at bofh.ms>\n"
+"POT-Creation-Date: 2007-02-05 02:56+0100\n"
+"PO-Revision-Date: 2007-02-05 03:19+0100\n"
+"Last-Translator: Dirk Eschler <dirk.eschler at gmx.net>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language-Team: \n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: KBabel 1.11.4\n"
 
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "Objekt ID"
+#: .\conf\global_settings.py:39
+msgid "Arabic"
+msgstr "Arabisch"
 
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "Überschrift"
+#: .\conf\global_settings.py:40
+msgid "Bengali"
+msgstr "Bengali"
 
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "Kommentar"
+#: .\conf\global_settings.py:41
+msgid "Czech"
+msgstr "Tschechisch"
 
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "Bewertung #1"
+#: .\conf\global_settings.py:42
+msgid "Welsh"
+msgstr "Walisisch"
 
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "Bewertung #2"
+#: .\conf\global_settings.py:43
+msgid "Danish"
+msgstr "Dänisch"
 
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "Bewertung #3"
+#: .\conf\global_settings.py:44
+msgid "German"
+msgstr "Deutsch"
 
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "Bewertung #4"
+#: .\conf\global_settings.py:45
+msgid "Greek"
+msgstr "Griechisch"
 
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "Bewertung #5"
+#: .\conf\global_settings.py:46
+msgid "English"
+msgstr "Englisch"
 
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "Bewertung #6"
+#: .\conf\global_settings.py:47
+msgid "Spanish"
+msgstr "Spanisch"
 
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "Bewertung #7"
+#: .\conf\global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "Argentinisches Spanisch"
 
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "Bewertung #8"
+#: .\conf\global_settings.py:49
+msgid "Finnish"
+msgstr "Finnisch"
 
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "ist eine Bewertung"
+#: .\conf\global_settings.py:50
+msgid "French"
+msgstr "Französisch"
 
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "Datum/Zeit Erstellung"
+#: .\conf\global_settings.py:51
+msgid "Galician"
+msgstr "Galicisch"
 
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "ist öffentlich"
+#: .\conf\global_settings.py:52
+msgid "Hungarian"
+msgstr "Ungarisch"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
-msgid "IP address"
-msgstr "IP-Adresse"
+#: .\conf\global_settings.py:53
+msgid "Hebrew"
+msgstr "Hebräisch"
 
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "ist gelöscht"
+#: .\conf\global_settings.py:54
+msgid "Icelandic"
+msgstr "Isländisch"
 
-#: 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 ""
-"Hier einen Haken setzen, wenn der Kommentar unpassend ist. Es wird dann eine "
-"\"Dieser Kommentar wurde entfernt\" Meldung statt dessen angezeigt."
+#: .\conf\global_settings.py:55
+msgid "Italian"
+msgstr "Italienisch"
 
-#: contrib/comments/models.py:91
-msgid "comments"
-msgstr "Kommentare"
+#: .\conf\global_settings.py:56
+msgid "Japanese"
+msgstr "Japanisch"
 
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "Inhaltsobjekt"
+#: .\conf\global_settings.py:57
+msgid "Dutch"
+msgstr "Holländisch"
 
-#: 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 ""
-"Geschrieben von %(user)s am %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
+#: .\conf\global_settings.py:58
+msgid "Norwegian"
+msgstr "Norwegisch"
 
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "Autorname"
+#: .\conf\global_settings.py:59
+msgid "Polish"
+msgstr "Polnisch"
 
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "IP-Adresse"
+#: .\conf\global_settings.py:60
+msgid "Brazilian"
+msgstr "Brasilianisch"
 
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "Bestätigt vom Betreiber"
+#: .\conf\global_settings.py:61
+msgid "Romanian"
+msgstr "Rumänisch"
 
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "Freier Kommentar"
+#: .\conf\global_settings.py:62
+msgid "Russian"
+msgstr "Russisch"
 
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "Freie Kommentare"
+#: .\conf\global_settings.py:63
+msgid "Slovak"
+msgstr "Slowakisch"
 
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "Bewertung"
+#: .\conf\global_settings.py:64
+msgid "Slovenian"
+msgstr "Slowenisch"
 
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "Bewertungsdatum"
+#: .\conf\global_settings.py:65
+msgid "Serbian"
+msgstr "Serbisch"
 
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "Karma Bewertung"
+#: .\conf\global_settings.py:66
+msgid "Swedish"
+msgstr "Schwedisch"
 
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "Karma Bewertungen"
+#: .\conf\global_settings.py:67
+msgid "Tamil"
+msgstr "Tamilisch"
 
-#: contrib/comments/models.py:242
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d Bewertung von %(user)s"
+#: .\conf\global_settings.py:68
+msgid "Turkish"
+msgstr "Türkisch"
 
-#: contrib/comments/models.py:258
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Dieser Kommentar ist von %(user)s markiert:\n"
-"\n"
-"%(text)s"
+#: .\conf\global_settings.py:69
+msgid "Ukrainian"
+msgstr "Ukrainisch"
 
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "Kennzeichnungsdatum"
+#: .\conf\global_settings.py:70
+msgid "Simplified Chinese"
+msgstr "Vereinfachtes Chinesisch"
 
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "Benutzerkennzeichnung"
+#: .\conf\global_settings.py:71
+msgid "Traditional Chinese"
+msgstr "Traditionelles Chinesisch"
 
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "Benutzerkennzeichnungen"
-
-#: contrib/comments/models.py:273
+#: .\contrib\admin\filterspecs.py:40
 #, python-format
-msgid "Flag by %r"
-msgstr "Gekennzeichnet von %r"
-
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "Löschdatum"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "Löschung vom Moderator"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "Löschungen vom Moderator"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Vom Moderator %r gelöscht"
-
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Anonyme Benutzer können nicht abstimmen"
-
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "Ungültige Kommentar-ID"
-
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "Keine Abstimmung bei Dir selber"
-
-#: contrib/comments/views/comments.py:28
 msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr ""
-"Die Abstimmung ist zwangsweise, weil Du an mindestens einer anderen "
-"Abstimmung teilnimmst."
-
-#: contrib/comments/views/comments.py:112
-#, 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] ""
-"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s "
-"Kommentar:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s "
-"Kommentaren:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:117
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Dieser Kommentar ist von einem nicht einschätzbaren Benutzer:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:189
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "Nur POST ist erlaubt"
-
-#: contrib/comments/views/comments.py:193
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Eines oder mehrere der erforderlichen Felder fehlt"
-
-#: contrib/comments/views/comments.py:197
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr ""
-"Jemand hat mit dem Kommentarformular herumgespielt (Sicherheitsverletzung)"
-
-#: contrib/comments/views/comments.py:207
-#: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"Das Kommentarformular hatte einen falschen 'target' Parameter -- die Objekt-"
-"ID ist ungültig."
-
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr ""
-"Das Kommentarformular wurde nicht mit 'preview' oder 'post' abgeschickt"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "Benutzername:"
-
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Passwort:"
-
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr "Kennwort vergessen?"
-
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "Abmelden"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Bewertungen"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Erforderlich"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Optional"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Ein Bild veröffentlichen"
-
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Kommentar:"
-
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-msgid "Preview comment"
-msgstr "Kommentarvorschau"
-
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Ihr Name:"
-
-#: contrib/admin/filterspecs.py:40
-#, python-format
-msgid ""
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
 "<h3>Nach %s:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: .\contrib\admin\filterspecs.py:70
+#: .\contrib\admin\filterspecs.py:88
+#: .\contrib\admin\filterspecs.py:143
+#: .\contrib\admin\filterspecs.py:169
 msgid "All"
 msgstr "Alle"
 
-#: contrib/admin/filterspecs.py:109
+#: .\contrib\admin\filterspecs.py:109
 msgid "Any date"
 msgstr "Alle Daten"
 
-#: contrib/admin/filterspecs.py:110
+#: .\contrib\admin\filterspecs.py:110
 msgid "Today"
 msgstr "Heute"
 
-#: contrib/admin/filterspecs.py:113
+#: .\contrib\admin\filterspecs.py:113
 msgid "Past 7 days"
 msgstr "Letzte 7 Tage"
 
-#: contrib/admin/filterspecs.py:115
+#: .\contrib\admin\filterspecs.py:115
 msgid "This month"
 msgstr "Diesen Monat"
 
-#: contrib/admin/filterspecs.py:117
+#: .\contrib\admin\filterspecs.py:117
 msgid "This year"
 msgstr "Dieses Jahr"
 
-#: contrib/admin/filterspecs.py:143
+#: .\contrib\admin\filterspecs.py:143
+#: .\newforms\widgets.py:162
+#: .\oldforms\__init__.py:572
 msgid "Yes"
 msgstr "Ja"
 
-#: contrib/admin/filterspecs.py:143
+#: .\contrib\admin\filterspecs.py:143
+#: .\newforms\widgets.py:162
+#: .\oldforms\__init__.py:572
 msgid "No"
 msgstr "Nein"
 
-#: contrib/admin/filterspecs.py:150
+#: .\contrib\admin\filterspecs.py:150
+#: .\newforms\widgets.py:162
+#: .\oldforms\__init__.py:572
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: contrib/admin/models.py:16
+#: .\contrib\admin\models.py:16
 msgid "action time"
-msgstr "Zeit der Aktion"
+msgstr "Zeitpunkt der Aktion"
 
-#: contrib/admin/models.py:19
+#: .\contrib\admin\models.py:19
 msgid "object id"
-msgstr "Objekt ID"
+msgstr "Objekt-ID"
 
-#: contrib/admin/models.py:20
+#: .\contrib\admin\models.py:20
 msgid "object repr"
 msgstr "Objekt Darst."
 
-#: contrib/admin/models.py:21
+#: .\contrib\admin\models.py:21
 msgid "action flag"
 msgstr "Aktionskennzeichen"
 
-#: contrib/admin/models.py:22
+#: .\contrib\admin\models.py:22
 msgid "change message"
-msgstr "Änderungsmeldung"
+msgstr "Änderungsmeldung"
 
-#: contrib/admin/models.py:25
+#: .\contrib\admin\models.py:25
 msgid "log entry"
 msgstr "Logeintrag"
 
-#: contrib/admin/models.py:26
+#: .\contrib\admin\models.py:26
 msgid "log entries"
-msgstr "Logeinträge"
+msgstr "Logeinträge"
 
-#: contrib/admin/templatetags/admin_list.py:228
-msgid "All dates"
-msgstr "Alle Tage"
+#: .\contrib\admin\templates\admin\404.html.py:4
+#: .\contrib\admin\templates\admin\404.html.py:8
+msgid "Page not found"
+msgstr "Seite nicht gefunden"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Bitte einen Benutzernamen und ein Kennwort eingeben. Beide Felder "
-"berücksichtigen die Groß-/Kleinschreibung."
+#: .\contrib\admin\templates\admin\404.html.py:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Es tut uns leid, aber die angeforderte Seite konnte nicht gefunden werden."
 
-#: contrib/admin/views/decorators.py:23
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "Anmelden"
+#: .\contrib\admin\templates\admin\500.html.py:4
+#: .\contrib\admin\templates\admin\base.html.py:30
+#: .\contrib\admin\templates\admin\change_form.html.py:13
+#: .\contrib\admin\templates\admin\change_list.html.py:6
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:6
+#: .\contrib\admin\templates\admin\invalid_setup.html.py:4
+#: .\contrib\admin\templates\admin\object_history.html.py:5
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:12
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
+#: .\contrib\admin\templates\registration\logged_out.html.py:4
+#: .\contrib\admin\templates\registration\password_change_done.html.py:4
+#: .\contrib\admin\templates\registration\password_change_form.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
+msgid "Home"
+msgstr "Start"
 
-#: contrib/admin/views/decorators.py:61
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Bitte neu anmelden, da die Session ausgelaufen ist. Keine Angst: die "
-"Beiträge wurden gesichert."
+#: .\contrib\admin\templates\admin\500.html.py:4
+msgid "Server error"
+msgstr "Serverfehler"
 
-#: contrib/admin/views/decorators.py:68
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Es sieht danach aus, das der Browser keine Cookies akzeptiert. Bitte im "
-"Browser Cookies aktivieren und diese Seite neu laden."
+#: .\contrib\admin\templates\admin\500.html.py:6
+msgid "Server error (500)"
+msgstr "Serverfehler (500)"
 
-#: contrib/admin/views/decorators.py:82
-msgid "Usernames cannot contain the '@' character."
-msgstr "Benutzernamen können das Zeichen '@' nicht enthalten."
+#: .\contrib\admin\templates\admin\500.html.py:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Serverfehler <em>(500)</em>"
 
-#: contrib/admin/views/decorators.py:84
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Die eMail-Adresse ist nicht der Benutzername. Bitte '%s' stattdessen "
-"versuchen."
+#: .\contrib\admin\templates\admin\500.html.py: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 "Ein Fehler ist aufgetreten. Dieser Fehler wurde an die Serververwalter per E-Mail weitergegeben und sollte bald behoben sein. Vielen Dank für Ihr Verständnis."
 
-#: contrib/admin/views/main.py:226
-msgid "Site administration"
-msgstr "Website Verwaltung"
+#: .\contrib\admin\templates\admin\base.html.py:25
+msgid "Welcome,"
+msgstr "Willkommen,"
 
-#: contrib/admin/views/main.py:260
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt."
+#: .\contrib\admin\templates\admin\base.html.py:25
+#: .\contrib\admin\templates\admin\change_form.html.py:10
+#: .\contrib\admin\templates\admin\change_list.html.py:5
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:3
+#: .\contrib\admin\templates\admin\object_history.html.py:3
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:9
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
+#: .\contrib\admin\templates\registration\password_change_done.html.py:3
+#: .\contrib\admin\templates\registration\password_change_form.html.py:3
+msgid "Documentation"
+msgstr "Dokumentation"
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
-msgid "You may edit it again below."
-msgstr "Das Element kann jetzt weiter geändert werden."
+#: .\contrib\admin\templates\admin\base.html.py:25
+#: .\contrib\admin\templates\admin\change_form.html.py:10
+#: .\contrib\admin\templates\admin\change_list.html.py:5
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:3
+#: .\contrib\admin\templates\admin\object_history.html.py:3
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:9
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:15
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:46
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:4
+#: .\contrib\admin\templates\admin_doc\index.html.py:4
+#: .\contrib\admin\templates\admin_doc\missing_docutils.html.py:4
+#: .\contrib\admin\templates\admin_doc\model_detail.html.py:3
+#: .\contrib\admin\templates\admin_doc\model_index.html.py:5
+#: .\contrib\admin\templates\admin_doc\template_detail.html.py:4
+#: .\contrib\admin\templates\admin_doc\template_filter_index.html.py:5
+#: .\contrib\admin\templates\admin_doc\template_tag_index.html.py:5
+#: .\contrib\admin\templates\admin_doc\view_detail.html.py:4
+#: .\contrib\admin\templates\admin_doc\view_index.html.py:5
+#: .\contrib\admin\templates\registration\password_change_done.html.py:3
+#: .\contrib\admin\templates\registration\password_change_form.html.py:3
+msgid "Change password"
+msgstr "Passwort ändern"
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
-#, python-format
-msgid "You may add another %s below."
-msgstr "Jetzt kann ein weiteres Element vom Typ %s angelegt werden."
+#: .\contrib\admin\templates\admin\base.html.py:25
+#: .\contrib\admin\templates\admin\change_form.html.py:10
+#: .\contrib\admin\templates\admin\change_list.html.py:5
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:3
+#: .\contrib\admin\templates\admin\object_history.html.py:3
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:9
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:4
+#: .\contrib\admin\templates\admin_doc\index.html.py:4
+#: .\contrib\admin\templates\admin_doc\missing_docutils.html.py:4
+#: .\contrib\admin\templates\admin_doc\model_detail.html.py:3
+#: .\contrib\admin\templates\admin_doc\model_index.html.py:5
+#: .\contrib\admin\templates\admin_doc\template_detail.html.py:4
+#: .\contrib\admin\templates\admin_doc\template_filter_index.html.py:5
+#: .\contrib\admin\templates\admin_doc\template_tag_index.html.py:5
+#: .\contrib\admin\templates\admin_doc\view_detail.html.py:4
+#: .\contrib\admin\templates\admin_doc\view_index.html.py:5
+#: .\contrib\admin\templates\registration\password_change_done.html.py:3
+#: .\contrib\admin\templates\registration\password_change_form.html.py:3
+#: .\contrib\comments\templates\comments\form.html.py:6
+msgid "Log out"
+msgstr "Abmelden"
 
-#: contrib/admin/views/main.py:290
-#, python-format
-msgid "Add %s"
-msgstr "%s zufügen"
+#: .\contrib\admin\templates\admin\base_site.html.py:4
+msgid "Django site admin"
+msgstr "Django Systemverwaltung"
 
-#: contrib/admin/views/main.py:336
-#, python-format
-msgid "Added %s."
-msgstr "%s hinzugefügt."
+#: .\contrib\admin\templates\admin\base_site.html.py:7
+msgid "Django administration"
+msgstr "Django Verwaltung"
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "und"
+#: .\contrib\admin\templates\admin\change_form.html.py:15
+#: .\contrib\admin\templates\admin\index.html.py:28
+msgid "Add"
+msgstr "Hinzufügen"
 
-#: contrib/admin/views/main.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s geändert"
+#: .\contrib\admin\templates\admin\change_form.html.py:21
+#: .\contrib\admin\templates\admin\object_history.html.py:5
+msgid "History"
+msgstr "Geschichte"
 
-#: contrib/admin/views/main.py:340
-#, python-format
-msgid "Deleted %s."
-msgstr "%s gelöscht."
+#: .\contrib\admin\templates\admin\change_form.html.py:22
+msgid "View on site"
+msgstr "Im Web Anzeigen"
 
-#: contrib/admin/views/main.py:343
-msgid "No fields changed."
-msgstr "Keine Felder geändert."
+#: .\contrib\admin\templates\admin\change_form.html.py:32
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:24
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Bitte den aufgeführten Fehler korrigieren."
+msgstr[1] "Bitte die aufgeführten Fehler korrigieren."
 
-#: contrib/admin/views/main.py:346
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich geändert."
+#: .\contrib\admin\templates\admin\change_form.html.py:50
+msgid "Ordering"
+msgstr "Sortierung"
 
-#: contrib/admin/views/main.py:354
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" wurde erfolgreich zugefügt. Das Element kann jetzt "
-"geändert werden."
+#: .\contrib\admin\templates\admin\change_form.html.py:53
+msgid "Order:"
+msgstr "Reihenfolge:"
 
-#: contrib/admin/views/main.py:392
+#: .\contrib\admin\templates\admin\change_list.html.py:12
 #, python-format
-msgid "Change %s"
-msgstr "%s ändern"
+msgid "Add %(name)s"
+msgstr "%(name)s hinzufügen"
 
-#: contrib/admin/views/main.py:470
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s"
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:9
+#: .\contrib\admin\templates\admin\submit_line.html.py:3
+msgid "Delete"
+msgstr "Löschen"
 
-#: contrib/admin/views/main.py:475
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:14
 #, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Ein oder mehrere %(fieldname)s in %(name)s:"
+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 "Die Löschung des %(object_name)s '%(escaped_object)s' hätte die Löschung von abhängigen Daten zur Folge, aber Sie haben nicht die nötigen Rechte um die folgenden abhängigen Daten zu löschen:"
 
-#: contrib/admin/views/main.py:508
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:21
 #, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelöscht."
+msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
+msgstr "Sind Sie sicher, dass Sie %(object_name)s \"%(escaped_object)s\" löschen wollen? Es werden zusätzlich die folgenden abhängigen Daten mit gelöscht:"
 
-#: contrib/admin/views/main.py:511
-msgid "Are you sure?"
-msgstr "Sicher? Ganz sicher?"
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:26
+msgid "Yes, I'm sure"
+msgstr "Ja, ich bin sicher"
 
-#: contrib/admin/views/main.py:533
+#: .\contrib\admin\templates\admin\filter.html.py:2
 #, python-format
-msgid "Change history: %s"
-msgstr "Änderungsgeschichte: %s"
+msgid " By %(filter_title)s "
+msgstr " Nach %(filter_title)s "
 
-#: contrib/admin/views/main.py:565
+#: .\contrib\admin\templates\admin\filters.html.py:4
+msgid "Filter"
+msgstr "Filter"
+
+#: .\contrib\admin\templates\admin\index.html.py:17
 #, python-format
-msgid "Select %s"
-msgstr "%s auswählen"
+msgid "Models available in the %(name)s application."
+msgstr "Modelle, die in der Anwendung %(name)s vorhanden sind."
 
-#: contrib/admin/views/main.py:565
+#: .\contrib\admin\templates\admin\index.html.py:18
 #, python-format
-msgid "Select %s to change"
-msgstr "%s zur Änderung auswählen"
+msgid "%(name)s"
+msgstr "%(name)s"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
-msgid "Integer"
-msgstr "Ganzzahl"
+#: .\contrib\admin\templates\admin\index.html.py:34
+msgid "Change"
+msgstr "Ändern"
 
-#: contrib/admin/views/doc.py:278
-msgid "Boolean (Either True or False)"
-msgstr "Wahrheitswert (Wahr oder Falsch)"
+#: .\contrib\admin\templates\admin\index.html.py:44
+msgid "You don't have permission to edit anything."
+msgstr "Sie haben keine Berechtigung irgendwas zu ändern."
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "Zeichenkette (bis zu %(maxlength)s Zeichen)"
+#: .\contrib\admin\templates\admin\index.html.py:52
+msgid "Recent Actions"
+msgstr "Kürzliche Aktionen"
 
-#: contrib/admin/views/doc.py:280
-msgid "Comma-separated integers"
-msgstr "Kommaseparierte Liste von Zahlen"
+#: .\contrib\admin\templates\admin\index.html.py:53
+msgid "My Actions"
+msgstr "Meine Aktionen"
 
-#: contrib/admin/views/doc.py:281
-msgid "Date (without time)"
-msgstr "Datum (ohne Zeit)"
+#: .\contrib\admin\templates\admin\index.html.py:57
+msgid "None available"
+msgstr "Keine vorhanden"
 
-#: contrib/admin/views/doc.py:282
-msgid "Date (with time)"
-msgstr "Datum (mit Zeit)"
+#: .\contrib\admin\templates\admin\invalid_setup.html.py: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 "Etwas stimmt nicht mit der Datenbankkonfiguration. Bitte sicherstellen, das die richtigen Datenbanktabellen angelegt wurden und bitte sicherstellen, das die Datenbank vom verwendeten Datenbankbenutzer auch lesbar ist."
 
-#: contrib/admin/views/doc.py:283
-msgid "E-mail address"
-msgstr "E-mail-Adresse"
+#: .\contrib\admin\templates\admin\login.html.py:17
+#: .\contrib\comments\templates\comments\form.html.py:6
+#: .\contrib\comments\templates\comments\form.html.py:8
+msgid "Username:"
+msgstr "Benutzername:"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
-msgid "File path"
-msgstr "Dateipfad"
+#: .\contrib\admin\templates\admin\login.html.py:20
+#: .\contrib\comments\templates\comments\form.html.py:8
+msgid "Password:"
+msgstr "Passwort:"
 
-#: contrib/admin/views/doc.py:285
-msgid "Decimal number"
-msgstr "Dezimalzahl"
+#: .\contrib\admin\templates\admin\login.html.py:25
+#: .\contrib\admin\views\decorators.py:24
+msgid "Log in"
+msgstr "Anmelden"
 
-#: contrib/admin/views/doc.py:291
-msgid "Boolean (Either True, False or None)"
-msgstr "Wahrheitswert (Wahr, Falsch oder Nichts)"
+#: .\contrib\admin\templates\admin\object_history.html.py:18
+msgid "Date/time"
+msgstr "Datum/Zeit"
 
-#: contrib/admin/views/doc.py:292
-msgid "Relation to parent model"
-msgstr "Beziehung zum Übermodell"
+#: .\contrib\admin\templates\admin\object_history.html.py:19
+msgid "User"
+msgstr "Benutzer"
 
-#: contrib/admin/views/doc.py:293
-msgid "Phone number"
-msgstr "Telefonnummer"
+#: .\contrib\admin\templates\admin\object_history.html.py:20
+msgid "Action"
+msgstr "Aktion"
 
-#: contrib/admin/views/doc.py:298
-msgid "Text"
-msgstr "Text"
+#: .\contrib\admin\templates\admin\object_history.html.py:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
 
-#: contrib/admin/views/doc.py:299
-msgid "Time"
-msgstr "Zeit"
+#: .\contrib\admin\templates\admin\object_history.html.py:36
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Dieses Objekt hat keine Änderungsgeschichte. Es wurde möglicherweise nicht über diese Verwaltungsseiten angelegt."
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
+#: .\contrib\admin\templates\admin\pagination.html.py:10
+msgid "Show all"
+msgstr "Zeige alle"
 
-#: contrib/admin/views/doc.py:301
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S. Bundesstaat (zwei Grossbuchstaben)"
+#: .\contrib\admin\templates\admin\search_form.html.py:8
+msgid "Go"
+msgstr "Los"
 
-#: contrib/admin/views/doc.py:302
-msgid "XML text"
-msgstr "XML Text"
+#: .\contrib\admin\templates\admin\search_form.html.py:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "Ein Ergebnis"
+msgstr[1] "%(counter)s Ergebnisse"
 
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Dokumentation"
+#: .\contrib\admin\templates\admin\search_form.html.py:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s gesamt"
 
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "Passwort ändern"
+#: .\contrib\admin\templates\admin\submit_line.html.py:4
+msgid "Save as new"
+msgstr "Als neu sichern"
 
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Start"
+#: .\contrib\admin\templates\admin\submit_line.html.py:5
+msgid "Save and add another"
+msgstr "Sichern und neu hinzufügen"
 
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
-msgid "History"
-msgstr "Geschichte"
+#: .\contrib\admin\templates\admin\submit_line.html.py:6
+msgid "Save and continue editing"
+msgstr "Sichern und weiter bearbeiten"
 
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Datum/Zeit"
+#: .\contrib\admin\templates\admin\submit_line.html.py:7
+msgid "Save"
+msgstr "Sichern"
 
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "Benutzer"
+#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:6
+msgid "First, enter a username and password. Then, you'll be able to edit more user options."
+msgstr "Zuerst einen Benutzer und ein Passwort eingeben. Danach können weitere Optionen für den Benutzer geändert werden."
 
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "Aktion"
+#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:12
+msgid "Username"
+msgstr "Benutzername"
 
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "j. N Y, H:i"
+#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:18
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:34
+msgid "Password"
+msgstr "Passwort"
 
-#: contrib/admin/templates/admin/object_history.html:36
+#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:23
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:39
+msgid "Password (again)"
+msgstr "Passwort (wiederholen)"
+
+#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:24
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:40
+msgid "Enter the same password as above, for verification."
+msgstr "Bitte das gleiche Passwort zur Überprüfung nochmal eingeben."
+
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Bitte geben Sie ein neues Passwort für den Benutzer <strong>%(username)s</strong> ein."
+
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
+msgid "Bookmarklets"
+msgstr "Bookmarklets"
+
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:5
+msgid "Documentation bookmarklets"
+msgstr "Dokumentations-Bookmarklets"
+
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:9
 msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
 msgstr ""
-"Dieses Objekt hat keine Änderungsgeschichte. Es wurde möglicherweise nicht "
-"über diese Verwaltungsseiten angelegt."
+"\n"
+"<p class=\"help\">Um Bookmarklets zu installieren müssen diese Links in die\n"
+"Browser-Werkzeugleiste gezogen werden, oder mittels rechter Maustaste in die\n"
+"Bookmarks gespeichert werden. Danach können die Bookmarklets von jeder Seite\n"
+"aufgerufen werden. Einige Bookmarklets sind für den Zugriff von 'internen'\n"
+"Rechnern eingeschränkt. Falls nicht klar ist, ob ein Rechner als 'intern'\n"
+"bewertet wird, bitte den Administrator fragen.</p>\n"
 
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django Systemverwaltung"
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:19
+msgid "Documentation for this page"
+msgstr "Dokumentation für diese Seite"
 
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Django Verwaltung"
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:20
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Springt von jeder Seite zu der Dokumentation für den View der diese Seite erzeugt."
 
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Serverfehler"
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:22
+msgid "Show object ID"
+msgstr "Objekt-ID anzeigen"
 
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Serverfehler (500)"
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:23
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Zeigt den Content-Type und die eindeutige ID für Seiten die ein einzelnes Objekt repräsentieren."
 
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Serverfehler <em>(500)</em>"
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:25
+msgid "Edit this object (current window)"
+msgstr "Dieses Objekt im aktuellen Fenster ändern."
 
-#: 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 ""
-"Es hat einen Fehler gegeben. Dieser Fehler wurde an die Serververwalter per "
-"eMail weitergegeben und sollte bald behoben sein. Vielen Dank für Ihr "
-"Verständnis."
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr "Springt zu der Administrationsseite für dieses Objekt, wenn diese Seite ein Objekt repräsentiert."
 
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Seite nicht gefunden"
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:28
+msgid "Edit this object (new window)"
+msgstr "Dieses Objekt in einem neuen Fenster ändern."
 
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-"Es tut uns leid, aber die angeforderte Seite kann nicht gefunden werden."
+#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Wie zuvor, aber öffnet die Administrationsseite in einem neuen Fenster."
 
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr ""
+#: .\contrib\admin\templates\registration\logged_out.html.py:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Vielen Dank, dass Sie hier ein paar nette Minuten verbracht haben."
 
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "Zufügen"
+#: .\contrib\admin\templates\registration\logged_out.html.py:10
+msgid "Log in again"
+msgstr "Erneut anmelden"
 
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Ändern"
+#: .\contrib\admin\templates\registration\password_change_done.html.py:4
+#: .\contrib\admin\templates\registration\password_change_form.html.py:4
+#: .\contrib\admin\templates\registration\password_change_form.html.py:6
+#: .\contrib\admin\templates\registration\password_change_form.html.py:10
+msgid "Password change"
+msgstr "Passwort ändern"
 
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Sie haben keine Berechtigung irgendwas zu ändern."
+#: .\contrib\admin\templates\registration\password_change_done.html.py:6
+#: .\contrib\admin\templates\registration\password_change_done.html.py:10
+msgid "Password change successful"
+msgstr "Passwort erfolgreich geändert"
 
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Kürzliche Aktionen"
+#: .\contrib\admin\templates\registration\password_change_done.html.py:12
+msgid "Your password was changed."
+msgstr "Ihr Passwort wurde geändert."
 
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Meine Aktionen"
+#: .\contrib\admin\templates\registration\password_change_form.html.py: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 "Bitte geben Sie aus Sicherheitsgründen erst Ihr altes Passwort und darunter dann zweimal (um sicherzustellen, dass Sie es korrekt eingegeben haben) das neue Kennwort ein."
 
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Keine vorhanden"
+#: .\contrib\admin\templates\registration\password_change_form.html.py:17
+msgid "Old password:"
+msgstr "Altes Passwort:"
 
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s zufügen"
+#: .\contrib\admin\templates\registration\password_change_form.html.py:19
+msgid "New password:"
+msgstr "Neues Passwort:"
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Haben Sie <a href=\"/password_reset/\">ihr Passwort vergessen</a>?"
+#: .\contrib\admin\templates\registration\password_change_form.html.py:21
+msgid "Confirm password:"
+msgstr "Passwort wiederholen:"
 
-#: contrib/admin/templates/admin/base.html:23
-msgid "Welcome,"
-msgstr "Willkommen,"
+#: .\contrib\admin\templates\registration\password_change_form.html.py:23
+msgid "Change my password"
+msgstr "Mein Passwort ändern"
 
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Löschen"
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:6
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:10
+msgid "Password reset"
+msgstr "Passwort zurücksetzen"
 
-#: contrib/admin/templates/admin/delete_confirmation.html:14
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:6
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:10
+msgid "Password reset successful"
+msgstr "Passwort wurde erfolgreich zurückgesetzt"
+
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:12
+msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Wir haben ein neues Passwort an die von Ihnen angegebene E-Mail-Adresse geschickt. Sie sollten es in Kürze erhalten."
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Sie erhalten diese E-Mail, weil Sie ein neues Passwort"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:3
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr ""
-"Die Löschung des %(object_name)s '%(object)s' hätte die Löschung von "
-"abhängigen Daten zur Folge, aber Sie haben nicht die nötigen Rechte um die "
-"folgenden abhängigen Daten zu löschen:"
+msgid "for your user account at %(site_name)s"
+msgstr "für Ihren Benutzer bei %(site_name)s angefordert haben."
 
-#: contrib/admin/templates/admin/delete_confirmation.html:21
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:5
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"Sind Sie sicher, das Sie %(object_name)s \"%(object)s\" löschen wollen? Es "
-"werden zusätzlich die folgenden abhängigen Daten mit gelöscht:"
+msgid "Your new password is: %(new_password)s"
+msgstr "Ihr neues Passwort lautet: %(new_password)s"
 
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "Ja, ich bin sicher"
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:7
+msgid "Feel free to change this password by going to this page:"
+msgstr "Sie können das Passwort auf folgender Seite ändern:"
 
-#: contrib/admin/templates/admin/filter.html:2
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Ihr Benutzername, falls Sie ihn vergessen haben:"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:13
+msgid "Thanks for using our site!"
+msgstr "Vielen Dank, dass Sie unsere Seiten benutzen!"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:15
 #, python-format
-msgid " By %(title)s "
-msgstr " Nach %(title)s "
+msgid "The %(site_name)s team"
+msgstr "Das Team von %(site_name)s"
 
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Los"
+#: .\contrib\admin\templates\registration\password_reset_form.html.py: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 "Passwort vergessen? Einfach die E-Mail-Adresse eingeben und wir setzen das Passwort zurück und lassen es Ihnen per E-Mail zukommen."
 
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Im Web Anzeigen"
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
+msgid "E-mail address:"
+msgstr "E-Mail-Adresse:"
 
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Bitte den Fehler korrigieren."
-msgstr[1] "Bitte die Fehler korrigieren."
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
+msgid "Reset my password"
+msgstr "Mein Passwort zurücksetzen"
 
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "Sortierung"
+#: .\contrib\admin\templates\widget\date_time.html.py:3
+msgid "Date:"
+msgstr "Datum:"
 
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "Reihenfolge:"
+#: .\contrib\admin\templates\widget\date_time.html.py:4
+msgid "Time:"
+msgstr "Zeit:"
 
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Als Neu sichern"
+#: .\contrib\admin\templates\widget\file.html.py:2
+msgid "Currently:"
+msgstr "Derzeit:"
 
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Sichern und neu hinzufügen"
+#: .\contrib\admin\templates\widget\file.html.py:3
+msgid "Change:"
+msgstr "Ändern:"
 
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Sichern und weiter bearbeiten"
+#: .\contrib\admin\templatetags\admin_list.py:238
+msgid "All dates"
+msgstr "Alle Tage"
 
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Sichern"
+#: .\contrib\admin\views\auth.py:19
+#: .\contrib\admin\views\main.py:257
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt."
 
-#: 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 "Kennwort ändern"
+#: .\contrib\admin\views\auth.py:24
+#: .\contrib\admin\views\main.py:261
+#: .\contrib\admin\views\main.py:347
+msgid "You may edit it again below."
+msgstr "Das Element kann jetzt weiter bearbeitet werden."
 
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Kennwortänderung erfolgreich"
+#: .\contrib\admin\views\auth.py:30
+msgid "Add user"
+msgstr "Benutzer hinzufügen"
 
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Ihr Kennwort wurde geändert."
+#: .\contrib\admin\views\auth.py:57
+msgid "Password changed successfully."
+msgstr "Passwort erfolgreich geändert."
 
-#: 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 "Kennwort zurücksetzen"
+#: .\contrib\admin\views\auth.py:64
+#, python-format
+msgid "Change password: %s"
+msgstr "Passwort ändern: %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 ""
-"Passwort vergessen? Einfach die E-Mail-Adresse eingeben und wir setzen das "
-"Passwort auf ein neues und senden das per E-Mail zu."
+#: .\contrib\admin\views\decorators.py:10
+#: .\contrib\auth\forms.py:59
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Bitte einen Benutzernamen und ein Passwort eingeben. Beide Felder berücksichtigen die Groß-/Kleinschreibung."
 
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "E-Mail-Adresse:"
+#: .\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 "Bitte neu anmelden, da die Session ausgelaufen ist. Keine Angst, die Beiträge wurden gesichert."
 
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Mein Kennwort zurücksetzen"
+#: .\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 "Es sieht danach aus, dass der Browser keine Cookies akzeptiert. Bitte im Browser Cookies aktivieren und diese Seite neu laden."
 
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Vielen Dank, daß Sie hier ein paar nette Minuten verbracht haben."
+#: .\contrib\admin\views\decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Benutzernamen dürfen das Zeichen '@' nicht enthalten."
 
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Erneut Anmelden"
+#: .\contrib\admin\views\decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "Die E-Mail-Adresse entspricht nicht Ihrem Benutzernamen. Bitte stattdessen '%s' versuchen."
 
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Erfolgreich Kennwort zurückgesetzt"
+#: .\contrib\admin\views\doc.py:46
+#: .\contrib\admin\views\doc.py:48
+#: .\contrib\admin\views\doc.py:50
+msgid "tag:"
+msgstr "Schlagwort:"
 
-#: 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 ""
-"Wir haben Ihnen ein neues Kennwort per eMail zugeschickt an die Adresse, die "
-"Sie uns gegeben haben. Es sollte in Kürze ankommen."
+#: .\contrib\admin\views\doc.py:77
+#: .\contrib\admin\views\doc.py:79
+#: .\contrib\admin\views\doc.py:81
+msgid "filter:"
+msgstr "Filter:"
 
-#: 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 ""
-"Bitte geben Sie aus Sicherheitsgründen erst Ihr altes Kennwort und darunter "
-"dann zweimal (um sicherzustellen, das Sie es korrekt eingegeben haben) das "
-"neue Kennwort ein."
+#: .\contrib\admin\views\doc.py:135
+#: .\contrib\admin\views\doc.py:137
+#: .\contrib\admin\views\doc.py:139
+msgid "view:"
+msgstr "Ansicht:"
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "altes Kennwort:"
+#: .\contrib\admin\views\doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "Anwendung %r nicht gefunden"
 
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "neues Kennwort:"
+#: .\contrib\admin\views\doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "Modell %r wurde nicht in Anwendung %r gefunden"
 
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Kennwortwiederholung:"
+#: .\contrib\admin\views\doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "Das verknüpfte `%s.%s` Objekt"
 
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Mein Kennwort ändern"
+#: .\contrib\admin\views\doc.py:183
+#: .\contrib\admin\views\doc.py:205
+#: .\contrib\admin\views\doc.py:219
+#: .\contrib\admin\views\doc.py:224
+msgid "model:"
+msgstr "Modell:"
 
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Sie erhalten diese Mail, weil Sie ein neues Kennwort"
+#: .\contrib\admin\views\doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "verknüpftes `%s.%s` Objekt"
 
-#: contrib/admin/templates/registration/password_reset_email.html:3
+#: .\contrib\admin\views\doc.py:219
 #, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "für ihren Benutzer bei %(site_name)s angefordert haben."
+msgid "all %s"
+msgstr "Alle %s"
 
-#: contrib/admin/templates/registration/password_reset_email.html:5
+#: .\contrib\admin\views\doc.py:224
 #, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "Ihr neues Kennwort ist: %(new_password)s"
+msgid "number of %s"
+msgstr "Anzahl von %s"
 
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Sie können das Kennwort auf folgender Seite ändern:"
+#: .\contrib\admin\views\doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Felder am %s Objekt"
 
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Ihr Benutzername, falls Sie ihn vergessen haben:"
+#: .\contrib\admin\views\doc.py:291
+#: .\contrib\admin\views\doc.py:301
+#: .\contrib\admin\views\doc.py:303
+#: .\contrib\admin\views\doc.py:309
+#: .\contrib\admin\views\doc.py:310
+#: .\contrib\admin\views\doc.py:312
+msgid "Integer"
+msgstr "Ganzzahl"
 
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Vielen Dank, das Sie unsere Seiten benutzen!"
+#: .\contrib\admin\views\doc.py:292
+msgid "Boolean (Either True or False)"
+msgstr "Boolscher Wert (True oder False)"
 
-#: contrib/admin/templates/registration/password_reset_email.html:15
+#: .\contrib\admin\views\doc.py:293
+#: .\contrib\admin\views\doc.py:311
 #, python-format
-msgid "The %(site_name)s team"
-msgstr "Das Team von %(site_name)s"
+msgid "String (up to %(maxlength)s)"
+msgstr "Zeichenkette (bis zu %(maxlength)s Zeichen)"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
+#: .\contrib\admin\views\doc.py:294
+msgid "Comma-separated integers"
+msgstr "Kommaseparierte Liste von Ganzzahlen"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "Dokumentations-Bookmarklets"
+#: .\contrib\admin\views\doc.py:295
+msgid "Date (without time)"
+msgstr "Datum (ohne Uhrzeit)"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
-msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site.  Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">Um Bookmarklets zu installieren müssen diese Links in die\n"
-"Browser-Werkzeugleiste gehzogen werden, oder mittels rechter Maustaste in "
-"die\n"
-"Bookmarks gespeichert werden. Danach können die Bookmarklets von jeder "
-"Seite\n"
-"aufgerufen werden. Einige Bookmarklets sind für den Zugriff von 'internen'\n"
-"Rechnern eingeschränkt. Falls nicht klar ist, ob ein Rechner als 'intern'\n"
-"bewertet wird, bitte den Administrator fragen.</p>\n"
+#: .\contrib\admin\views\doc.py:296
+msgid "Date (with time)"
+msgstr "Datum (mit Uhrzeit)"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "Dokumentation für diese Seite"
+#: .\contrib\admin\views\doc.py:297
+msgid "E-mail address"
+msgstr "E-Mail-Adresse"
 
-#: 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 ""
-"Springt von jeder Seite zu der Dokumentation für den View der diese Seite "
-"erzeugt."
+#: .\contrib\admin\views\doc.py:298
+#: .\contrib\admin\views\doc.py:299
+#: .\contrib\admin\views\doc.py:302
+msgid "File path"
+msgstr "Dateipfad"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "Objekt ID anzeigen"
+#: .\contrib\admin\views\doc.py:300
+msgid "Decimal number"
+msgstr "Dezimalzahl"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Zeigt den Content-Type und die eindeutige ID für Seiten die ein einzelnes "
-"Objekt repräsentieren."
+#: .\contrib\admin\views\doc.py:304
+#: .\contrib\comments\models.py:85
+msgid "IP address"
+msgstr "IP-Adresse"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "Dieses Objekt im aktuellen Fenster ändern."
+#: .\contrib\admin\views\doc.py:306
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolscher Wert (True, False oder None)"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Springt zu der Administrationsseite für dieses Objekt, wenn diese Seite ein "
-"Objekt repräsentiert."
+#: .\contrib\admin\views\doc.py:307
+msgid "Relation to parent model"
+msgstr "Beziehung zum Eltern-Modell"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "Dieses Objekt in einem neuen Fenster ändern."
+#: .\contrib\admin\views\doc.py:308
+msgid "Phone number"
+msgstr "Telefonnummer"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Wie zuvor, aber öffnent die Administrationsseite in einem neuen Fenster."
+#: .\contrib\admin\views\doc.py:313
+msgid "Text"
+msgstr "Text"
 
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Datum:"
+#: .\contrib\admin\views\doc.py:314
+msgid "Time"
+msgstr "Zeit"
 
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Zeit:"
+#: .\contrib\admin\views\doc.py:315
+#: .\contrib\flatpages\models.py:7
+msgid "URL"
+msgstr "Adresse (URL)"
 
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Derzeit:"
+#: .\contrib\admin\views\doc.py:316
+msgid "U.S. state (two uppercase letters)"
+msgstr "U.S. Bundesstaat (zwei Großbuchstaben)"
 
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Ändern:"
+#: .\contrib\admin\views\doc.py:317
+msgid "XML text"
+msgstr "XML-Text"
 
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "Umleitung von"
+#: .\contrib\admin\views\doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s ist scheinbar kein urlpattern Objekt"
 
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: '/"
-"events/search/'."
+#: .\contrib\admin\views\main.py:223
+msgid "Site administration"
+msgstr "Website Verwaltung"
 
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "Umleitung zu"
+#: .\contrib\admin\views\main.py:271
+#: .\contrib\admin\views\main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr "Jetzt kann ein weiteres Element vom Typ %s angelegt werden."
 
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Hier muss entweder ein absoluter Pfad oder eine komplette URL mit http:// am "
-"Anfang stehen."
+#: .\contrib\admin\views\main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "%s hinzufügen"
 
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "Umleitung"
+#: .\contrib\admin\views\main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "%s hinzugefügt."
 
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "Umleitungen"
+#: .\contrib\admin\views\main.py:335
+#: .\contrib\admin\views\main.py:337
+#: .\contrib\admin\views\main.py:339
+#: .\db\models\manipulators.py:306
+msgid "and"
+msgstr "und"
 
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Beispiel: '/about/contact/'. Wichtig: vorne und hinten muss ein / stehen."
+#: .\contrib\admin\views\main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "%s geändert"
 
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "Titel"
+#: .\contrib\admin\views\main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "%s gelöscht."
 
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "Inhalt"
+#: .\contrib\admin\views\main.py:342
+msgid "No fields changed."
+msgstr "Keine Felder geändert."
 
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "Kommentare aktivieren"
+#: .\contrib\admin\views\main.py:345
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "%(name)s \"%(obj)s\" wurde erfolgreich geändert."
 
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "Name der Vorlage"
+#: .\contrib\admin\views\main.py:353
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt. Das Element kann jetzt geändert werden."
 
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Beispiel: 'flatpages/contact_page'. Wenn dieses Feld nicht gefüllt ist, wird "
-"'flatpages/default' als Standard gewählt."
+#: .\contrib\admin\views\main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "%s ändern"
 
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "Registrierung erforderlich"
+#: .\contrib\admin\views\main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s"
 
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Wenn hier ein Haken ist, können nur angemeldete Benutzer diese Seite sehen."
+#: .\contrib\admin\views\main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Ein oder mehrere %(fieldname)s in %(name)s:"
 
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "Webseite"
+#: .\contrib\admin\views\main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelöscht."
 
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "Webseiten"
+#: .\contrib\admin\views\main.py:514
+msgid "Are you sure?"
+msgstr "Sind Sie ganz sicher?"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: .\contrib\admin\views\main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "Änderungsgeschichte: %s"
+
+#: .\contrib\admin\views\main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "%s auswählen"
+
+#: .\contrib\admin\views\main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "%s zur Änderung auswählen"
+
+#: .\contrib\admin\views\main.py:758
+msgid "Database error"
+msgstr "Datenbankfehler"
+
+#: .\contrib\auth\forms.py:16
+#: .\contrib\auth\forms.py:137
+msgid "The two password fields didn't match."
+msgstr "Die beiden Passwörter sind nicht identisch."
+
+#: .\contrib\auth\forms.py:24
+msgid "A user with that username already exists."
+msgstr "Ein Benutzer mit diesem Namen existiert bereits."
+
+#: .\contrib\auth\forms.py:52
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind für die Anmeldung zwingend erforderlich."
+
+#: .\contrib\auth\forms.py:61
+msgid "This account is inactive."
+msgstr "Dieser Benutzer ist inaktiv."
+
+#: .\contrib\auth\forms.py:84
+msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
+msgstr "Zu dieser E-Mail-Adresse existiert kein Benutzer. Sicher, dass Sie sich mit dieser Adresse angemeldet haben?"
+
+#: .\contrib\auth\forms.py:116
+msgid "The two 'new password' fields didn't match."
+msgstr "Die beiden neuen Passwörter sind nicht identisch."
+
+#: .\contrib\auth\forms.py:123
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Das alte Passwort war falsch. Bitte neu eingeben."
+
+#: .\contrib\auth\models.py:38
+#: .\contrib\auth\models.py:57
 msgid "name"
 msgstr "Name"
 
-#: contrib/auth/models.py:15
+#: .\contrib\auth\models.py:40
 msgid "codename"
 msgstr "Codename"
 
-#: contrib/auth/models.py:17
+#: .\contrib\auth\models.py:42
 msgid "permission"
 msgstr "Berechtigung"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: .\contrib\auth\models.py:43
+#: .\contrib\auth\models.py:58
 msgid "permissions"
 msgstr "Berechtigungen"
 
-#: contrib/auth/models.py:29
+#: .\contrib\auth\models.py:60
 msgid "group"
 msgstr "Gruppe"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: .\contrib\auth\models.py:61
+#: .\contrib\auth\models.py:100
 msgid "groups"
 msgstr "Gruppen"
 
-#: contrib/auth/models.py:55
+#: .\contrib\auth\models.py:90
 msgid "username"
 msgstr "Benutzername"
 
-#: contrib/auth/models.py:56
+#: .\contrib\auth\models.py:90
+msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
+msgstr "Erforderlich. 30 Zeichen oder weniger. Alphanumerische Zeichen (Buchstaben, Ziffern und Unterstriche sind erlaubt)."
+
+#: .\contrib\auth\models.py:91
 msgid "first name"
 msgstr "Vorname"
 
-#: contrib/auth/models.py:57
+#: .\contrib\auth\models.py:92
 msgid "last name"
 msgstr "Nachname"
 
-#: contrib/auth/models.py:58
+#: .\contrib\auth\models.py:93
 msgid "e-mail address"
-msgstr "eMail-Adresse"
+msgstr "E-Mail-Adresse"
 
-#: contrib/auth/models.py:59
+#: .\contrib\auth\models.py:94
 msgid "password"
-msgstr "Kennwort"
+msgstr "Passwort"
 
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Im Format '[algo]$[salt]$[hexdigest]'"
+#: .\contrib\auth\models.py:94
+msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
+msgstr "Die Form '[algo]$[salt]$[hexdigest]' verwenden, oder das <a href=\"password/\">Passwort ändern Formular</a> benutzen."
 
-#: contrib/auth/models.py:60
+#: .\contrib\auth\models.py:95
 msgid "staff status"
 msgstr "Administrator"
 
-#: contrib/auth/models.py:60
+#: .\contrib\auth\models.py:95
 msgid "Designates whether the user can log into this admin site."
-msgstr ""
-"Gibt an, ob der Benutzer sich an der Administrationsseite anmelden kann."
+msgstr "Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann."
 
-#: contrib/auth/models.py:61
+#: .\contrib\auth\models.py:96
 msgid "active"
 msgstr "Aktiv"
 
-#: contrib/auth/models.py:62
+#: .\contrib\auth\models.py:96
+msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."
+msgstr "Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann. Anstatt einen Benutzer zu löschen, kann er hier auch einfach deaktiviert werden."
+
+#: .\contrib\auth\models.py:97
 msgid "superuser status"
 msgstr "Hauptadmin."
 
-#: contrib/auth/models.py:63
+#: .\contrib\auth\models.py:97
+msgid "Designates that this user has all permissions without explicitly assigning them."
+msgstr "Legt fest, dass der Benutzer alle Berechtigungen hat, ohne diese einzeln zuweisen zu müssen."
+
+#: .\contrib\auth\models.py:98
 msgid "last login"
-msgstr "letzte Anmeldung"
+msgstr "Letzte Anmeldung"
 
-#: contrib/auth/models.py:64
+#: .\contrib\auth\models.py:99
 msgid "date joined"
 msgstr "Mitglied seit"
 
-#: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Zusätzlich zu den manuell angelegten Rechten erhält dieser Benutzer auch "
-"alle Rechte, die seine zugewiesenen Gruppen haben."
+#: .\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 "Zusätzlich zu den manuell angelegten Rechten erhält dieser Benutzer auch alle Rechte, die seine zugewiesenen Gruppen haben."
 
-#: contrib/auth/models.py:67
+#: .\contrib\auth\models.py:102
 msgid "user permissions"
 msgstr "Berechtigungen"
 
-#: contrib/auth/models.py:70
+#: .\contrib\auth\models.py:105
 msgid "user"
 msgstr "Benutzer"
 
-#: contrib/auth/models.py:71
+#: .\contrib\auth\models.py:106
 msgid "users"
 msgstr "Benutzer"
 
-#: contrib/auth/models.py:76
+#: .\contrib\auth\models.py:111
 msgid "Personal info"
-msgstr "Persönliche Infos"
+msgstr "Persönliche Infos"
 
-#: contrib/auth/models.py:77
+#: .\contrib\auth\models.py:112
 msgid "Permissions"
 msgstr "Berechtigungen"
 
-#: contrib/auth/models.py:78
+#: .\contrib\auth\models.py:113
 msgid "Important dates"
 msgstr "Wichtige Daten"
 
-#: contrib/auth/models.py:79
+#: .\contrib\auth\models.py:114
 msgid "Groups"
 msgstr "Gruppen"
 
-#: contrib/auth/models.py:219
+#: .\contrib\auth\models.py:258
 msgid "message"
 msgstr "Mitteilung"
 
-#: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind für "
-"die Anmeldung zwingend notwendig."
+#: .\contrib\auth\views.py:39
+msgid "Logged out"
+msgstr "Abgemeldet"
 
-#: contrib/contenttypes/models.py:25
-msgid "python model class name"
-msgstr "Python Model-Klassenname"
+#: .\contrib\comments\models.py:67
+#: .\contrib\comments\models.py:166
+msgid "object ID"
+msgstr "Objekt-ID"
 
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "Inhaltstyp"
+#: .\contrib\comments\models.py:68
+msgid "headline"
+msgstr "Ãœberschrift"
 
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "Inhaltstypen"
+#: .\contrib\comments\models.py:69
+#: .\contrib\comments\models.py:90
+#: .\contrib\comments\models.py:167
+msgid "comment"
+msgstr "Kommentar"
 
-#: contrib/sessions/models.py:35
-msgid "session key"
-msgstr "Sitzungs-ID"
+#: .\contrib\comments\models.py:70
+msgid "rating #1"
+msgstr "Bewertung #1"
 
-#: contrib/sessions/models.py:36
-msgid "session data"
-msgstr "Sitzungsdaten"
+#: .\contrib\comments\models.py:71
+msgid "rating #2"
+msgstr "Bewertung #2"
 
-#: contrib/sessions/models.py:37
-msgid "expire date"
-msgstr "Verfallsdatum"
+#: .\contrib\comments\models.py:72
+msgid "rating #3"
+msgstr "Bewertung #3"
 
-#: contrib/sessions/models.py:41
-msgid "session"
-msgstr "Sitzung"
+#: .\contrib\comments\models.py:73
+msgid "rating #4"
+msgstr "Bewertung #4"
 
-#: contrib/sessions/models.py:42
-msgid "sessions"
-msgstr "Sitzungen"
+#: .\contrib\comments\models.py:74
+msgid "rating #5"
+msgstr "Bewertung #5"
 
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "Domainname"
+#: .\contrib\comments\models.py:75
+msgid "rating #6"
+msgstr "Bewertung #6"
 
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "Anzeigename"
+#: .\contrib\comments\models.py:76
+msgid "rating #7"
+msgstr "Bewertung #7"
 
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "Website"
+#: .\contrib\comments\models.py:77
+msgid "rating #8"
+msgstr "Bewertung #8"
 
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "Websites"
+#: .\contrib\comments\models.py:82
+msgid "is valid rating"
+msgstr "ist eine Bewertung"
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "j. N Y"
+#: .\contrib\comments\models.py:83
+#: .\contrib\comments\models.py:169
+msgid "date/time submitted"
+msgstr "Datum/Zeit Erstellung"
 
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "j. N Y, H:i"
+#: .\contrib\comments\models.py:84
+#: .\contrib\comments\models.py:170
+msgid "is public"
+msgstr "ist öffentlich"
 
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "H:i"
+#: .\contrib\comments\models.py:86
+msgid "is removed"
+msgstr "ist gelöscht"
 
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Montag"
+#: .\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 "Hier einen Haken setzen, wenn der Kommentar unpassend ist. Stattdessen wird dann \"Dieser Kommentar wurde entfernt\" Meldung angezeigt."
 
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Dienstag"
+#: .\contrib\comments\models.py:91
+msgid "comments"
+msgstr "Kommentare"
 
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Mittwoch"
+#: .\contrib\comments\models.py:131
+#: .\contrib\comments\models.py:207
+msgid "Content object"
+msgstr "Inhaltsobjekt"
 
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Donnerstag"
+#: .\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 ""
+"Geschrieben von %(user)s am %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
 
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Freitag"
+#: .\contrib\comments\models.py:168
+msgid "person's name"
+msgstr "Autorname"
 
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Samstag"
+#: .\contrib\comments\models.py:171
+msgid "ip address"
+msgstr "IP-Adresse"
 
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Sonntag"
+#: .\contrib\comments\models.py:173
+msgid "approved by staff"
+msgstr "Bestätigt vom Betreiber"
 
-#: utils/dates.py:14
-msgid "January"
-msgstr "Januar"
+#: .\contrib\comments\models.py:176
+msgid "free comment"
+msgstr "Freier Kommentar"
 
-#: utils/dates.py:14
-msgid "February"
-msgstr "Februar"
+#: .\contrib\comments\models.py:177
+msgid "free comments"
+msgstr "Freie Kommentare"
 
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "März"
+#: .\contrib\comments\models.py:233
+msgid "score"
+msgstr "Bewertung"
 
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "April"
+#: .\contrib\comments\models.py:234
+msgid "score date"
+msgstr "Bewertungsdatum"
 
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "Mai"
+#: .\contrib\comments\models.py:237
+msgid "karma score"
+msgstr "Karma Bewertung"
 
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "Juni"
+#: .\contrib\comments\models.py:238
+msgid "karma scores"
+msgstr "Karma Bewertungen"
 
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "Juli"
+#: .\contrib\comments\models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "%(score)d Bewertung von %(user)s"
 
-#: utils/dates.py:15
-msgid "August"
-msgstr "August"
+#: .\contrib\comments\models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Dieser Kommentar ist von %(user)s markiert:\n"
+"\n"
+"%(text)s"
 
-#: utils/dates.py:15
-msgid "September"
-msgstr "September"
+#: .\contrib\comments\models.py:265
+msgid "flag date"
+msgstr "Kennzeichnungsdatum"
 
-#: utils/dates.py:15
-msgid "October"
-msgstr "Oktober"
+#: .\contrib\comments\models.py:268
+msgid "user flag"
+msgstr "Benutzerkennzeichnung"
 
-#: utils/dates.py:15
-msgid "November"
-msgstr "November"
+#: .\contrib\comments\models.py:269
+msgid "user flags"
+msgstr "Benutzerkennzeichnungen"
 
-#: utils/dates.py:16
-msgid "December"
-msgstr "Dezember"
+#: .\contrib\comments\models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "Gekennzeichnet von %r"
 
-#: utils/dates.py:19
-msgid "jan"
-msgstr "Jan"
+#: .\contrib\comments\models.py:278
+msgid "deletion date"
+msgstr "Löschdatum"
 
-#: utils/dates.py:19
-msgid "feb"
-msgstr "Feb"
+#: .\contrib\comments\models.py:280
+msgid "moderator deletion"
+msgstr "Löschung vom Moderator"
 
-#: utils/dates.py:19
-msgid "mar"
-msgstr "Mär"
+#: .\contrib\comments\models.py:281
+msgid "moderator deletions"
+msgstr "Löschungen vom Moderator"
 
-#: utils/dates.py:19
-msgid "apr"
-msgstr "Apr"
+#: .\contrib\comments\models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "Vom Moderator %r gelöscht"
 
-#: utils/dates.py:19
-msgid "may"
-msgstr "Mai"
+#: .\contrib\comments\templates\comments\form.html.py:8
+msgid "Forgotten your password?"
+msgstr "Passwort vergessen?"
 
-#: utils/dates.py:19
-msgid "jun"
-msgstr "Jun"
+#: .\contrib\comments\templates\comments\form.html.py:12
+msgid "Ratings"
+msgstr "Bewertungen"
 
-#: utils/dates.py:20
-msgid "jul"
-msgstr "Jul"
+#: .\contrib\comments\templates\comments\form.html.py:12
+#: .\contrib\comments\templates\comments\form.html.py:23
+msgid "Required"
+msgstr "Erforderlich"
 
-#: utils/dates.py:20
-msgid "aug"
-msgstr "Aug"
+#: .\contrib\comments\templates\comments\form.html.py:12
+#: .\contrib\comments\templates\comments\form.html.py:23
+msgid "Optional"
+msgstr "Optional"
 
-#: utils/dates.py:20
-msgid "sep"
-msgstr "Sep"
+#: .\contrib\comments\templates\comments\form.html.py:23
+msgid "Post a photo"
+msgstr "Ein Bild veröffentlichen"
 
-#: utils/dates.py:20
-msgid "oct"
-msgstr "Okt"
+#: .\contrib\comments\templates\comments\form.html.py:28
+#: .\contrib\comments\templates\comments\freeform.html.py:5
+msgid "Comment:"
+msgstr "Kommentar:"
 
-#: utils/dates.py:20
-msgid "nov"
-msgstr "Nov"
+#: .\contrib\comments\templates\comments\form.html.py:35
+#: .\contrib\comments\templates\comments\freeform.html.py:10
+msgid "Preview comment"
+msgstr "Kommentarvorschau"
 
-#: utils/dates.py:20
-msgid "dec"
-msgstr "Dez"
+#: .\contrib\comments\templates\comments\freeform.html.py:4
+msgid "Your name:"
+msgstr "Ihr Name:"
 
-#: utils/dates.py:27
-msgid "Jan."
-msgstr "Jan."
+#: .\contrib\comments\views\comments.py:27
+msgid "This rating is required because you've entered at least one other rating."
+msgstr "Diese Abstimmung ist zwingend erforderlich, da Du an mindestens einer weiteren Abstimmung teilnimmst."
 
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "Feb."
+#: .\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] ""
+"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s Kommentar:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Dieser Kommentar ist von einem Benutzer mit weniger als %(count)s Kommentaren:\n"
+"\n"
+"%(text)s"
 
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "Aug."
+#: .\contrib\comments\views\comments.py:116
+#, python-format
+msgid ""
+"This comment was posted by a sketchy user:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Dieser Kommentar ist von einem nicht einschätzbaren Benutzer:\n"
+"\n"
+"%(text)s"
 
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "Sept."
+#: .\contrib\comments\views\comments.py:188
+#: .\contrib\comments\views\comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Nur POST ist erlaubt"
 
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "Okt."
+#: .\contrib\comments\views\comments.py:192
+#: .\contrib\comments\views\comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Eines oder mehrere der erforderlichen Felder fehlen"
 
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "Nov."
+#: .\contrib\comments\views\comments.py:196
+#: .\contrib\comments\views\comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr "Jemand hat mit dem Kommentarformular herumgespielt (Sicherheitsverletzung)"
 
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "Dez."
+#: .\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 "Das Kommentarformular hatte einen falschen 'target' Parameter -- die Objekt-ID ist ungültig."
 
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "Jahr"
-msgstr[1] "Jahre"
+#: .\contrib\comments\views\comments.py:257
+#: .\contrib\comments\views\comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr "Das Kommentarformular wurde nicht mit 'preview' oder 'post' abgeschickt"
 
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "Monat"
-msgstr[1] "Monate"
+#: .\contrib\comments\views\karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Anonyme Benutzer dürfen nicht abstimmen"
 
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "Woche"
-msgstr[1] "Wochen"
+#: .\contrib\comments\views\karma.py:23
+msgid "Invalid comment ID"
+msgstr "Ungültige Kommentar-ID"
 
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "Tag"
-msgstr[1] "Tage"
+#: .\contrib\comments\views\karma.py:25
+msgid "No voting for yourself"
+msgstr "Keine Abstimmung für dich selbst"
 
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "Stunde"
-msgstr[1] "Stunden"
+#: .\contrib\contenttypes\models.py:26
+msgid "python model class name"
+msgstr "Python Model-Klassenname"
 
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "Minute"
-msgstr[1] "Minuten"
+#: .\contrib\contenttypes\models.py:29
+msgid "content type"
+msgstr "Inhaltstyp"
 
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "Bengali"
+#: .\contrib\contenttypes\models.py:30
+msgid "content types"
+msgstr "Inhaltstypen"
 
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "Tschechisch"
+#: .\contrib\flatpages\models.py:8
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Beispiel: '/about/contact/'. Wichtig: vorne und hinten muss ein / stehen."
 
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "Walisisch"
+#: .\contrib\flatpages\models.py:9
+msgid "title"
+msgstr "Titel"
 
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "Dänisch"
+#: .\contrib\flatpages\models.py:10
+msgid "content"
+msgstr "Inhalt"
 
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "Deutsch"
+#: .\contrib\flatpages\models.py:11
+msgid "enable comments"
+msgstr "Kommentare aktivieren"
 
-#: conf/global_settings.py:42
-msgid "Greek"
-msgstr "Griechisch"
+#: .\contrib\flatpages\models.py:12
+msgid "template name"
+msgstr "Name der Vorlage"
 
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "Englisch"
+#: .\contrib\flatpages\models.py:13
+msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
+msgstr "Beispiel: 'flatpages/contact_page.html'. Wenn dieses Feld nicht gefüllt ist, wird 'flatpages/default.html' als Standard gewählt."
 
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "Spanisch"
+#: .\contrib\flatpages\models.py:14
+msgid "registration required"
+msgstr "Registrierung erforderlich"
 
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "Französisch"
+#: .\contrib\flatpages\models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Wenn hier ein Haken gesetzt ist, können nur angemeldete Benutzer diese Seite sehen."
 
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "Galicisch"
+#: .\contrib\flatpages\models.py:18
+msgid "flat page"
+msgstr "Webseite"
 
-#: conf/global_settings.py:47
-msgid "Hungarian"
-msgstr ""
+#: .\contrib\flatpages\models.py:19
+msgid "flat pages"
+msgstr "Webseiten"
 
-#: conf/global_settings.py:48
-msgid "Hebrew"
-msgstr "Hebräisch"
+#: .\contrib\redirects\models.py:7
+msgid "redirect from"
+msgstr "Umleitung von"
 
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "Isländisch"
+#: .\contrib\redirects\models.py:8
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: '/events/search/'."
 
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "Italienisch"
+#: .\contrib\redirects\models.py:9
+msgid "redirect to"
+msgstr "Umleitung zu"
 
-#: conf/global_settings.py:51
-msgid "Japanese"
-msgstr "Japanisch"
+#: .\contrib\redirects\models.py:10
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgstr "Hier muss entweder ein absoluter Pfad oder eine komplette URL mit http:// am Anfang stehen."
 
-#: conf/global_settings.py:52
-msgid "Dutch"
-msgstr "Holländisch"
+#: .\contrib\redirects\models.py:13
+msgid "redirect"
+msgstr "Umleitung"
 
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "Norwegisch"
+#: .\contrib\redirects\models.py:14
+msgid "redirects"
+msgstr "Umleitungen"
 
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "Brasilianisch"
+#: .\contrib\sessions\models.py:51
+msgid "session key"
+msgstr "Sitzungs-ID"
 
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "Rumänisch"
+#: .\contrib\sessions\models.py:52
+msgid "session data"
+msgstr "Sitzungsdaten"
 
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "Russisch"
+#: .\contrib\sessions\models.py:53
+msgid "expire date"
+msgstr "Verfallsdatum"
 
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "Slowakisch"
+#: .\contrib\sessions\models.py:57
+msgid "session"
+msgstr "Sitzung"
 
-#: conf/global_settings.py:58
-msgid "Slovenian"
-msgstr "Slowenisch"
+#: .\contrib\sessions\models.py:58
+msgid "sessions"
+msgstr "Sitzungen"
 
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "Serbisch"
+#: .\contrib\sites\models.py:10
+msgid "domain name"
+msgstr "Domainname"
 
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "Schwedisch"
+#: .\contrib\sites\models.py:11
+msgid "display name"
+msgstr "Anzeigename"
 
-#: conf/global_settings.py:61
-msgid "Ukrainian"
-msgstr "Ukrainisch"
+#: .\contrib\sites\models.py:15
+msgid "site"
+msgstr "Website"
 
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "Vereinfachtes Chinesisch"
+#: .\contrib\sites\models.py:16
+msgid "sites"
+msgstr "Websites"
 
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr "Traditionelles Chinesisch"
-
-#: core/validators.py:60
+#: .\core\validators.py:64
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten."
 
-#: core/validators.py:64
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrägstriche "
-"enthalten."
+#: .\core\validators.py:68
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgstr "Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Schrägstriche enthalten."
 
-#: core/validators.py:72
+#: .\core\validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Dieser Wert darf nur Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten."
+
+#: .\core\validators.py:76
 msgid "Uppercase letters are not allowed here."
-msgstr "Großbuchstaben sind hier nicht erlaubt."
+msgstr "Großbuchstaben sind hier nicht erlaubt."
 
-#: core/validators.py:76
+#: .\core\validators.py:80
 msgid "Lowercase letters are not allowed here."
 msgstr "Kleinbuchstaben sind hier nicht erlaubt."
 
-#: core/validators.py:83
+#: .\core\validators.py:87
 msgid "Enter only digits separated by commas."
 msgstr "Hier sind nur durch Komma getrennte Ziffern erlaubt."
 
-#: core/validators.py:95
+#: .\core\validators.py:99
 msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Bitte mit Komma getrennte, gültige eMail-Adressen eingeben."
+msgstr "Bitte mit Komma getrennte, gültige E-Mail-Adressen eingeben."
 
-#: core/validators.py:99
+#: .\core\validators.py:103
 msgid "Please enter a valid IP address."
-msgstr "Bitte eine gültige IP-Adresse eingeben."
+msgstr "Bitte eine gültige IP-Adresse eingeben."
 
-#: core/validators.py:103
+#: .\core\validators.py:107
 msgid "Empty values are not allowed here."
 msgstr "Dieses Feld darf nicht leer sein."
 
-#: core/validators.py:107
+#: .\core\validators.py:111
 msgid "Non-numeric characters aren't allowed here."
 msgstr "Nichtnumerische Zeichen sind hier nicht erlaubt."
 
-#: core/validators.py:111
+#: .\core\validators.py:115
 msgid "This value can't be comprised solely of digits."
 msgstr "Dieser Wert darf nicht nur aus Ziffern bestehen."
 
-#: core/validators.py:116
+#: .\core\validators.py:120
+#: .\newforms\fields.py:126
 msgid "Enter a whole number."
 msgstr "Bitte eine ganze Zahl eingeben."
 
-#: core/validators.py:120
+#: .\core\validators.py:124
 msgid "Only alphabetical characters are allowed here."
 msgstr "Nur alphabetische Zeichen sind hier erlaubt."
 
-#: core/validators.py:124
+#: .\core\validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "Das Jahr muss 1900 oder später sein."
+
+#: .\core\validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Ungültiges Datum: %s"
+
+#: .\core\validators.py:147
+#: .\db\models\fields\__init__.py:448
 msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben."
+msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben."
 
-#: core/validators.py:128
+#: .\core\validators.py:152
 msgid "Enter a valid time in HH:MM format."
-msgstr "Bitte eine gültige Zeit im Format SS:MM eingeben."
+msgstr "Bitte eine gültige Zeit im Format SS:MM eingeben."
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: .\core\validators.py:156
+#: .\db\models\fields\__init__.py:515
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr ""
-"Bitte eine gültige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM "
-"eingeben."
+msgstr "Bitte eine gültige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM eingeben."
 
-#: core/validators.py:136
+#: .\core\validators.py:161
+#: .\newforms\fields.py:269
 msgid "Enter a valid e-mail address."
-msgstr "Bitte eine gültige eMail-Adresse eingeben"
+msgstr "Bitte eine gültige E-Mail-Adresse eingeben."
 
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Bitte ein Bild hochladen. Die Datei, die hochgeladen wurde, ist kein Bild "
-"oder ist defekt."
+#: .\core\validators.py:173
+#: .\core\validators.py:442
+#: .\oldforms\__init__.py:667
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Es wurde keine Datei übermittelt. Eventuell ist das Formular-Encoding falsch."
 
-#: core/validators.py:155
+#: .\core\validators.py:177
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Bitte ein Bild hochladen. Die hochgeladene Datei ist kein Bild, oder ist defekt."
+
+#: .\core\validators.py:184
 #, python-format
 msgid "The URL %s does not point to a valid image."
-msgstr "Die URL %s zeigt nicht auf ein gültiges Bild."
+msgstr "Die URL %s zeigt nicht auf ein gültiges Bild."
 
-#: core/validators.py:159
+#: .\core\validators.py:188
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Telefonnummern müssen im Format XXX-XXX-XXXX sein. \"%s\" ist ungültig."
+msgstr "Telefonnummern müssen das Format XXX-XXX-XXXX haben. \"%s\" ist ungültig."
 
-#: core/validators.py:167
+#: .\core\validators.py:196
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "Die URL %s zeigt nicht auf ein gültiges QuickTime video."
+msgstr "Die URL %s zeigt nicht auf ein gültiges QuickTime-Video."
 
-#: core/validators.py:171
+#: .\core\validators.py:200
 msgid "A valid URL is required."
-msgstr "Eine gültige URL ist hier verlangt."
+msgstr "Eine gültige URL wird hier verlangt."
 
-#: core/validators.py:185
+#: .\core\validators.py:214
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
-"Bitte gültiges HTML eingeben. Fehler sind:\n"
+"Bitte gültiges HTML eingeben. Fehler sind:\n"
 "%s"
 
-#: core/validators.py:192
+#: .\core\validators.py:221
 #, python-format
 msgid "Badly formed XML: %s"
-msgstr "Ungültiges XML: %s"
+msgstr "Ungültiges XML: %s"
 
-#: core/validators.py:202
+#: .\core\validators.py:238
 #, python-format
 msgid "Invalid URL: %s"
-msgstr "Ungültige URL: %s"
+msgstr "Ungültige URL: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: .\core\validators.py:243
+#: .\core\validators.py:245
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr "Die URL %s funktioniert nicht."
 
-#: core/validators.py:214
+#: .\core\validators.py:251
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "Bitte eine gültige Abkürzung für einen US-Staat eingeben."
+msgstr "Bitte eine gültige Abkürzung für einen US-Staat eingeben."
 
-#: core/validators.py:229
+#: .\core\validators.py:265
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Keine Schimpfworte! Das Wort %s ist hier nicht gern gesehen!"
-msgstr[1] "Keine Schimpfworte! Die Wörter %s sind hier nicht gern gesehen!"
+msgstr[1] "Keine Schimpfworte! Die Wörter %s sind hier nicht gern gesehen!"
 
-#: core/validators.py:236
+#: .\core\validators.py:272
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr "Dieses Feld muss zum Feld '%s' passen."
 
-#: core/validators.py:255
+#: .\core\validators.py:291
 msgid "Please enter something for at least one field."
-msgstr "Bitte mindestens eines der Felder ausfüllen."
+msgstr "Bitte mindestens eines der Felder ausfüllen."
 
-#: core/validators.py:264 core/validators.py:275
+#: .\core\validators.py:300
+#: .\core\validators.py:311
 msgid "Please enter both fields or leave them both empty."
-msgstr "Bitte entweder beide Felder ausfüllen, oder beide leer lassen."
+msgstr "Bitte entweder beide Felder ausfüllen, oder beide leer lassen."
 
-#: core/validators.py:282
+#: .\core\validators.py:318
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr ""
-"Dieses Feld muss gefüllt sein, wenn Feld %(field)s den Wert %(value)s hat."
+msgstr "Dieses Feld muss gefüllt sein, wenn Feld %(field)s den Wert %(value)s hat."
 
-#: core/validators.py:294
+#: .\core\validators.py:330
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr ""
-"Dieses Feld muss gefüllt sein, wenn Feld %(field)s nicht %(value)s ist."
+msgstr "Dieses Feld muss gefüllt sein, wenn Feld %(field)s nicht %(value)s ist."
 
-#: core/validators.py:313
+#: .\core\validators.py:349
 msgid "Duplicate values are not allowed."
 msgstr "Doppelte Werte sind hier nicht erlaubt."
 
-#: core/validators.py:336
+#: .\core\validators.py:364
 #, python-format
+msgid "This value must be between %s and %s."
+msgstr "Dieser Wert muss zwischen %s und %s sein."
+
+#: .\core\validators.py:366
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Dieser Wert muss mindestens %s sein."
+
+#: .\core\validators.py:368
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "Dieser Wert darf maximal %s sein."
+
+#: .\core\validators.py:404
+#, python-format
 msgid "This value must be a power of %s."
 msgstr "Dieser Wert muss eine Potenz von %s sein."
 
-#: core/validators.py:347
+#: .\core\validators.py:415
 msgid "Please enter a valid decimal number."
-msgstr "Bitte eine gültige Dezimalzahl eingeben."
+msgstr "Bitte eine gültige Dezimalzahl eingeben."
 
-#: core/validators.py:349
+#: .\core\validators.py:419
 #, 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] "Bitte eine gültige Dezimalzahl mit maximal %s Ziffer eingeben."
-msgstr[1] "Bitte eine gültige Dezimalzahl mit maximal %s Ziffern eingeben."
+msgid_plural "Please enter a valid decimal number with at most %s total digits."
+msgstr[0] "Bitte eine gültige Dezimalzahl mit maximal %s Ziffer eingeben."
+msgstr[1] "Bitte eine gültige Dezimalzahl mit maximal %s Ziffern eingeben."
 
-#: core/validators.py:352
+#: .\core\validators.py:422
 #, python-format
+msgid "Please enter a valid decimal number with a whole part of at most %s digit."
+msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr[0] "Bitte eine gültige Dezimalzahl mit einer Gesamtzahl von maximal %s Ziffer eingeben."
+msgstr[1] "Bitte eine gültige Dezimalzahl mit einer Gesamtzahl von maximal %s Ziffern eingeben."
+
+#: .\core\validators.py:425
+#, 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] ""
-"Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstelle  eingeben."
-msgstr[1] ""
-"Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstellen eingeben."
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] "Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstelle eingeben."
+msgstr[1] "Bitte eine gültige Dezimalzahl mit maximal %s Dezimalstellen eingeben."
 
-#: core/validators.py:362
+#: .\core\validators.py:435
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr ""
-"Bitte sicherstellen, daß die hochgeladene Datei mindestens %s Bytes gross "
-"ist."
+msgstr "Bitte sicherstellen, dass die hochgeladene Datei mindestens %s Bytes groß ist."
 
-#: core/validators.py:363
+#: .\core\validators.py:436
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr ""
-"Bitte sicherstellen, daß die hochgeladene Datei maximal %s Bytes gross ist."
+msgstr "Bitte sicherstellen, dass die hochgeladene Datei maximal %s Bytes groß ist."
 
-#: core/validators.py:376
+#: .\core\validators.py:453
 msgid "The format for this field is wrong."
-msgstr "Das Format für dieses Feld ist falsch."
+msgstr "Das Format für dieses Feld ist falsch."
 
-#: core/validators.py:391
+#: .\core\validators.py:468
 msgid "This field is invalid."
-msgstr "Dieses Feld ist ungültig."
+msgstr "Dieses Feld ist ungültig."
 
-#: core/validators.py:426
+#: .\core\validators.py:504
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr "Konnte nichts von %s empfangen."
 
-#: core/validators.py:429
+#: .\core\validators.py:507
 #, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr "Die URL %(url)s lieferte den falschen Content-Type '%(contenttype)s'."
 
-#: core/validators.py:462
+#: .\core\validators.py:540
 #, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schließen. Die Zeile "
-"beginnt mit \"%(start)s\"."
+msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
+msgstr "Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schließen. Die Zeile beginnt mit \"%(start)s\"."
 
-#: core/validators.py:466
+#: .\core\validators.py:544
 #, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile "
-"beginnt mit \"%(start)s\"."
+msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
+msgstr "In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile beginnt mit \"%(start)s\"."
 
-#: core/validators.py:471
+#: .\core\validators.py:549
 #, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"Das Attribute %(attr)s in Zeile %(line)s ist ungültig. Die Zeile beginnt mit "
-"\"%(start)s\"."
+msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
+msgstr "Das Attribute %(attr)s in Zeile %(line)s ist ungültig. Die Zeile beginnt mit \"%(start)s\"."
 
-#: core/validators.py:476
+#: .\core\validators.py:554
 #, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"<%(tag)s> in Zeile %(line)s ist ungültig. Die Zeile beginnt mit \"%(start)s"
-"\"."
+msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
+msgstr "<%(tag)s> in Zeile %(line)s ist ungültig. Die Zeile beginnt mit \"%(start)s\"."
 
-#: core/validators.py:480
+#: .\core\validators.py:558
 #, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die "
-"Zeile beginnt mit \"%(start)s\"."
+msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
+msgstr "Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die Zeile beginnt mit \"%(start)s\"."
 
-#: core/validators.py:485
+#: .\core\validators.py:563
 #, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Das Attribut %(attr)s in Zeile %(line)s hat einen ungültigen Wert. Die Zeile "
-"beginnt mit \"%(start)s\"."
+msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
+msgstr "Das Attribut %(attr)s in Zeile %(line)s hat einen ungültigen Wert. Die Zeile beginnt mit \"%(start)s\"."
 
-#: db/models/manipulators.py:302
+#: .\db\models\manipulators.py:305
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-"Ein '%(object)s' in dieser '%(type)s' existiert bereits für dieses '%(field)"
-"s'."
+msgstr "Ein '%(object)s' in dieser '%(type)s' existiert bereits für dieses '%(field)s'."
 
-#: db/models/fields/__init__.py:40
+#: .\db\models\fields\related.py:53
 #, python-format
+msgid "Please enter a valid %s."
+msgstr "Bitte ein gültiges '%s' eingeben."
+
+#: .\db\models\fields\related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Mehrere IDs können mit Komma getrennt werden."
+
+#: .\db\models\fields\related.py:644
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Um mehr als eine Selektion zu treffen, \"Strg\", oder auf dem Mac \"Command\", beim Klicken gedrückt halten."
+
+#: .\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] "Bitte gültige IDs für %(self)s eingeben. Der Wert %(value)r ist ungültig."
+msgstr[1] "Bitte gültige IDs für %(self)s eingeben. Die Werte %(value)r sind ungültig."
+
+#: .\db\models\fields\__init__.py:42
+#, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
 msgstr "Ein '%(optname)s' mit diesem '%(fieldname)s' existiert bereits."
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
+#: .\db\models\fields\__init__.py:116
+#: .\db\models\fields\__init__.py:267
+#: .\db\models\fields\__init__.py:599
+#: .\db\models\fields\__init__.py:610
+#: .\newforms\fields.py:78
+#: .\newforms\fields.py:373
+#: .\newforms\fields.py:449
+#: .\newforms\fields.py:460
+#: .\oldforms\__init__.py:352
 msgid "This field is required."
-msgstr "Dieses Feld ist zwingend."
+msgstr "Dieses Feld ist zwingend erforderlich."
 
-#: db/models/fields/__init__.py:337
+#: .\db\models\fields\__init__.py:360
 msgid "This value must be an integer."
 msgstr "Dieser Wert muss eine Ganzzahl sein."
 
-#: db/models/fields/__init__.py:369
+#: .\db\models\fields\__init__.py:395
 msgid "This value must be either True or False."
 msgstr "Dieser Wert muss wahr oder falsch sein."
 
-#: db/models/fields/__init__.py:385
+#: .\db\models\fields\__init__.py:416
 msgid "This field cannot be null."
 msgstr "Dieses Feld darf nicht leer sein."
 
-#: db/models/fields/__init__.py:562
+#: .\db\models\fields\__init__.py:619
 msgid "Enter a valid filename."
-msgstr "Bitte einen gültigen Dateinamen eingeben"
+msgstr "Bitte einen gültigen Dateinamen eingeben."
 
-#: db/models/fields/related.py:43
+#: .\newforms\fields.py:101
+#: .\newforms\fields.py:254
 #, python-format
-msgid "Please enter a valid %s."
-msgstr "Bitte ein gültiges '%s' eingeben."
+msgid "Ensure this value has at most %d characters."
+msgstr "Bitte sicherstellen, dass der Text maximal %d Zeichen hat."
 
-#: db/models/fields/related.py:579
-msgid "Separate multiple IDs with commas."
-msgstr "Mehrere IDs können mit Komma getrennt werden."
+#: .\newforms\fields.py:103
+#: .\newforms\fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Bitte sicherstellen, dass der Text wenigstens %d Zeichen hat."
 
-#: db/models/fields/related.py:581
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Um mehr als eine Selektion zu treffen, \"Strg\", oder auf dem Mac \"Command"
-"\", beim Klicken gedrückt halten."
+#: .\newforms\fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Dieser Wert darf maximal %s sein."
 
-#: db/models/fields/related.py:625
+#: .\newforms\fields.py:130
 #, 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] ""
-"Bitte gültige IDs für %(self)s eingeben. Der Wert %(value)r ist ungültig."
-msgstr[1] ""
-"Bitte gültige IDs für %(self)s eingeben. Die Werte %(value)r sind ungültig."
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Dieser Wert muss größer oder gleich %s sein."
 
-#: forms/__init__.py:380
+#: .\newforms\fields.py:163
+msgid "Enter a valid date."
+msgstr "Bitte ein gültiges Datum eingeben."
+
+#: .\newforms\fields.py:190
+msgid "Enter a valid time."
+msgstr "Bitte eine gültige Uhrzeit eingeben."
+
+#: .\newforms\fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Bitte gültiges Datum und Uhrzeit eingeben."
+
+#: .\newforms\fields.py:240
+msgid "Enter a valid value."
+msgstr "Bitte einen gültigen Wert eingeben."
+
+#: .\newforms\fields.py:287
+#: .\newforms\fields.py:309
+msgid "Enter a valid URL."
+msgstr "Bitte eine gültige Adresse eingeben."
+
+#: .\newforms\fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "Diese Adresse scheint nicht gültig zu sein."
+
+#: .\newforms\fields.py:359
+#: .\newforms\fields.py:386
 #, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Bitte eine gültige Auswahl treffen. %s ist keine gültige Auswahl."
+
+#: .\newforms\fields.py:377
+#: .\newforms\fields.py:453
+msgid "Enter a list of values."
+msgstr "Eine Liste mit Werten eingeben."
+
+#: .\oldforms\__init__.py:387
+#, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Bitte sicherstellen, das der Text weniger als %s Zeichen hat."
-msgstr[1] "Bitte sicherstellen, das der Text weniger als %s Zeichen hat."
+msgstr[0] "Bitte sicherstellen, dass der Text weniger als %s Zeichen hat."
+msgstr[1] "Bitte sicherstellen, dass der Text weniger als %s Zeichen hat."
 
-#: forms/__init__.py:385
+#: .\oldforms\__init__.py:392
 msgid "Line breaks are not allowed here."
-msgstr "Zeilenumbrüche sind hier nicht erlaubt."
+msgstr "Zeilenumbrüche sind hier nicht erlaubt."
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: .\oldforms\__init__.py:493
+#: .\oldforms\__init__.py:566
+#: .\oldforms\__init__.py:605
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr ""
-"Bitte eine gültige Auswahl treffen; '%(data)s' ist nicht in %(choices)s."
+msgstr "Bitte eine gültige Auswahl treffen; '%(data)s' ist nicht in %(choices)s."
 
-#: forms/__init__.py:645
+#: .\oldforms\__init__.py:669
 msgid "The submitted file is empty."
-msgstr "Die ausgewählte Datei ist leer."
+msgstr "Die ausgewählte Datei ist leer."
 
-#: forms/__init__.py:699
+#: .\oldforms\__init__.py:725
 msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Bitte eine ganze Zahl zwischen -32.768 und 32.767 eingeben."
+msgstr "Bitte eine Ganzzahl zwischen -32.768 und 32.767 eingeben."
 
-#: forms/__init__.py:708
+#: .\oldforms\__init__.py:735
 msgid "Enter a positive number."
 msgstr "Bitte eine ganze, positive Zahl eingeben."
 
-#: forms/__init__.py:717
+#: .\oldforms\__init__.py:745
 msgid "Enter a whole number between 0 and 32,767."
 msgstr "Bitte eine ganze Zahl zwischen 0 und 32.767 eingeben."
 
-#: template/defaultfilters.py:379
+#: .\template\defaultfilters.py:419
 msgid "yes,no,maybe"
 msgstr "Ja,Nein,Vielleicht"
+
+#: .\utils\dates.py:6
+msgid "Monday"
+msgstr "Montag"
+
+#: .\utils\dates.py:6
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: .\utils\dates.py:6
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: .\utils\dates.py:6
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: .\utils\dates.py:6
+msgid "Friday"
+msgstr "Freitag"
+
+#: .\utils\dates.py:7
+msgid "Saturday"
+msgstr "Samstag"
+
+#: .\utils\dates.py:7
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: .\utils\dates.py:14
+msgid "January"
+msgstr "Januar"
+
+#: .\utils\dates.py:14
+msgid "February"
+msgstr "Februar"
+
+#: .\utils\dates.py:14
+#: .\utils\dates.py:27
+msgid "March"
+msgstr "März"
+
+#: .\utils\dates.py:14
+#: .\utils\dates.py:27
+msgid "April"
+msgstr "April"
+
+#: .\utils\dates.py:14
+#: .\utils\dates.py:27
+msgid "May"
+msgstr "Mai"
+
+#: .\utils\dates.py:14
+#: .\utils\dates.py:27
+msgid "June"
+msgstr "Juni"
+
+#: .\utils\dates.py:15
+#: .\utils\dates.py:27
+msgid "July"
+msgstr "Juli"
+
+#: .\utils\dates.py:15
+msgid "August"
+msgstr "August"
+
+#: .\utils\dates.py:15
+msgid "September"
+msgstr "September"
+
+#: .\utils\dates.py:15
+msgid "October"
+msgstr "Oktober"
+
+#: .\utils\dates.py:15
+msgid "November"
+msgstr "November"
+
+#: .\utils\dates.py:16
+msgid "December"
+msgstr "Dezember"
+
+#: .\utils\dates.py:19
+msgid "jan"
+msgstr "Jan"
+
+#: .\utils\dates.py:19
+msgid "feb"
+msgstr "Feb"
+
+#: .\utils\dates.py:19
+msgid "mar"
+msgstr "Mär"
+
+#: .\utils\dates.py:19
+msgid "apr"
+msgstr "Apr"
+
+#: .\utils\dates.py:19
+msgid "may"
+msgstr "Mai"
+
+#: .\utils\dates.py:19
+msgid "jun"
+msgstr "Jun"
+
+#: .\utils\dates.py:20
+msgid "jul"
+msgstr "Jul"
+
+#: .\utils\dates.py:20
+msgid "aug"
+msgstr "Aug"
+
+#: .\utils\dates.py:20
+msgid "sep"
+msgstr "Sep"
+
+#: .\utils\dates.py:20
+msgid "oct"
+msgstr "Okt"
+
+#: .\utils\dates.py:20
+msgid "nov"
+msgstr "Nov"
+
+#: .\utils\dates.py:20
+msgid "dec"
+msgstr "Dez"
+
+#: .\utils\dates.py:27
+msgid "Jan."
+msgstr "Jan."
+
+#: .\utils\dates.py:27
+msgid "Feb."
+msgstr "Feb."
+
+#: .\utils\dates.py:28
+msgid "Aug."
+msgstr "Aug."
+
+#: .\utils\dates.py:28
+msgid "Sept."
+msgstr "Sept."
+
+#: .\utils\dates.py:28
+msgid "Oct."
+msgstr "Okt."
+
+#: .\utils\dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: .\utils\dates.py:28
+msgid "Dec."
+msgstr "Dez."
+
+#: .\utils\timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "Jahr"
+msgstr[1] "Jahre"
+
+#: .\utils\timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "Monat"
+msgstr[1] "Monate"
+
+#: .\utils\timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "Woche"
+msgstr[1] "Wochen"
+
+#: .\utils\timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "Tag"
+msgstr[1] "Tage"
+
+#: .\utils\timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "Stunde"
+msgstr[1] "Stunden"
+
+#: .\utils\timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "Minute"
+msgstr[1] "Minuten"
+
+#: .\utils\translation\trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j. N Y"
+
+#: .\utils\translation\trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j. N Y, H:i"
+
+#: .\utils\translation\trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "H:i"
+
+#: .\utils\translation\trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: .\utils\translation\trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "j. F"
+
+#: .\views\generic\create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s wurde erfolgreich angelegt."
+
+#: .\views\generic\create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s wurde erfolgreich aktualisiert."
+
+#: .\views\generic\create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s wurde gelöscht"
+

Modified: vendor/django/current/django/conf/locale/de/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/de/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/de/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/de/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -9,7 +9,7 @@
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2005-12-09 11:51+0100\n"
 "PO-Revision-Date: 2005-12-04 13:21+0100\n"
-"Last-Translator: Georg Bauer <gb at bofh.ms>\n"
+"Last-Translator: Dirk Eschler <dirk.eschler at gmx.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -21,11 +21,11 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:41
 msgid "Choose all"
-msgstr "alles auswählen"
+msgstr "Alles auswählen"
 
 #: contrib/admin/media/js/SelectFilter2.js:46
 msgid "Add"
-msgstr "Zufügen"
+msgstr "Hinzufügen"
 
 #: contrib/admin/media/js/SelectFilter2.js:48
 msgid "Remove"
@@ -42,7 +42,7 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:59
 msgid "Clear all"
-msgstr "alles abwählen"
+msgstr "Alles abwählen"
 
 #: contrib/admin/media/js/dateparse.js:26
 #: contrib/admin/media/js/calendar.js:24
@@ -89,7 +89,7 @@
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
 msgid "Cancel"
-msgstr "Abbruch"
+msgstr "Abbrechen"
 
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
@@ -107,3 +107,13 @@
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
 msgid "Tomorrow"
 msgstr "Morgen"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr "Anzeigen"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr "Verbergen"
+

Modified: vendor/django/current/django/conf/locale/el/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/el/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/el/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/el/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -107,6 +107,11 @@
 "\n"
 "http://%(domain)s%(url)s"
 msgstr ""
+"Σχόλιο από τον/την %(user)s την %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
 
 #: contrib/comments/models.py:168
 msgid "person's name"
@@ -141,11 +146,11 @@
 #: contrib/comments/models.py:237
 #, fuzzy
 msgid "karma score"
-msgstr "βαθμολογία"
+msgstr "karma"
 
 #: contrib/comments/models.py:238
 msgid "karma scores"
-msgstr ""
+msgstr "karma"
 
 #: contrib/comments/models.py:242
 #, python-format
@@ -159,7 +164,7 @@
 "\n"
 "%(text)s"
 msgstr ""
-"Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n"
+"Αυτο το σχόλιο σημειώθηκε απο %(χρήστη)ες\n"
 "\n"
 "%(κείμενο)α"
 
@@ -245,7 +250,7 @@
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υποβλίθει"
+msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υπεβλήθει"
 
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
@@ -268,7 +273,7 @@
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/login.html:17
 msgid "Username:"
-msgstr ""
+msgstr "Όνομα χρήστη:"
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/admin/templates/admin/login.html:20
@@ -298,21 +303,21 @@
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/model_index.html:5
 msgid "Log out"
-msgstr ""
+msgstr "Αποσύνδεση"
 
 #: contrib/comments/templates/comments/form.html:12
 msgid "Ratings"
-msgstr ""
+msgstr "Βαθμολογίες"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr ""
+msgstr "Απαραίτητο"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Optional"
-msgstr ""
+msgstr "Προαιρετικό"
 
 #: contrib/comments/templates/comments/form.html:23
 msgid "Post a photo"
@@ -326,11 +331,11 @@
 #: contrib/comments/templates/comments/form.html:32
 #: contrib/comments/templates/comments/freeform.html:9
 msgid "Preview comment"
-msgstr ""
+msgstr "Προεπισκόπηση σχολίου"
 
 #: contrib/comments/templates/comments/freeform.html:4
 msgid "Your name:"
-msgstr ""
+msgstr "Το όνομα σας:"
 
 #: contrib/admin/filterspecs.py:40
 #, python-format
@@ -338,15 +343,17 @@
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
+"<h3>Από %s:</h3>\n"
+"<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
 #: contrib/admin/filterspecs.py:143
 msgid "All"
-msgstr ""
+msgstr "Όλα"
 
 #: contrib/admin/filterspecs.py:109
 msgid "Any date"
-msgstr ""
+msgstr "Όλες οι ημερομηνίες"
 
 #: contrib/admin/filterspecs.py:110
 msgid "Today"
@@ -354,7 +361,7 @@
 
 #: contrib/admin/filterspecs.py:113
 msgid "Past 7 days"
-msgstr ""
+msgstr "Τις προηγούμενες 7 ημέρες"
 
 #: contrib/admin/filterspecs.py:115
 msgid "This month"
@@ -374,7 +381,7 @@
 
 #: contrib/admin/filterspecs.py:150
 msgid "Unknown"
-msgstr "’γνωστο"
+msgstr "Άγνωστο"
 
 #: contrib/admin/models.py:16
 msgid "action time"
@@ -441,7 +448,7 @@
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
-msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
+msgstr "Τα ονόματα των χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
 
 #: contrib/admin/views/decorators.py:84
 #, python-format
@@ -452,16 +459,16 @@
 
 #: contrib/admin/views/main.py:226
 msgid "Site administration"
-msgstr "Διαχείριση του Διαδυκτιακού χώρου"
+msgstr "Διαχείριση του Διαδικτυακού χώρου"
 
 #: contrib/admin/views/main.py:260
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
+msgstr "Το %(name)s \"%(obj)s\" αποθηκεύτηκε επιτυχώς."
 
 #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
 msgid "You may edit it again below."
-msgstr ""
+msgstr "Μπορείτε να το επεξεργαστείτε ξανα παρακάτω."
 
 #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
 #, python-format
@@ -471,12 +478,12 @@
 #: contrib/admin/views/main.py:290
 #, python-format
 msgid "Add %s"
-msgstr ""
+msgstr "Προσθήκη %s"
 
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
-msgstr ""
+msgstr "Προστέθηκε %s."
 
 #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
@@ -486,32 +493,33 @@
 #: contrib/admin/views/main.py:338
 #, python-format
 msgid "Changed %s."
-msgstr ""
+msgstr "Επεξεργάσθηκε %s."
 
 #: contrib/admin/views/main.py:340
 #, python-format
 msgid "Deleted %s."
-msgstr ""
+msgstr "Διεγράφη %s."
 
 #: contrib/admin/views/main.py:343
 msgid "No fields changed."
-msgstr ""
+msgstr "Κανένα πεδίο δεν άλλαξε."
 
 #: contrib/admin/views/main.py:346
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
+msgstr "Το %(name)s \"%(obj)s\" επεξεργάσθηκε επιτυχώς."
 
 #: contrib/admin/views/main.py:354
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
+"Το %(name)s \"%(obj)s\" αποθηκεύθηκε επιτυχώς. Μπορείτε να το επεξεργαστείτε πάλι παρακάτω."
 
 #: contrib/admin/views/main.py:392
 #, python-format
 msgid "Change %s"
-msgstr ""
+msgstr "Αλλαγή %s"
 
 #: contrib/admin/views/main.py:470
 #, python-format
@@ -535,17 +543,17 @@
 #: contrib/admin/views/main.py:533
 #, python-format
 msgid "Change history: %s"
-msgstr ""
+msgstr "Ιστορικό Αλλαγών: %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s"
-msgstr ""
+msgstr "Επιλογή %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s to change"
-msgstr ""
+msgstr "Επιλέξτε %s προς αλλαγή"
 
 #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
@@ -555,7 +563,7 @@
 
 #: contrib/admin/views/doc.py:278
 msgid "Boolean (Either True or False)"
-msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
+msgstr "Boolean (Είτε Αληθές ή Ψέυδές)"
 
 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
 #, python-format
@@ -580,7 +588,7 @@
 
 #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
 msgid "File path"
-msgstr ""
+msgstr "Τοποθεσία Αρχείου"
 
 #: contrib/admin/views/doc.py:285
 msgid "Decimal number"
@@ -592,7 +600,7 @@
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr ""
+msgstr "Σχέση με το γονεϊκό μοντέλο"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
@@ -627,7 +635,7 @@
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
-msgstr ""
+msgstr "Τεκμηρίωση"
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
@@ -667,11 +675,11 @@
 #: contrib/admin/templates/admin/object_history.html:5
 #: contrib/admin/templates/admin/change_form.html:20
 msgid "History"
-msgstr ""
+msgstr "Ιστορικό"
 
 #: contrib/admin/templates/admin/object_history.html:18
 msgid "Date/time"
-msgstr ""
+msgstr "Ημερομηνία/Ώρα"
 
 #: contrib/admin/templates/admin/object_history.html:19
 msgid "User"
@@ -679,7 +687,7 @@
 
 #: contrib/admin/templates/admin/object_history.html:20
 msgid "Action"
-msgstr ""
+msgstr "Δράση"
 
 #: contrib/admin/templates/admin/object_history.html:26
 msgid "DATE_WITH_TIME_FULL"
@@ -697,19 +705,19 @@
 
 #: contrib/admin/templates/admin/base_site.html:7
 msgid "Django administration"
-msgstr ""
+msgstr "Διαχείριση Django"
 
 #: contrib/admin/templates/admin/500.html:4
 msgid "Server error"
-msgstr ""
+msgstr "Σφάλμα Διακομιστή"
 
 #: contrib/admin/templates/admin/500.html:6
 msgid "Server error (500)"
-msgstr ""
+msgstr "Σφάλμα Διακομιστή (500)"
 
 #: contrib/admin/templates/admin/500.html:9
 msgid "Server Error <em>(500)</em>"
-msgstr ""
+msgstr "Σφάλμα Διακομιστή <em>(500)</em>"
 
 #: contrib/admin/templates/admin/500.html:10
 msgid ""
@@ -720,7 +728,7 @@
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
-msgstr ""
+msgstr "Η σελίδα δε βρέθηκε."
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
@@ -729,24 +737,24 @@
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Διαθέσιμα μοντέλα στην εφαρμογή %(name)s."
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
 msgid "Add"
-msgstr ""
+msgstr "Προσθήκη"
 
 #: contrib/admin/templates/admin/index.html:34
 msgid "Change"
-msgstr ""
+msgstr "Επεξεργασία"
 
 #: contrib/admin/templates/admin/index.html:44
 msgid "You don't have permission to edit anything."
-msgstr ""
+msgstr "Δεν έχετε άδεια να επεξεργαστείτε τίποτα."
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
-msgstr ""
+msgstr "Πρόσφατες Πράξεις"
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "My Actions"
@@ -754,16 +762,16 @@
 
 #: contrib/admin/templates/admin/index.html:57
 msgid "None available"
-msgstr ""
+msgstr "Κανένα διαθέσιμο"
 
 #: contrib/admin/templates/admin/change_list.html:11
 #, python-format
 msgid "Add %(name)s"
-msgstr ""
+msgstr "Προσθήκη %(name)s"
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr ""
+msgstr "<a href=\"/password_reset/\">Ξεχάσατε τον κωδικό σας;</a> "
 
 #: contrib/admin/templates/admin/base.html:23
 msgid "Welcome,"
@@ -772,7 +780,7 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:9
 #: contrib/admin/templates/admin/submit_line.html:3
 msgid "Delete"
-msgstr ""
+msgstr "Διαγραφή"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
@@ -800,37 +808,37 @@
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
-msgstr ""
+msgstr "Πήγαινε"
 
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
-msgstr ""
+msgstr "Προβολή στην ιστοσελίδα"
 
 #: contrib/admin/templates/admin/change_form.html:30
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Παρακαλώ διορθώστε το παρακάτω λάθος."
+msgstr[1] "Παρακαλώ διορθώστε τα παρακάτω λάθη."
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
-msgstr ""
+msgstr "Σειρά"
 
 #: contrib/admin/templates/admin/change_form.html:51
 msgid "Order:"
-msgstr ""
+msgstr "Σειρά:"
 
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
-msgstr ""
+msgstr "Αποθήκευση καινούριου"
 
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save and add another"
-msgstr ""
+msgstr "Αποθήκευση και προσθήκη καινούριου."
 
 #: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and continue editing"
-msgstr ""
+msgstr "Αποθήκευση και συνέχεια επεξεργασίας"
 
 #: contrib/admin/templates/admin/submit_line.html:7
 msgid "Save"
@@ -841,12 +849,12 @@
 #: contrib/admin/templates/registration/password_change_form.html:6
 #: contrib/admin/templates/registration/password_change_form.html:10
 msgid "Password change"
-msgstr ""
+msgstr "Αλλαγή Κωδικού"
 
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
 msgid "Password change successful"
-msgstr ""
+msgstr "Αλλαγή κωδικού επιτυχής"
 
 #: contrib/admin/templates/registration/password_change_done.html:12
 msgid "Your password was changed."
@@ -857,7 +865,7 @@
 #: contrib/admin/templates/registration/password_reset_form.html:10
 #: contrib/admin/templates/registration/password_reset_done.html:4
 msgid "Password reset"
-msgstr ""
+msgstr "Επαναφορά κωδικού"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
 msgid ""
@@ -867,11 +875,11 @@
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
-msgstr ""
+msgstr "E-mail διεύθυνση:"
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
-msgstr ""
+msgstr "Επαναφορά του κωδικού μου"
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
@@ -880,7 +888,7 @@
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
-msgstr ""
+msgstr "Εισαγωγή ξανά"
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -909,11 +917,11 @@
 
 #: contrib/admin/templates/registration/password_change_form.html:21
 msgid "Confirm password:"
-msgstr ""
+msgstr "Επιβεβαίωση κωδικού"
 
 #: contrib/admin/templates/registration/password_change_form.html:23
 msgid "Change my password"
-msgstr ""
+msgstr "Αλλαγή του κωδικού μου"
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
@@ -1003,19 +1011,19 @@
 
 #: contrib/admin/templates/widget/date_time.html:3
 msgid "Date:"
-msgstr ""
+msgstr "Ημ/νία:"
 
 #: contrib/admin/templates/widget/date_time.html:4
 msgid "Time:"
-msgstr ""
+msgstr "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ώρα:"
 
 #: contrib/admin/templates/widget/file.html:2
 msgid "Currently:"
-msgstr ""
+msgstr "Τρέχον:"
 
 #: contrib/admin/templates/widget/file.html:3
 msgid "Change:"
-msgstr ""
+msgstr "Αλλαγή:"
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
@@ -1271,192 +1279,192 @@
 
 #: utils/dates.py:6
 msgid "Monday"
-msgstr ""
+msgstr "Δευτέρα"
 
 #: utils/dates.py:6
 msgid "Tuesday"
-msgstr ""
+msgstr "Τρίτη"
 
 #: utils/dates.py:6
 msgid "Wednesday"
-msgstr ""
+msgstr "Τετάρτη"
 
 #: utils/dates.py:6
 msgid "Thursday"
-msgstr ""
+msgstr "Πέμπτη"
 
 #: utils/dates.py:6
 msgid "Friday"
-msgstr ""
+msgstr "Παρασκευή"
 
 #: utils/dates.py:7
 msgid "Saturday"
-msgstr ""
+msgstr "Σάββατο"
 
 #: utils/dates.py:7
 msgid "Sunday"
-msgstr ""
+msgstr "Κυριακή"
 
 #: utils/dates.py:14
 msgid "January"
-msgstr ""
+msgstr "Ιανουάριος"
 
 #: utils/dates.py:14
 msgid "February"
-msgstr ""
+msgstr "Φεβρουάριος"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "March"
-msgstr ""
+msgstr "Μάρτιος"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "April"
-msgstr ""
+msgstr "Απρίλιος"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "May"
-msgstr ""
+msgstr "Μάιος"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "June"
-msgstr ""
+msgstr "Ιούνιος"
 
 #: utils/dates.py:15 utils/dates.py:27
 msgid "July"
-msgstr ""
+msgstr "Ιούλιος"
 
 #: utils/dates.py:15
 msgid "August"
-msgstr ""
+msgstr "Αύγουστος"
 
 #: utils/dates.py:15
 msgid "September"
-msgstr ""
+msgstr "Σεπτέμβριος"
 
 #: utils/dates.py:15
 msgid "October"
-msgstr ""
+msgstr "Οκτώβριος"
 
 #: utils/dates.py:15
 msgid "November"
-msgstr ""
+msgstr "Νοέμβριος"
 
 #: utils/dates.py:16
 msgid "December"
-msgstr ""
+msgstr "Δεκέμβριος"
 
 #: utils/dates.py:19
 #, fuzzy
 msgid "jan"
-msgstr "και"
+msgstr "Ιαν"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "Φεβ"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "Μάρ"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "Απρ"
 
 #: utils/dates.py:19
 msgid "may"
-msgstr ""
+msgstr "Μάι"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "Ιούν"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "Ιούλ"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "Αύγ"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "Σεπ"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "Οκτ"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "Νοέ"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "Δεκ"
 
 #: utils/dates.py:27
 msgid "Jan."
-msgstr ""
+msgstr "Ιάν."
 
 #: utils/dates.py:27
 msgid "Feb."
-msgstr ""
+msgstr "Φεβ."
 
 #: utils/dates.py:28
 msgid "Aug."
-msgstr ""
+msgstr "Αύγ."
 
 #: utils/dates.py:28
 msgid "Sept."
-msgstr ""
+msgstr "Σεπτ."
 
 #: utils/dates.py:28
 msgid "Oct."
-msgstr ""
+msgstr "Οκτ."
 
 #: utils/dates.py:28
 msgid "Nov."
-msgstr ""
+msgstr "Νοέ."
 
 #: utils/dates.py:28
 msgid "Dec."
-msgstr ""
+msgstr "Δεκ."
 
 #: utils/timesince.py:12
 msgid "year"
 msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "χρόνος"
+msgstr[1] "χρόνια"
 
 #: utils/timesince.py:13
 msgid "month"
 msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "μήνας"
+msgstr[1] "μήνες"
 
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "εβδομάδα"
+msgstr[1] "εβδομάδες"
 
 #: utils/timesince.py:15
 msgid "day"
 msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ημέρα"
+msgstr[1] "ημέρες"
 
 #: utils/timesince.py:16
 msgid "hour"
 msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ώρα"
+msgstr[1] "ώρες"
 
 #: utils/timesince.py:17
 msgid "minute"
 msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "λεπτό"
+msgstr[1] "λεπτά"
 
 #: conf/global_settings.py:37
 msgid "Bengali"
@@ -1630,7 +1638,7 @@
 
 #: core/validators.py:136
 msgid "Enter a valid e-mail address."
-msgstr ""
+msgstr "Εισάγετε ένα σωστό e-mail."
 
 #: core/validators.py:148
 msgid ""
@@ -1745,12 +1753,12 @@
 #: core/validators.py:362
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον."
+msgstr "Σιγουρευτείτε ότι το αρχείο που ανεβάζετε είναι %s bytes τουλάχιστον."
 
 #: core/validators.py:363
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr ""
+msgstr "Σιγουρευτείτε ότι το αρχείο που ανεβάζετε έχει μέγεθος μέχρι %s bytes."
 
 #: core/validators.py:376
 msgid "The format for this field is wrong."
@@ -1827,7 +1835,7 @@
 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
 #: forms/__init__.py:346
 msgid "This field is required."
-msgstr ""
+msgstr "Αυτό το πεδίο είναι απαραίτητο"
 
 #: db/models/fields/__init__.py:337
 msgid "This value must be an integer."
@@ -1836,12 +1844,12 @@
 #: db/models/fields/__init__.py:369
 #, fuzzy
 msgid "This value must be either True or False."
-msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
+msgstr "Boolean (Είτε Αληθές ή Ψευδές)"
 
 #: db/models/fields/__init__.py:385
 #, fuzzy
 msgid "This field cannot be null."
-msgstr "Αυτό το πεδίο είναι άκυρο"
+msgstr "Αυτό το πεδίο δεν μπορεί να είναι κενό (null)"
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
@@ -1850,7 +1858,7 @@
 #: db/models/fields/related.py:43
 #, python-format
 msgid "Please enter a valid %s."
-msgstr ""
+msgstr "Παρακαλώ εισάγετε ένα/μία έγκυρο/η %s"
 
 #: db/models/fields/related.py:579
 #, fuzzy

Added: vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/el/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2006 and beyond.
+# This file is distributed under the same license as the Django package.
+# Orestis Markou <orestis at orestis.gr>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-12-09 11:51+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Orestis Markou <orestis at orestis.gr>\n"
+"Language-Team: Greek\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "Διαθέσιμο %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Επιλογή Όλων"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Προσθήκη"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Αφαίρεση"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Επιλεχθέντα %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Επιλέξτε και κάντε κλικ."
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Καθαρισμός όλων"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr "Ιανουάριος Φεβρουάριος Μάρτιος Απρίλιος Μάιος Ιούνιος Ιούλιος Αύγουστος Σεπτέμβριος Οκτώβριος Νοέμβριος "
+"Δεκέμβριος"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Κυριακή Δευτέρα Τρίτη Τετάρτη Πέμπτη Παρασκευή Σάββατο"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "Κ Δ Τ Τ Π Π Σ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "Τώρα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "Ρολόι"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "Διαλέξτε ώρα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "Μεσάνυχτα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "6 π.μ."
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "Μεσημέρι"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "Άκυρο"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "Σήμερα"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "Ημερολόγιο"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "Χθες"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "Αύριο"

Modified: vendor/django/current/django/conf/locale/en/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/en/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/en/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/en/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,12 +3,11 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:10+0200\n"
+"POT-Creation-Date: 2006-09-25 15:43+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -73,7 +72,7 @@
 msgid "is public"
 msgstr ""
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
 msgid "IP address"
 msgstr ""
 
@@ -200,12 +199,12 @@
 msgid "No voting for yourself"
 msgstr ""
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid ""
 "This rating is required because you've entered at least one other rating."
 msgstr ""
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -220,7 +219,7 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
@@ -228,22 +227,22 @@
 "%(text)s"
 msgstr ""
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr ""
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr ""
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr ""
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
@@ -262,18 +261,9 @@
 msgstr ""
 
 #: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr ""
-
-#: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -291,6 +281,15 @@
 msgid "Log out"
 msgstr ""
 
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr ""
+
 #: contrib/comments/templates/comments/form.html:12
 msgid "Ratings"
 msgstr ""
@@ -309,13 +308,13 @@
 msgid "Post a photo"
 msgstr ""
 
-#: contrib/comments/templates/comments/form.html:27
+#: contrib/comments/templates/comments/form.html:28
 #: contrib/comments/templates/comments/freeform.html:5
 msgid "Comment:"
 msgstr ""
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
 msgid "Preview comment"
 msgstr ""
 
@@ -331,7 +330,7 @@
 msgstr ""
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr ""
 
@@ -395,214 +394,283 @@
 msgid "log entries"
 msgstr ""
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/templatetags/admin_list.py:230
 msgid "All dates"
 msgstr ""
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
+#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
 msgstr ""
 
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr ""
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
 msgstr ""
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
 msgstr ""
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr ""
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
 msgstr ""
 
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr ""
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:22
 msgid "You may edit it again below."
 msgstr ""
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
 msgstr ""
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr ""
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr ""
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339
 msgid "and"
 msgstr ""
 
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr ""
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr ""
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr ""
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr ""
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr ""
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:473
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr ""
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:478
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr ""
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:511
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr ""
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:514
 msgid "Are you sure?"
 msgstr ""
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:536
 #, python-format
 msgid "Change history: %s"
 msgstr ""
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s"
 msgstr ""
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s to change"
 msgstr ""
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr ""
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr ""
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr ""
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr ""
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr ""
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr ""
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr ""
+
+#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
+#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
+msgid "model:"
+msgstr ""
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr ""
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr ""
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr ""
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
+#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
 msgid "Integer"
 msgstr ""
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr ""
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr ""
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr ""
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr ""
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr ""
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr ""
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr ""
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr ""
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr ""
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr ""
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr ""
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr ""
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr ""
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr ""
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
 msgstr ""
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr ""
 
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr ""
+
+#: contrib/admin/views/auth.py:28
+msgid "Add user"
+msgstr ""
+
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -613,7 +681,7 @@
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -634,9 +702,10 @@
 #: contrib/admin/templates/admin/object_history.html:5
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/logged_out.html:4
@@ -713,6 +782,11 @@
 msgid "Models available in the %(name)s application."
 msgstr ""
 
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
 msgid "Add"
@@ -747,7 +821,7 @@
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
 msgstr ""
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr ""
 
@@ -759,16 +833,16 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
@@ -777,13 +851,33 @@
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
-msgid " By %(title)s "
+msgid " By %(filter_title)s "
 msgstr ""
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
 msgstr ""
 
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr ""
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr ""
+
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
 msgstr ""
@@ -818,6 +912,35 @@
 msgid "Save"
 msgstr ""
 
+#: contrib/admin/templates/admin/invalid_setup.html:8
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:6
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr ""
+
 #: contrib/admin/templates/registration/password_change_done.html:4
 #: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admin/templates/registration/password_change_form.html:6
@@ -1018,11 +1141,11 @@
 "'http://'."
 msgstr ""
 
-#: contrib/redirects/models.py:12
+#: contrib/redirects/models.py:13
 msgid "redirect"
 msgstr ""
 
-#: contrib/redirects/models.py:13
+#: contrib/redirects/models.py:14
 msgid "redirects"
 msgstr ""
 
@@ -1049,8 +1172,8 @@
 
 #: contrib/flatpages/models.py:13
 msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
 msgstr ""
 
 #: contrib/flatpages/models.py:14
@@ -1069,151 +1192,177 @@
 msgid "flat pages"
 msgstr ""
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr ""
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
 msgid "name"
 msgstr ""
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr ""
 
-#: contrib/auth/models.py:17
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr ""
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
 msgid "permissions"
 msgstr ""
 
-#: contrib/auth/models.py:29
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr ""
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
 msgid "groups"
 msgstr ""
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr ""
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr ""
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr ""
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr ""
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr ""
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "Use '[algo]$[salt]$[hexdigest]'"
 msgstr ""
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr ""
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
 msgstr ""
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr ""
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr ""
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr ""
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr ""
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
 msgstr ""
 
-#: contrib/auth/models.py:67
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr ""
 
-#: contrib/auth/models.py:70
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr ""
 
-#: contrib/auth/models.py:71
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr ""
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr ""
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr ""
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr ""
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr ""
 
-#: contrib/auth/models.py:219
+#: contrib/auth/models.py:256
 msgid "message"
 msgstr ""
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:52
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
 msgstr ""
 
-#: contrib/contenttypes/models.py:25
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr ""
+
+#: contrib/contenttypes/models.py:20
 msgid "python model class name"
 msgstr ""
 
-#: contrib/contenttypes/models.py:28
+#: contrib/contenttypes/models.py:23
 msgid "content type"
 msgstr ""
 
-#: contrib/contenttypes/models.py:29
+#: contrib/contenttypes/models.py:24
 msgid "content types"
 msgstr ""
 
-#: contrib/sessions/models.py:35
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr ""
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr ""
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr ""
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr ""
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr ""
 
@@ -1233,18 +1382,6 @@
 msgid "sites"
 msgstr ""
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "N j, Y"
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "P"
-
 #: utils/dates.py:6
 msgid "Monday"
 msgstr ""
@@ -1433,275 +1570,332 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: conf/global_settings.py:37
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr ""
+
+#: conf/global_settings.py:40
 msgid "Bengali"
 msgstr ""
 
-#: conf/global_settings.py:38
+#: conf/global_settings.py:41
 msgid "Czech"
 msgstr ""
 
-#: conf/global_settings.py:39
+#: conf/global_settings.py:42
 msgid "Welsh"
 msgstr ""
 
-#: conf/global_settings.py:40
+#: conf/global_settings.py:43
 msgid "Danish"
 msgstr ""
 
-#: conf/global_settings.py:41
+#: conf/global_settings.py:44
 msgid "German"
 msgstr ""
 
-#: conf/global_settings.py:42
+#: conf/global_settings.py:45
 msgid "Greek"
 msgstr ""
 
-#: conf/global_settings.py:43
+#: conf/global_settings.py:46
 msgid "English"
 msgstr ""
 
-#: conf/global_settings.py:44
+#: conf/global_settings.py:47
 msgid "Spanish"
 msgstr ""
 
-#: conf/global_settings.py:45
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr ""
+
+#: conf/global_settings.py:50
 msgid "French"
 msgstr ""
 
-#: conf/global_settings.py:46
+#: conf/global_settings.py:51
 msgid "Galician"
 msgstr ""
 
-#: conf/global_settings.py:47
+#: conf/global_settings.py:52
 msgid "Hungarian"
 msgstr ""
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:53
 msgid "Hebrew"
 msgstr ""
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:54
 msgid "Icelandic"
 msgstr ""
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:55
 msgid "Italian"
 msgstr ""
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:56
 msgid "Japanese"
 msgstr ""
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:57
 msgid "Dutch"
 msgstr ""
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:58
 msgid "Norwegian"
 msgstr ""
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:59
 msgid "Brazilian"
 msgstr ""
 
-#: conf/global_settings.py:55
+#: conf/global_settings.py:60
 msgid "Romanian"
 msgstr ""
 
-#: conf/global_settings.py:56
+#: conf/global_settings.py:61
 msgid "Russian"
 msgstr ""
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:62
 msgid "Slovak"
 msgstr ""
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:63
 msgid "Slovenian"
 msgstr ""
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:64
 msgid "Serbian"
 msgstr ""
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:65
 msgid "Swedish"
 msgstr ""
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:66
+msgid "Tamil"
+msgstr ""
+
+#: conf/global_settings.py:67
+msgid "Turkish"
+msgstr ""
+
+#: conf/global_settings.py:68
 msgid "Ukrainian"
 msgstr ""
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:69
 msgid "Simplified Chinese"
 msgstr ""
 
-#: conf/global_settings.py:63
+#: conf/global_settings.py:70
 msgid "Traditional Chinese"
 msgstr ""
 
-#: core/validators.py:60
+#: core/validators.py:63
 msgid "This value must contain only letters, numbers and underscores."
 msgstr ""
 
-#: core/validators.py:64
+#: core/validators.py:67
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
 msgstr ""
 
-#: core/validators.py:72
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+
+#: core/validators.py:75
 msgid "Uppercase letters are not allowed here."
 msgstr ""
 
-#: core/validators.py:76
+#: core/validators.py:79
 msgid "Lowercase letters are not allowed here."
 msgstr ""
 
-#: core/validators.py:83
+#: core/validators.py:86
 msgid "Enter only digits separated by commas."
 msgstr ""
 
-#: core/validators.py:95
+#: core/validators.py:98
 msgid "Enter valid e-mail addresses separated by commas."
 msgstr ""
 
-#: core/validators.py:99
+#: core/validators.py:102
 msgid "Please enter a valid IP address."
 msgstr ""
 
-#: core/validators.py:103
+#: core/validators.py:106
 msgid "Empty values are not allowed here."
 msgstr ""
 
-#: core/validators.py:107
+#: core/validators.py:110
 msgid "Non-numeric characters aren't allowed here."
 msgstr ""
 
-#: core/validators.py:111
+#: core/validators.py:114
 msgid "This value can't be comprised solely of digits."
 msgstr ""
 
-#: core/validators.py:116
+#: core/validators.py:119
 msgid "Enter a whole number."
 msgstr ""
 
-#: core/validators.py:120
+#: core/validators.py:123
 msgid "Only alphabetical characters are allowed here."
 msgstr ""
 
-#: core/validators.py:124
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr ""
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr ""
+
+#: core/validators.py:146 db/models/fields/__init__.py:415
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr ""
 
-#: core/validators.py:128
+#: core/validators.py:151
 msgid "Enter a valid time in HH:MM format."
 msgstr ""
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: core/validators.py:155 db/models/fields/__init__.py:477
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr ""
 
-#: core/validators.py:136
+#: core/validators.py:160
 msgid "Enter a valid e-mail address."
 msgstr ""
 
-#: core/validators.py:148
+#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: core/validators.py:176
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr ""
 
-#: core/validators.py:155
+#: core/validators.py:183
 #, python-format
 msgid "The URL %s does not point to a valid image."
 msgstr ""
 
-#: core/validators.py:159
+#: core/validators.py:187
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr ""
 
-#: core/validators.py:167
+#: core/validators.py:195
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
 msgstr ""
 
-#: core/validators.py:171
+#: core/validators.py:199
 msgid "A valid URL is required."
 msgstr ""
 
-#: core/validators.py:185
+#: core/validators.py:213
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
 
-#: core/validators.py:192
+#: core/validators.py:220
 #, python-format
 msgid "Badly formed XML: %s"
 msgstr ""
 
-#: core/validators.py:202
+#: core/validators.py:230
 #, python-format
 msgid "Invalid URL: %s"
 msgstr ""
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:234 core/validators.py:236
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr ""
 
-#: core/validators.py:214
+#: core/validators.py:242
 msgid "Enter a valid U.S. state abbreviation."
 msgstr ""
 
-#: core/validators.py:229
+#: core/validators.py:256
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] ""
 msgstr[1] ""
 
-#: core/validators.py:236
+#: core/validators.py:263
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr ""
 
-#: core/validators.py:255
+#: core/validators.py:282
 msgid "Please enter something for at least one field."
 msgstr ""
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:291 core/validators.py:302
 msgid "Please enter both fields or leave them both empty."
 msgstr ""
 
-#: core/validators.py:282
+#: core/validators.py:309
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
 msgstr ""
 
-#: core/validators.py:294
+#: core/validators.py:321
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
 msgstr ""
 
-#: core/validators.py:313
+#: core/validators.py:340
 msgid "Duplicate values are not allowed."
 msgstr ""
 
-#: core/validators.py:336
+#: core/validators.py:363
 #, python-format
 msgid "This value must be a power of %s."
 msgstr ""
 
-#: core/validators.py:347
+#: core/validators.py:374
 msgid "Please enter a valid decimal number."
 msgstr ""
 
-#: core/validators.py:349
+#: core/validators.py:378
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
 msgid_plural ""
@@ -1709,85 +1903,109 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: core/validators.py:352
+#: core/validators.py:381
 #, python-format
+msgid ""
+"Please enter a valid decimal number with a whole part of at most %s digit."
+msgid_plural ""
+"Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:384
+#, python-format
 msgid "Please enter a valid decimal number with at most %s decimal place."
 msgid_plural ""
 "Please enter a valid decimal number with at most %s decimal places."
 msgstr[0] ""
 msgstr[1] ""
 
-#: core/validators.py:362
+#: core/validators.py:394
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr ""
 
-#: core/validators.py:363
+#: core/validators.py:395
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr ""
 
-#: core/validators.py:376
+#: core/validators.py:412
 msgid "The format for this field is wrong."
 msgstr ""
 
-#: core/validators.py:391
+#: core/validators.py:427
 msgid "This field is invalid."
 msgstr ""
 
-#: core/validators.py:426
+#: core/validators.py:463
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr ""
 
-#: core/validators.py:429
+#: core/validators.py:466
 #, python-format
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr ""
 
-#: core/validators.py:462
+#: core/validators.py:499
 #, python-format
 msgid ""
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
 "\"%(start)s\".)"
 msgstr ""
 
-#: core/validators.py:466
+#: core/validators.py:503
 #, python-format
 msgid ""
 "Some text starting on line %(line)s is not allowed in that context. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
 
-#: core/validators.py:471
+#: core/validators.py:508
 #, python-format
 msgid ""
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
 
-#: core/validators.py:476
+#: core/validators.py:513
 #, python-format
 msgid ""
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
 
-#: core/validators.py:480
+#: core/validators.py:517
 #, python-format
 msgid ""
 "A tag on line %(line)s is missing one or more required attributes. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
 
-#: core/validators.py:485
+#: core/validators.py:522
 #, python-format
 msgid ""
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
 
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr ""
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr ""
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr ""
+
 #: db/models/manipulators.py:302
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
@@ -1799,42 +2017,42 @@
 msgstr ""
 
 #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
+#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
 #: forms/__init__.py:346
 msgid "This field is required."
 msgstr ""
 
-#: db/models/fields/__init__.py:337
+#: db/models/fields/__init__.py:340
 msgid "This value must be an integer."
 msgstr ""
 
-#: db/models/fields/__init__.py:369
+#: db/models/fields/__init__.py:372
 msgid "This value must be either True or False."
 msgstr ""
 
-#: db/models/fields/__init__.py:385
+#: db/models/fields/__init__.py:388
 msgid "This field cannot be null."
 msgstr ""
 
-#: db/models/fields/__init__.py:562
+#: db/models/fields/__init__.py:571
 msgid "Enter a valid filename."
 msgstr ""
 
-#: db/models/fields/related.py:43
+#: db/models/fields/related.py:51
 #, python-format
 msgid "Please enter a valid %s."
 msgstr ""
 
-#: db/models/fields/related.py:579
+#: db/models/fields/related.py:618
 msgid "Separate multiple IDs with commas."
 msgstr ""
 
-#: db/models/fields/related.py:581
+#: db/models/fields/related.py:620
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 
-#: db/models/fields/related.py:625
+#: db/models/fields/related.py:664
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -1842,38 +2060,38 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: forms/__init__.py:380
+#: forms/__init__.py:381
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
 msgstr[0] ""
 msgstr[1] ""
 
-#: forms/__init__.py:385
+#: forms/__init__.py:386
 msgid "Line breaks are not allowed here."
 msgstr ""
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
 msgstr ""
 
-#: forms/__init__.py:645
+#: forms/__init__.py:663
 msgid "The submitted file is empty."
 msgstr ""
 
-#: forms/__init__.py:699
+#: forms/__init__.py:719
 msgid "Enter a whole number between -32,768 and 32,767."
 msgstr ""
 
-#: forms/__init__.py:708
+#: forms/__init__.py:729
 msgid "Enter a positive number."
 msgstr ""
 
-#: forms/__init__.py:717
+#: forms/__init__.py:739
 msgid "Enter a whole number between 0 and 32,767."
 msgstr ""
 
-#: template/defaultfilters.py:379
+#: template/defaultfilters.py:401
 msgid "yes,no,maybe"
 msgstr ""

Modified: vendor/django/current/django/conf/locale/es/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/es/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/es/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/es/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,25 +1,1115 @@
-# translation of django.po to Spanish
-# translation of django.po to Español
+# translation of django.po to Castellano
 # This file is distributed under the same license as the PACKAGE package.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER.
+#
 # Ricardo Javier Cárdenes Medina <ricardo.cardenes at gmail.com>, 2005.
 # Ricardo Javier Cardenes Medina <ricardo.cardenes at gmail.com>, 2005.
-#
+# AgarFu <heaven at croasanaso.sytes.net>, 2007.
+# Mario Gonzalez <gonzalemario @t gmail.com>, 2007
 msgid ""
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:11+0200\n"
-"PO-Revision-Date: 2005-11-28 15:28+0000\n"
-"Last-Translator: Ricardo Javier Cardenes Medina <ricardo.cardenes at gmail."
-"com>\n"
-"Language-Team: Spanish <en at li.org>\n"
+"POT-Creation-Date: 2007-02-24 17:08+0000\n"
+"PO-Revision-Date: 2007-02-24 18:02-0600\n"
+"Last-Translator: Mario Gonzalez <gonzalemario @t gmail.com>\n"
+"Language-Team: Castellano <Django-I18N at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.10.2\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Lunes"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Martes"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Miércoles"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Jueves"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Viernes"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Sábado"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Domingo"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Enero"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Febrero"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Marzo"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Abril"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Mayo"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Junio"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Julio"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Agosto"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Septiembre"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Octubre"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Noviembre"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Diciembre"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "ene"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "feb"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "mar"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "abr"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "may"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "jun"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "jul"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "ago"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "sep"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "oct"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "nov"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "dic"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Ene."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Feb."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Ago."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Sept."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Oct."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Dic."
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "año"
+msgstr[1] "años"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "mes"
+msgstr[1] "meses"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "semana"
+msgstr[1] "semanas"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "día"
+msgstr[1] "días"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "hora"
+msgstr[1] "horas"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minuto"
+msgstr[1] "minutos"
+
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j N Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j N Y P"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "j \\de F"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Árabe"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Bengalí"
+
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr "Catalán"
+
+#: conf/global_settings.py:42
+msgid "Czech"
+msgstr "Checo"
+
+#: conf/global_settings.py:43
+msgid "Welsh"
+msgstr "Galés"
+
+#: conf/global_settings.py:44
+msgid "Danish"
+msgstr "Danés"
+
+#: conf/global_settings.py:45
+msgid "German"
+msgstr "Alemán"
+
+#: conf/global_settings.py:46
+msgid "Greek"
+msgstr "Griego"
+
+#: conf/global_settings.py:47
+msgid "English"
+msgstr "Inglés"
+
+#: conf/global_settings.py:48
+msgid "Spanish"
+msgstr "Español"
+
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr "Español Argentino"
+
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "Finés"
+
+#: conf/global_settings.py:51
+msgid "French"
+msgstr "Francés"
+
+#: conf/global_settings.py:52
+msgid "Galician"
+msgstr "Gallego"
+
+#: conf/global_settings.py:53
+msgid "Hungarian"
+msgstr "Húngaro"
+
+#: conf/global_settings.py:54
+msgid "Hebrew"
+msgstr "Hebreo"
+
+#: conf/global_settings.py:55
+msgid "Icelandic"
+msgstr "Islandés"
+
+#: conf/global_settings.py:56
+msgid "Italian"
+msgstr "Italiano"
+
+#: conf/global_settings.py:57
+msgid "Japanese"
+msgstr "Japonés"
+
+#: conf/global_settings.py:58
+msgid "Latvian"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Macedonian"
+msgstr "Macedonio"
+
+#: conf/global_settings.py:60
+msgid "Dutch"
+msgstr "Alemán"
+
+#: conf/global_settings.py:61
+msgid "Norwegian"
+msgstr "Noruego"
+
+#: conf/global_settings.py:62
+msgid "Polish"
+msgstr "Polaco"
+
+#: conf/global_settings.py:63
+msgid "Brazilian"
+msgstr "Brasileño"
+
+#: conf/global_settings.py:64
+msgid "Romanian"
+msgstr "Rumano"
+
+#: conf/global_settings.py:65
+msgid "Russian"
+msgstr "Ruso"
+
+#: conf/global_settings.py:66
+msgid "Slovak"
+msgstr "Eslovaco"
+
+#: conf/global_settings.py:67
+msgid "Slovenian"
+msgstr "Esloveno"
+
+#: conf/global_settings.py:68
+msgid "Serbian"
+msgstr "Serbio"
+
+#: conf/global_settings.py:69
+msgid "Swedish"
+msgstr "Sueco"
+
+#: conf/global_settings.py:70
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:71
+msgid "Turkish"
+msgstr "Turco"
+
+#: conf/global_settings.py:72
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+#: conf/global_settings.py:73
+msgid "Simplified Chinese"
+msgstr "Chino simplificado"
+
+#: conf/global_settings.py:74
+msgid "Traditional Chinese"
+msgstr "Chino tradicional"
+
+#: db/models/manipulators.py:305
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(object)s de este %(type)s ya existen en este %(field)s."
+
+#: db/models/manipulators.py:306 contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339
+msgid "and"
+msgstr "y"
+
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Por favor, introduzca un %s válido."
+
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Separe múltiples IDs con comas."
+
+#: db/models/fields/related.py:644
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Mantenga presionado \"Control\", o \"Command\" en un Mac, para seleccionar más de uno."
+
+#: 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] ""
+"Por favor, introduzca IDs de %(self)s válidos. El valor %(value)r no es "
+"válido."
+msgstr[1] ""
+"Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
+"válidos."
+
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "Ya existe %(optname)s con este %(fieldname)s."
+
+#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
+#: newforms/models.py:177 newforms/fields.py:78 newforms/fields.py:374
+#: newforms/fields.py:450 newforms/fields.py:461 oldforms/__init__.py:352
+msgid "This field is required."
+msgstr "Este campo es obligatorio."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Este valor debe ser un entero."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Este valor debe ser Verdadero o Falso."
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Este campo no puede estar vacío."
+
+#: db/models/fields/__init__.py:454 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
+
+#: db/models/fields/__init__.py:521 core/validators.py:156
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Introduzca una fecha/hora válida en formato AAAA-MM-DD HH:MM."
+
+#: db/models/fields/__init__.py:625
+msgid "Enter a valid filename."
+msgstr "Introduzca un nombre de fichero válido"
+
+#: template/defaultfilters.py:436
+msgid "yes,no,maybe"
+msgstr "si,no,tal vez"
+
+#: newforms/models.py:164 newforms/fields.py:360
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Escoja una opción válida. Esa opción no está entre las aceptadas."
+
+#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454
+msgid "Enter a list of values."
+msgstr "Introduzca una lista de valores."
+
+#: newforms/models.py:187 newforms/fields.py:387
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Escoja una opción válida; '%s' no es una de las opciones disponibles."
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Asegúrese de que su texto tiene a lo más %d caracteres."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Asegúrese de que su texto tiene al menos %d caracteres."
+
+#: newforms/fields.py:126 core/validators.py:120
+msgid "Enter a whole number."
+msgstr "Introduzca un número entero."
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Asegúrese de que este valor es menor o igual a %s."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Asegúrese de que este valor es mayor o igual a %s."
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Introduzca una fecha válida."
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "Introduzca una hora válida."
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Introduzca una fecha/hora válida."
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Introduzca un valor correcto."
+
+#: newforms/fields.py:269 core/validators.py:161
+msgid "Enter a valid e-mail address."
+msgstr "Introduzca una dirección de correo electrónico válida"
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Introduzca una URL válida."
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "La URL parece ser un enlace roto."
+
+#: newforms/widgets.py:170 oldforms/__init__.py:572
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: newforms/widgets.py:170 oldforms/__init__.py:572
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "Sí"
+
+#: newforms/widgets.py:170 oldforms/__init__.py:572
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "No"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Este valor debe contener sólo letras, números y guiones bajos."
+
+#: core/validators.py:68
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr "Este valor debe contener letras, números, guiones bajos o barras solamente."
+
+#: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Este valor debe contener sólo letras, números, guiones bajos o medios."
+
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "No se admiten letras mayúsculas."
+
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "No se admiten letras minúsculas."
+
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Introduzca sólo dígitos separados por comas."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Introduzca direcciones de correo válidas separadas por comas."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "Por favor introduzca una dirección IP válida."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "No se admiten valores vacíos."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "No se admiten caracteres no numéricos."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Este valor no puede comprender sólo dígitos."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Sólo se admiten caracteres alfabéticos."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "El año debe ser 1900 o posterior."
+
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Fecha no válida: %s"
+
+#: core/validators.py:152
+msgid "Enter a valid time in HH:MM format."
+msgstr "Introduzca una hora válida en formato HH:MM."
+
+#: core/validators.py:173 core/validators.py:443 oldforms/__init__.py:667
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+"No se ha enviado ningún fichero. Compruebe el tipo de codificación en el "
+"formulario."
+
+#: core/validators.py:177
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se "
+"trataba de una imagen corrupta."
+
+#: core/validators.py:184
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "La URL %s no apunta a una imagen válida."
+
+#: core/validators.py:188
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Los números de teléfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" "
+"no es válido."
+
+#: core/validators.py:196
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "La URL %s no apunta a un vídeo QuickTime válido."
+
+#: core/validators.py:200
+msgid "A valid URL is required."
+msgstr "Se precisa una URL válida."
+
+#: core/validators.py:214
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Se precisa HTML válido. Los errores específicos son:\n"
+"%s"
+
+#: core/validators.py:221
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML mal formado: %s"
+
+#: core/validators.py:238
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL no válida: %s"
+
+#: core/validators.py:243 core/validators.py:245
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "La URL %s es un enlace roto."
+
+#: core/validators.py:251
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Introduzca una abreviatura válida de estado de los EEUU."
+
+#: core/validators.py:265
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "¡Cuida tu vocabulario! Aquí no admitimos la palabra %s."
+msgstr[1] "¡Cuida tu vocabulario! Aquí no admitimos las palabras %s."
+
+#: core/validators.py:272
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Este campo debe concordar con el campo '%s'."
+
+#: core/validators.py:291
+msgid "Please enter something for at least one field."
+msgstr "Por favor, introduzca algo en al menos un campo."
+
+#: core/validators.py:300 core/validators.py:311
+msgid "Please enter both fields or leave them both empty."
+msgstr "Por favor, rellene ambos campos o deje ambos vacíos."
+
+#: core/validators.py:318
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Se debe proporcionar este campo si %(field)s es %(value)s"
+
+#: core/validators.py:330
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
+
+#: core/validators.py:349
+msgid "Duplicate values are not allowed."
+msgstr "No se admiten valores duplicados."
+
+#: core/validators.py:364
+#, python-format
+msgid "This value must be between %(lower)s and %(upper)s."
+msgstr "Este valor debe estar entre %(lower)s y %(upper)s."
+
+#: core/validators.py:367
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Este valor debe ser como mínimo %s."
+
+#: core/validators.py:369
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "Este valor no debe ser mayor que %s."
+
+#: core/validators.py:405
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Este valor debe ser una potencia de %s."
+
+#: core/validators.py:416
+msgid "Please enter a valid decimal number."
+msgstr "Por favor, introduzca un número decimal válido."
+
+#: core/validators.py:420
+#, 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] ""
+"Por favor, introduzca un número decimal válido con a lo más %s dígito en "
+"total."
+msgstr[1] ""
+"Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
+"total."
+
+#: core/validators.py:423
+#, 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] ""
+"Por favor, introduzca un número decimal válido con a lo más %s dígito en "
+"total."
+msgstr[1] ""
+"Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
+"total."
+
+#: core/validators.py:426
+#, 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] ""
+"Por favor, introduzca un número decimal válido con a lo más %s dígito "
+"decimal."
+msgstr[1] ""
+"Por favor, introduzca un número decimal válido con a lo más %s dígitos "
+"decimales."
+
+#: core/validators.py:436
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Asegúrese de que el fichero que envía tiene al menos %s bytes."
+
+#: core/validators.py:437
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Asegúrese de que el fichero que envía tiene como máximo %s bytes."
+
+#: core/validators.py:454
+msgid "The format for this field is wrong."
+msgstr "El formato de este campo es incorrecto."
+
+#: core/validators.py:469
+msgid "This field is invalid."
+msgstr "Este campo no es válido."
+
+#: core/validators.py:505
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "No pude obtener nada de %s."
+
+#: core/validators.py:508
+#, python-format
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"La URL %(url)s devolvió la cabecera Content-Type '%(contenttype)s', que no "
+"es válida."
+
+#: core/validators.py:541
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Por favor, cierre la etiqueta %(tag)s de la línea %(line)s. (La línea "
+"empieza por \"%(start)s\".)"
+
+#: core/validators.py:545
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Parte del texto que comienza en la línea %(line)s no está permitido en ese "
+"contexto. (La línea empieza por \"%(start)s\".)"
+
+#: core/validators.py:550
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"El \"%(attr)s\" de la línea %(line)s no es un atributo válido. (La línea "
+"empieza por \"%(start)s\".)"
+
+#: core/validators.py:555
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"La \"<%(tag)s>\" de la línea %(line)s no es una etiqueta válida. (La línea "
+"empieza por \"%(start)s\".)"
+
+#: core/validators.py:559
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"A una etiqueta de la línea %(line)s le faltan uno o más atributos "
+"requeridos. (La línea empieza por \"%(start)s\".)"
+
+#: core/validators.py:564
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"El atributo \"%(attr)s\" de la línea %(line)s tiene un valor que no es "
+"válido. (La línea empieza por \"%(start)s\".)"
+
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Asegúrese de que su texto tiene menos de %s carácter."
+msgstr[1] "Asegúrese de que su texto tiene menos de %s caracteres."
+
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "No se permiten saltos de línea."
+
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Escoja una opción válida; '%(data)s' no está en %(choices)s."
+
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "El fichero enviado está vacío."
+
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Introduzca un número entero entre -32,768 y 32,767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Introduzca un número positivo."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Introduzca un número entero entre 0 y 32,767."
+
+#: contrib/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "nombre de módulo python"
+
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr "tipo de contenido"
+
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "tipos de contenido"
+
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:318
+msgid "URL"
+msgstr "URL"
+
+#: contrib/flatpages/models.py:8
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Ejemplo: '/about/contact/'. Asegúrese de que pone barras al principio y al "
+"final."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "título"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "contenido"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "admitir comentarios"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "nombre de plantilla"
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Ejemplo: 'flatpages/contact_page.html'. Si no es proporcionado, el sistema usará "
+"'flatpages/default.html'."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "debe estar registrado"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "página estática"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "páginas estáticas"
+
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Sesión terminada"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "nombre"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "nombre en código"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "permiso"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "permisos"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "grupo"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "grupos"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "nombre de usuario"
+
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"Requerido. 30 caracteres o menos. Sólo caracteres alfanuméricos (letras, "
+"dígutos y guiones bajos)."
+
+#: contrib/auth/models.py:91
+msgid "first name"
+msgstr "nombre"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "apellidos"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "dirección de correo"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "clave"
+
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Use'[algo]$[sal]$[hash hexadecimal]' o use <a href=\"password/\">el "
+"formulario para cambiar la contraseña</a>."
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "es staff"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Indica si el usuario puede entrar en este sitio de administración."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "activo"
+
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Indica si el usuario puede entrar en este sitio de administración. Desmarque "
+"esto en lugar de borrar la cuenta."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "es superusuario"
+
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Indica que este usuario tiene todos los permisos sin asignárselos "
+"explícitamente."
+
+#: contrib/auth/models.py:98
+msgid "last login"
+msgstr "Último registro"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "fecha de creación"
+
+#: 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 ""
+"Además de los permisos asignados manualmente, este usuario también tendrá "
+"todos los permisos de los grupos en los que esté."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "permisos"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "usuario"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "usuarios"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Información personal"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Permisos"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Fechas importantes"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Grupos"
+
+#: contrib/auth/models.py:258
+msgid "message"
+msgstr "mensaje"
+
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr "Las dos contraseñas no coinciden."
+
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
+msgstr "Ya existe  un usuario con este nombre."
+
+#: contrib/auth/forms.py:53
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Tu navegador de internet parece no tener las cookies habilitadas. Las "
+"cookies se necesitan para poder ingresar."
+
+#: 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 ""
+"Por favor, introduzca un correcto nombre de usuario y contraseña. Note que "
+"ambos campos son sensibles a mayúsculas/minúsculas."
+
+#: contrib/auth/forms.py:62
+msgid "This account is inactive."
+msgstr "Esta cuenta está inactiva."
+
+#: contrib/auth/forms.py:85
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Esta dirección de correo electrónico no tiene una cuenta de usuario "
+"asociada. ¿Está seguro de que se ha registrado?"
+
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
+msgstr "Las contraseñas introducidas en los campos 'nueva contraseña' no coinciden."
+
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr ""
+"Tu contraseña antígua es incorrecta. Por favor, vuelve a introducirla "
+"correctamente."
+
 #: contrib/comments/models.py:67 contrib/comments/models.py:166
 msgid "object ID"
 msgstr "ID de objeto"
@@ -77,7 +1167,7 @@
 msgid "is public"
 msgstr "es público"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:307
 msgid "IP address"
 msgstr "Dirección IP"
 
@@ -94,9 +1184,8 @@
 "\"Este comentario ha sido eliminado\"."
 
 #: contrib/comments/models.py:91
-#, fuzzy
 msgid "comments"
-msgstr "comentario"
+msgstr "comentarios"
 
 #: contrib/comments/models.py:131 contrib/comments/models.py:207
 msgid "Content object"
@@ -130,14 +1219,12 @@
 msgstr "aprobado por el staff"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
-msgstr "Comentario libre"
+msgstr "comentario libre"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
-msgstr "Comentarios libres"
+msgstr "comentarios libres"
 
 #: contrib/comments/models.py:233
 msgid "score"
@@ -148,19 +1235,17 @@
 msgstr "fecha de la puntuación"
 
 #: contrib/comments/models.py:237
-#, fuzzy
 msgid "karma score"
-msgstr "Punto karma"
+msgstr "punto karma"
 
 #: contrib/comments/models.py:238
-#, fuzzy
 msgid "karma scores"
-msgstr "Puntos karma"
+msgstr "puntos karma"
 
 #: contrib/comments/models.py:242
 #, python-format
 msgid "%(score)d rating by %(user)s"
-msgstr "Puntuado %(score)d por %(user)s"
+msgstr "puntuado %(score)d por %(user)s"
 
 #: contrib/comments/models.py:258
 #, python-format
@@ -178,14 +1263,12 @@
 msgstr "fecha de la marca"
 
 #: contrib/comments/models.py:268
-#, fuzzy
 msgid "user flag"
-msgstr "Marca de usuario"
+msgstr "marca de usuario"
 
 #: contrib/comments/models.py:269
-#, fuzzy
 msgid "user flags"
-msgstr "Marcas de usuario"
+msgstr "marcas de usuario"
 
 #: contrib/comments/models.py:273
 #, python-format
@@ -197,38 +1280,92 @@
 msgstr "fecha de eliminación"
 
 #: contrib/comments/models.py:280
-#, fuzzy
 msgid "moderator deletion"
-msgstr "Eliminación de moderador"
+msgstr "eliminación de moderador"
 
 #: contrib/comments/models.py:281
-#, fuzzy
 msgid "moderator deletions"
-msgstr "Eliminaciones de moderador"
+msgstr "eliminaciones de moderador"
 
 #: contrib/comments/models.py:285
 #, python-format
 msgid "Moderator deletion by %r"
 msgstr "Eliminación del moderador %r"
 
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Los usuarios anónimos no pueden votar"
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Tu nombre:"
 
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "ID de comentario no válido"
+#: contrib/comments/templates/comments/freeform.html:5
+#: contrib/comments/templates/comments/form.html:28
+msgid "Comment:"
+msgstr "Comentario:"
 
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "No puedes votarte tú mismo"
+#: contrib/comments/templates/comments/freeform.html:10
+#: contrib/comments/templates/comments/form.html:35
+msgid "Preview comment"
+msgstr "Previsualizar comentario"
 
-#: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:17
+msgid "Username:"
+msgstr "Usuario:"
+
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: 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 "Terminar sesión"
+
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Clave:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "¿Has olvidado tu contraseña?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Calificaciones"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Requerido"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Opcional"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Postea una fotografía"
+
+#: contrib/comments/views/comments.py:27
+msgid "This rating is required because you've entered at least one other rating."
 msgstr "Se precisa esta puntuación porque ha introducido al menos otra más."
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -251,32 +1388,35 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
 "\n"
 "%(text)s"
 msgstr ""
+"Este comentario ha sido colocado por un usuario poco preciso: \n"
+"\n"
+"%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "Sólo se admite POST"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "No se proporcionó uno o más de los siguientes campos requeridos"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr ""
 "Alguien está jugando con el formulario de comentarios (violación de "
 "seguridad)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
@@ -290,79 +1430,66 @@
 msgid "The comment form didn't provide either 'preview' or 'post'"
 msgstr "El formulario de comentario no proporcionó 'previsualizar' ni 'enviar'"
 
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "Usuario:"
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Los usuarios anónimos no pueden votar"
 
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Clave:"
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "ID de comentario no válido"
 
-#: contrib/comments/templates/comments/form.html:6
-#, fuzzy
-msgid "Forgotten your password?"
-msgstr "Cambiar mi clave"
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "No puedes votarte tú mismo"
 
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "Terminar sesión"
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "redirigir desde"
 
-#: contrib/comments/templates/comments/form.html:12
-#, fuzzy
-msgid "Ratings"
-msgstr "calificación 1"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
 msgstr ""
+"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejeplo: '/"
+"events/search/'."
 
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr ""
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "redirigir a"
 
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
 msgstr ""
+"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que "
+"empiece con 'http://'."
 
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-#, fuzzy
-msgid "Comment:"
-msgstr "Comentario"
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "redirección"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-#, fuzzy
-msgid "Preview comment"
-msgstr "Comentario libre"
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "redirecciones"
 
-#: contrib/comments/templates/comments/freeform.html:4
-#, fuzzy
-msgid "Your name:"
-msgstr "nombre de usuario"
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "nombre de dominio"
 
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "nombre para mostrar"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "sitio"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "sitios"
+
 #: contrib/admin/filterspecs.py:40
 #, python-format
 msgid ""
@@ -373,7 +1500,7 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "Todo"
 
@@ -397,18 +1524,6 @@
 msgid "This year"
 msgstr "Este año"
 
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "Sí"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "No"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "Desconocido"
-
 #: contrib/admin/models.py:16
 msgid "action time"
 msgstr "hora de acción"
@@ -437,266 +1552,181 @@
 msgid "log entries"
 msgstr "entradas de registro"
 
-#: contrib/admin/templatetags/admin_list.py:228
-msgid "All dates"
-msgstr "Todas las fechas"
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Actualmente:"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Modificar:"
 
-#: contrib/admin/views/decorators.py:23
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-msgstr "Identificarse"
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Fecha:"
 
-#: contrib/admin/views/decorators.py:61
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Por favor, identifíquese de nuevo, porque su sesión ha caducado. No se "
-"preocupe: se ha guardado su envío."
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Hora:"
 
-#: contrib/admin/views/decorators.py:68
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Parece que su navegador no está configurado para aceptar cookies. Actívelas "
-"por favor, recargue esta página, e inténtelo de nuevo."
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: 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 "Cambiar clave"
 
-#: contrib/admin/views/decorators.py:82
-msgid "Usernames cannot contain the '@' character."
-msgstr "Los nombres de usuario no pueden contener el carácter '@'."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/base.html:30
+#: contrib/admin/templates/admin/change_list.html:6
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/auth/user/change_password.html:12
+#: 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/registration/password_change_done.html:4
+msgid "Home"
+msgstr "Inicio"
 
-#: contrib/admin/views/decorators.py:84
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
-"lugar."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: 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 "Documentación"
 
-#: contrib/admin/views/main.py:226
-msgid "Site administration"
-msgstr "Sitio administrativo"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Bookmarklets"
 
-#: contrib/admin/views/main.py:260
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Se añadió con éxito el %(name)s \"%(obj)s\"."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "Bookmarklets de documentación"
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
-msgid "You may edit it again below."
-msgstr "Puede editarlo de nuevo abajo."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">Para instalar bookmarklets, arrastre el enlace a su barra\n"
+"de favoritos, o pulse con el botón derecho el enlace y añádalo a sus "
+"favoritos.\n"
+"Ahora puede escoger el bookmarklet desde cualquier página en el sitio.\n"
+"Observer que algunos de estos bookmarklets precisan que esté viendo\n"
+"el sitio desde un computador señalado como \"interno\" (hable\n"
+"con su administrador de sistemas si no está seguro de si el suyo lo es).</"
+"p>\n"
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
-#, python-format
-msgid "You may add another %s below."
-msgstr "Puede agregar otro %s abajo."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "Documentación de esta página"
 
-#: contrib/admin/views/main.py:290
-#, python-format
-msgid "Add %s"
-msgstr "Agregar %s"
+#: 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 "Le lleva desde cualquier página a la documentación de la vista que la genera."
 
-#: contrib/admin/views/main.py:336
-#, python-format
-msgid "Added %s."
-msgstr "Agregado %s."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "Mostrar ID de objeto"
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "y"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Muestra el tipo de contenido e ID unívoco de las páginas que representan un "
+"único objeto."
 
-#: contrib/admin/views/main.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "Modificado %s."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "Editar este objeto (ventana actual)"
 
-#: contrib/admin/views/main.py:340
-#, python-format
-msgid "Deleted %s."
-msgstr "Borrado %s."
-
-#: contrib/admin/views/main.py:343
-msgid "No fields changed."
-msgstr "No ha cambiado ningún campo."
-
-#: contrib/admin/views/main.py:346
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Se modificó con éxito el %(name)s \"%(obj)s."
-
-#: contrib/admin/views/main.py:354
-#, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
 msgstr ""
-"Se agregó con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo."
+"Le lleva a la página de administración de páginas que representan un único "
+"objeto."
 
-#: contrib/admin/views/main.py:392
-#, python-format
-msgid "Change %s"
-msgstr "Modificar %s"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "Editar este objeto (nueva ventana)"
 
-#: contrib/admin/views/main.py:470
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Como antes, pero abre la página de administración en una nueva ventana."
 
-#: contrib/admin/views/main.py:475
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Uno o más %(fieldname)s en %(name)s:"
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Error del servidor"
 
-#: contrib/admin/views/main.py:508
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"."
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Error del servidor (500)"
 
-#: contrib/admin/views/main.py:511
-msgid "Are you sure?"
-msgstr "¿Está seguro?"
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Error de servidor <em>(500)</em>"
 
-#: contrib/admin/views/main.py:533
-#, python-format
-msgid "Change history: %s"
-msgstr "Modificar histórico: %s"
+#: 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 ""
+"Ha ocurrido un error. Se ha informado a los administradores del sitio "
+"mediante correo electrónico y debería arreglarse en breve. Gracias por su "
+"paciencia"
 
-#: contrib/admin/views/main.py:565
-#, python-format
-msgid "Select %s"
-msgstr "Escoja %s"
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Buscar"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/templates/admin/search_form.html:10
 #, python-format
-msgid "Select %s to change"
-msgstr "Escoja %s para modificar"
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 resultado"
+msgstr[1] "%(counter)s resultados"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
-msgid "Integer"
-msgstr "Entero"
-
-#: contrib/admin/views/doc.py:278
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadero o Falso)"
-
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/templates/admin/search_form.html:10
 #, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "Cadena (máximo %(maxlength)s)"
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s total"
 
-#: contrib/admin/views/doc.py:280
-msgid "Comma-separated integers"
-msgstr "Enteros separados por comas"
-
-#: contrib/admin/views/doc.py:281
-msgid "Date (without time)"
-msgstr "Fecha (sin hora)"
-
-#: contrib/admin/views/doc.py:282
-msgid "Date (with time)"
-msgstr "Fecha (con hora)"
-
-#: contrib/admin/views/doc.py:283
-msgid "E-mail address"
-msgstr "Dirección de correo electrónico"
-
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
-msgid "File path"
-msgstr "Ruta de fichero"
-
-#: contrib/admin/views/doc.py:285
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: contrib/admin/views/doc.py:291
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadero, Falso o Nulo)"
-
-#: contrib/admin/views/doc.py:292
-msgid "Relation to parent model"
-msgstr "Relación con el modelo padre"
-
-#: contrib/admin/views/doc.py:293
-msgid "Phone number"
-msgstr "Número de teléfono"
-
-#: contrib/admin/views/doc.py:298
-msgid "Text"
-msgstr "Texto"
-
-#: contrib/admin/views/doc.py:299
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:301
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado de los EEUU (dos letras mayúsculas)"
-
-#: contrib/admin/views/doc.py:302
-msgid "XML text"
-msgstr "Texto XML"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Documentation"
-msgstr "Documentación"
-
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "Cambiar clave"
-
 #: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_reset_form.html:4
-#: contrib/admin/templates/registration/logged_out.html:4
-#: contrib/admin/templates/registration/password_reset_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Home"
-msgstr "Inicio"
-
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 msgid "History"
 msgstr "Histórico"
 
@@ -714,7 +1744,7 @@
 
 #: contrib/admin/templates/admin/object_history.html:26
 msgid "DATE_WITH_TIME_FULL"
-msgstr ""
+msgstr "j M Y P"
 
 #: contrib/admin/templates/admin/object_history.html:36
 msgid ""
@@ -732,27 +1762,49 @@
 msgid "Django administration"
 msgstr "Administración de Django"
 
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Error del servidor"
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "Bienvenido,"
 
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Error del servidor (500)"
+#: contrib/admin/templates/admin/login.html:25
+#: contrib/admin/views/decorators.py:24
+msgid "Log in"
+msgstr "Identificarse"
 
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Error de servidor <em>(500)</em>"
+#: contrib/admin/templates/admin/change_list.html:12
+#, python-format
+msgid "Add %(name)s"
+msgstr "Agregar %(name)s"
 
-#: contrib/admin/templates/admin/500.html:10
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
+msgstr "Eliminar"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
 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."
+"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 ""
-"Ha ocurrido un error. Se ha informado a los administradores del sitio "
-"mediante correo electrónico y debería arreglarse en breve. Gracias por su "
-"paciencia"
+"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación "
+"de objetos relacionados, pero su cuenta no tiene permiso para borrar los "
+"siguientes tipos de objetos:"
 
+#: 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 ""
+"¿Está seguro de que quiere borrar los %(object_name)s \"%(escaped_object)s"
+"\"? Se borrarán los siguientes objetos relacionados:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "Sí, estoy seguro"
+
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
@@ -762,11 +1814,36 @@
 msgid "We're sorry, but the requested page could not be found."
 msgstr "Lo sentimos, pero no se encuentra la página solicitada."
 
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filtro"
+
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "Grabar como nuevo"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "Grabar y añadir otro"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "Grabar y continuar editando"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "Grabar"
+
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modelos disponibles en la aplicación %(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"
@@ -792,107 +1869,78 @@
 msgid "None available"
 msgstr "Ninguno disponible"
 
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Agregar %(name)s"
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Mostrarlo todo"
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "¿Ha <a href=\"/password_reset/\">olvidado su clave</a>?"
-
-#: contrib/admin/templates/admin/base.html:23
-msgid "Welcome,"
-msgstr "Bienvenido,"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "Eliminar"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr ""
-"Eliminar el %(object_name)s '%(object)s' provocaría la eliminación de "
-"objetos relacionados, pero su cuenta no tiene permiso para borrar los "
-"siguientes tipos de objetos:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"¿Está seguro de que quiere borrar los %(object_name)s \"%(object)s\"? Se "
-"borrarán los siguientes objetos relacionados:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-msgstr "Sí, estoy seguro"
-
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(title)s "
-msgstr " Por %(title)s "
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Buscar"
-
-#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/change_form.html:22
 msgid "View on site"
 msgstr "Ver en el sitio"
 
-#: contrib/admin/templates/admin/change_form.html:30
+#: 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] "Por favor, corrija el siguiente error."
 msgstr[1] "Por favor, corrija los siguientes errores."
 
-#: contrib/admin/templates/admin/change_form.html:48
+#: contrib/admin/templates/admin/change_form.html:50
 msgid "Ordering"
 msgstr "Ordenación"
 
-#: contrib/admin/templates/admin/change_form.html:51
+#: contrib/admin/templates/admin/change_form.html:53
 msgid "Order:"
 msgstr "Orden:"
 
-#: contrib/admin/templates/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "Grabar como nuevo"
+#: 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 ""
+"Algo va mal con la instalación de la base de datos. Asegúrate que las tablas "
+"necesarias han sido creadas, y que la base de datos puede ser leida por el "
+"usuario apropiado."
 
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "Grabar y añadir otro"
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " Por %(filter_title)s "
 
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Grabar y continuar editando"
+#: 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 ""
+"Primero, introduzca un nombre de usuario y una contraseña. Luego, podrá "
+"editar el resto de opciones del usuario."
 
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Grabar"
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Nombre de usuario"
 
-#: 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 "Cambio de clave"
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+msgid "Password"
+msgstr "Contraseña"
 
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "Cambio de clave exitoso"
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+msgid "Password (again)"
+msgstr "Contraseña (de nuevo)"
 
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "Su clave ha sido cambiada."
+#: 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 "Introduzca la misma contraseña que arriba, para verificación"
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr ""
+"Introduzca una nueva contraseña para el usuario <strong>%(username)s</"
+"strong>."
+
 #: 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
@@ -924,43 +1972,6 @@
 msgid "Log in again"
 msgstr "Identificarse de nuevo"
 
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Recuperación de clave exitosa"
-
-#: 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 ""
-"Le hemos enviado una clave nueva a la dirección que ha suministrado. Debería "
-"recibirla en breve."
-
-#: 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 ""
-"Por favor, introduzca su clave antigua, por seguridad, y después introduzca "
-"la nueva clave dos veces para verificar que la ha escrito correctamente."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Clave antigua:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "Clave nueva:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Confirme clave:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Cambiar mi clave"
-
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
 msgstr "Está recibiendo este mensaje debido a que solicitó recuperar la clave"
@@ -992,1064 +2003,369 @@
 msgid "The %(site_name)s team"
 msgstr "El equipo de %(site_name)s"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "Bookmarklets"
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Recuperación de clave exitosa"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "Bookmarklets de documentación"
-
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+#: contrib/admin/templates/registration/password_reset_done.html:12
 msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site.  Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
 msgstr ""
-"\n"
-"<p class=\"help\">Para instalar bookmarklets, arrastre el enlace a su barra\n"
-"de favoritos, o pulse con el botón derecho el enlace y añádalo a sus "
-"favoritos.\n"
-"Ahora puede escoger el bookmarklet desde cualquier página en el sitio.\n"
-"Observer que algunos de estos bookmarklets precisan que esté viendo\n"
-"el sitio desde un computador señalado como \"interno\" (hable\n"
-"con su administrador de sistemas si no está seguro de si el suyo lo es).</"
-"p>\n"
+"Le hemos enviado una clave nueva a la dirección que ha suministrado. Debería "
+"recibirla en breve."
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "Documentación de esta página"
+#: 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 "Cambio de clave"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:20
+#: contrib/admin/templates/registration/password_change_form.html:12
 msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
+"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 ""
-"Le lleva desde cualquier página a la documentación de la vista que la genera."
+"Por favor, introduzca su clave antigua, por seguridad, y después introduzca "
+"la nueva clave dos veces para verificar que la ha escrito correctamente."
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "Mostrar ID de objeto"
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Clave antigua:"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Muestra el tipo de contenido e ID unívoco de las páginas que representan un "
-"único objeto."
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Clave nueva:"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "Editar este objeto (ventana actual)"
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirme clave:"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:26
-msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Le lleva a la página de administración de páginas que representan un único "
-"objeto."
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Cambiar mi clave"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "Editar este objeto (nueva ventana)"
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Cambio de clave exitoso"
 
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr ""
-"Como antes, pero abre la página de administración en una nueva ventana."
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Su clave ha sido cambiada."
 
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Fecha:"
+#: contrib/admin/templatetags/admin_list.py:238
+msgid "All dates"
+msgstr "Todas las fechas"
 
-#: contrib/admin/templates/widget/date_time.html:4
-#, fuzzy
-msgid "Time:"
-msgstr "Hora"
-
-#: contrib/admin/templates/widget/file.html:2
-#, fuzzy
-msgid "Currently:"
-msgstr "Actualmente"
-
-#: contrib/admin/templates/widget/file.html:3
-#, fuzzy
-msgid "Change:"
-msgstr "Modificar"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirigir desde"
-
-#: contrib/redirects/models.py:8
+#: contrib/admin/views/decorators.py:62
 msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
+"Please log in again, because your session has expired. Don't worry: Your "
+"submission has been saved."
 msgstr ""
-"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejeplo: '/"
-"events/search/'."
+"Por favor, identifíquese de nuevo, porque su sesión ha caducado. No se "
+"preocupe: se ha guardado su envío."
 
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirigir a"
-
-#: contrib/redirects/models.py:10
+#: contrib/admin/views/decorators.py:69
 msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
 msgstr ""
-"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que "
-"empiece con 'http://'."
+"Parece que su navegador no está configurado para aceptar cookies. Actívelas "
+"por favor, recargue esta página, e inténtelo de nuevo."
 
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "redirección"
+#: contrib/admin/views/decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Los nombres de usuario no pueden contener el carácter '@'."
 
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "redirecciones"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+#: contrib/admin/views/decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
-"Ejemplo: '/about/contact/'. Asegúrese de que pone barras al principio y al "
-"final."
+"Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
+"lugar."
 
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "título"
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "etiqueta:"
 
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "contenido"
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "filtro:"
 
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "admitir comentarios"
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "vista:"
 
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "nombre de plantilla"
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "Applicación %r no encontrada"
 
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Ejemplo: 'flatpages/contact_page'. Si no lo proporciona, el sistema usará "
-"'flatpages/default'."
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr "El modelo %(model_name)s no se ha encontrado en la aplicación %(app_label)r"
 
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "debe estar registrado"
+#: contrib/admin/views/doc.py:184
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr "el objeto relacionado`%(app_label)s.%(data_type)s` "
 
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Si está marcado, sólo los usuarios registrados podrán ver la página."
+#: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207
+#: contrib/admin/views/doc.py:222 contrib/admin/views/doc.py:227
+msgid "model:"
+msgstr "modelo:"
 
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "página estática"
+#: contrib/admin/views/doc.py:216
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`"
 
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "páginas estáticas"
+#: contrib/admin/views/doc.py:222
+#, python-format
+msgid "all %s"
+msgstr "todo %s"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
-msgid "name"
-msgstr "nombre"
+#: contrib/admin/views/doc.py:227
+#, python-format
+msgid "number of %s"
+msgstr "número de %s"
 
-#: contrib/auth/models.py:15
-msgid "codename"
-msgstr "nombre en código"
+#: contrib/admin/views/doc.py:232
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Campos en %s objetos"
 
-#: contrib/auth/models.py:17
-#, fuzzy
-msgid "permission"
-msgstr "Permiso"
+#: contrib/admin/views/doc.py:294 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 "Entero"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
-msgid "permissions"
-msgstr "Permisos"
+#: contrib/admin/views/doc.py:295
+msgid "Boolean (Either True or False)"
+msgstr "Booleano (Verdadero o Falso)"
 
-#: contrib/auth/models.py:29
-#, fuzzy
-msgid "group"
-msgstr "Grupo"
+#: contrib/admin/views/doc.py:296 contrib/admin/views/doc.py:314
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "Cadena (máximo %(maxlength)s)"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
-msgid "groups"
-msgstr "Grupos"
+#: contrib/admin/views/doc.py:297
+msgid "Comma-separated integers"
+msgstr "Enteros separados por comas"
 
-#: contrib/auth/models.py:55
-msgid "username"
-msgstr "nombre de usuario"
+#: contrib/admin/views/doc.py:298
+msgid "Date (without time)"
+msgstr "Fecha (sin hora)"
 
-#: contrib/auth/models.py:56
-msgid "first name"
-msgstr "nombre"
+#: contrib/admin/views/doc.py:299
+msgid "Date (with time)"
+msgstr "Fecha (con hora)"
 
-#: contrib/auth/models.py:57
-msgid "last name"
-msgstr "apellidos"
+#: contrib/admin/views/doc.py:300
+msgid "E-mail address"
+msgstr "Dirección de correo electrónico"
 
-#: contrib/auth/models.py:58
-msgid "e-mail address"
-msgstr "dirección de correo"
+#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:305
+msgid "File path"
+msgstr "Ruta de fichero"
 
-#: contrib/auth/models.py:59
-msgid "password"
-msgstr "clave"
+#: contrib/admin/views/doc.py:303
+msgid "Decimal number"
+msgstr "Número decimal"
 
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Use '[algo]$[salt]$[hexdigest]'"
+#: contrib/admin/views/doc.py:309
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleano (Verdadero, Falso o Nulo)"
 
-#: contrib/auth/models.py:60
-msgid "staff status"
-msgstr "es staff"
+#: contrib/admin/views/doc.py:310
+msgid "Relation to parent model"
+msgstr "Relación con el modelo padre"
 
-#: contrib/auth/models.py:60
-msgid "Designates whether the user can log into this admin site."
-msgstr "Indica si el usuario puede entrar en este sitio de administración."
+#: contrib/admin/views/doc.py:311
+msgid "Phone number"
+msgstr "Número de teléfono"
 
-#: contrib/auth/models.py:61
-msgid "active"
-msgstr "activo"
+#: contrib/admin/views/doc.py:316
+msgid "Text"
+msgstr "Texto"
 
-#: contrib/auth/models.py:62
-msgid "superuser status"
-msgstr "es superusuario"
+#: contrib/admin/views/doc.py:317
+msgid "Time"
+msgstr "Hora"
 
-#: contrib/auth/models.py:63
-msgid "last login"
-msgstr "último registro"
+#: contrib/admin/views/doc.py:319
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estado de los EEUU (dos letras mayúsculas)"
 
-#: contrib/auth/models.py:64
-msgid "date joined"
-msgstr "fecha de creación"
+#: contrib/admin/views/doc.py:320
+msgid "XML text"
+msgstr "Texto XML"
 
-#: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Además de los permisos asignados manualmente, este usuario también tendrá "
-"todos los permisos de los grupos en los que esté."
+#: contrib/admin/views/doc.py:346
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s no parece ser un objeto urlpattern"
 
-#: contrib/auth/models.py:67
-#, fuzzy
-msgid "user permissions"
-msgstr "Permisos"
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Sitio administrativo"
 
-#: contrib/auth/models.py:70
-#, fuzzy
-msgid "user"
-msgstr "Usuario"
-
-#: contrib/auth/models.py:71
-#, fuzzy
-msgid "users"
-msgstr "Usuarios"
-
-#: contrib/auth/models.py:76
-msgid "Personal info"
-msgstr "Información personal"
-
-#: contrib/auth/models.py:77
-msgid "Permissions"
-msgstr "Permisos"
-
-#: contrib/auth/models.py:78
-msgid "Important dates"
-msgstr "Fechas importantes"
-
-#: contrib/auth/models.py:79
-msgid "Groups"
-msgstr "Grupos"
-
-#: contrib/auth/models.py:219
-#, fuzzy
-msgid "message"
-msgstr "Mensaje"
-
-#: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/contenttypes/models.py:25
-#, fuzzy
-msgid "python model class name"
-msgstr "nombre de módulo python"
-
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "tipo de contenido"
-
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "tipos de contenido"
-
-#: contrib/sessions/models.py:35
-msgid "session key"
-msgstr "clave de sesión"
-
-#: contrib/sessions/models.py:36
-msgid "session data"
-msgstr "datos de sesión"
-
-#: contrib/sessions/models.py:37
-msgid "expire date"
-msgstr "fecha de caducidad"
-
-#: contrib/sessions/models.py:41
-msgid "session"
-msgstr "sesión"
-
-#: contrib/sessions/models.py:42
-msgid "sessions"
-msgstr "sesiones"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "nombre de dominio"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "nombre para mostrar"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "sitio"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "sitios"
-
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr ""
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr ""
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr ""
-
-#: utils/dates.py:6
-msgid "Monday"
-msgstr "Lunes"
-
-#: utils/dates.py:6
-msgid "Tuesday"
-msgstr "Martes"
-
-#: utils/dates.py:6
-msgid "Wednesday"
-msgstr "Miércoles"
-
-#: utils/dates.py:6
-msgid "Thursday"
-msgstr "Jueves"
-
-#: utils/dates.py:6
-msgid "Friday"
-msgstr "Viernes"
-
-#: utils/dates.py:7
-msgid "Saturday"
-msgstr "Sábado"
-
-#: utils/dates.py:7
-msgid "Sunday"
-msgstr "Domingo"
-
-#: utils/dates.py:14
-msgid "January"
-msgstr "Enero"
-
-#: utils/dates.py:14
-msgid "February"
-msgstr "Febrero"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "March"
-msgstr "Marzo"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "April"
-msgstr "Abril"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "May"
-msgstr "Mayo"
-
-#: utils/dates.py:14 utils/dates.py:27
-msgid "June"
-msgstr "Junio"
-
-#: utils/dates.py:15 utils/dates.py:27
-msgid "July"
-msgstr "Julio"
-
-#: utils/dates.py:15
-msgid "August"
-msgstr "Agosto"
-
-#: utils/dates.py:15
-msgid "September"
-msgstr "Septiembre"
-
-#: utils/dates.py:15
-msgid "October"
-msgstr "Octubre"
-
-#: utils/dates.py:15
-msgid "November"
-msgstr "Noviembre"
-
-#: utils/dates.py:16
-msgid "December"
-msgstr "Diciembre"
-
-#: utils/dates.py:19
-#, fuzzy
-msgid "jan"
-msgstr "y"
-
-#: 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
-#, fuzzy
-msgid "may"
-msgstr "día"
-
-#: 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 "Ene."
-
-#: utils/dates.py:27
-msgid "Feb."
-msgstr "Feb."
-
-#: utils/dates.py:28
-msgid "Aug."
-msgstr "Ago."
-
-#: utils/dates.py:28
-msgid "Sept."
-msgstr "Sept."
-
-#: utils/dates.py:28
-msgid "Oct."
-msgstr "Oct."
-
-#: utils/dates.py:28
-msgid "Nov."
-msgstr "Nov."
-
-#: utils/dates.py:28
-msgid "Dec."
-msgstr "Dic."
-
-#: utils/timesince.py:12
-msgid "year"
-msgid_plural "years"
-msgstr[0] "año"
-msgstr[1] "años"
-
-#: utils/timesince.py:13
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mes"
-msgstr[1] "meses"
-
-#: utils/timesince.py:14
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: utils/timesince.py:15
-msgid "day"
-msgid_plural "days"
-msgstr[0] "día"
-msgstr[1] "días"
-
-#: utils/timesince.py:16
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-
-#: utils/timesince.py:17
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "Bengalí"
-
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "Checo"
-
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "Galés"
-
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "Danés"
-
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "Alemán"
-
-#: conf/global_settings.py:42
-msgid "Greek"
-msgstr ""
-
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "Inglés"
-
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "Español"
-
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "Francés"
-
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "Gallego"
-
-#: conf/global_settings.py:47
-msgid "Hungarian"
-msgstr ""
-
-#: conf/global_settings.py:48
-msgid "Hebrew"
-msgstr ""
-
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "Islandés"
-
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "Italiano"
-
-#: conf/global_settings.py:51
-msgid "Japanese"
-msgstr ""
-
-#: conf/global_settings.py:52
-msgid "Dutch"
-msgstr ""
-
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "Noruego"
-
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "Brasileño"
-
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "Rumano"
-
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "Ruso"
-
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "Eslovaco"
-
-#: conf/global_settings.py:58
-#, fuzzy
-msgid "Slovenian"
-msgstr "Eslovaco"
-
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "Serbio"
-
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "Sueco"
-
-#: conf/global_settings.py:61
-#, fuzzy
-msgid "Ukrainian"
-msgstr "Brasileño"
-
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "Chino simplificado"
-
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr ""
-
-#: core/validators.py:60
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Este valor debe contener sólo letras, números y guiones bajos."
-
-#: core/validators.py:64
-#, fuzzy
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Este valor debe contener sólo letras, números, guiones bajos y barras (/)."
-
-#: core/validators.py:72
-msgid "Uppercase letters are not allowed here."
-msgstr "No se admiten letras mayúsculas."
-
-#: core/validators.py:76
-msgid "Lowercase letters are not allowed here."
-msgstr "No se admiten letras minúsculas."
-
-#: core/validators.py:83
-msgid "Enter only digits separated by commas."
-msgstr "Introduzca sólo dígitos separados por comas."
-
-#: core/validators.py:95
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Introduzca direcciones de correo válidas separadas por comas."
-
-#: core/validators.py:99
-msgid "Please enter a valid IP address."
-msgstr "Por favor introduzca una dirección IP válida."
-
-#: core/validators.py:103
-msgid "Empty values are not allowed here."
-msgstr "No se admiten valores vacíos."
-
-#: core/validators.py:107
-msgid "Non-numeric characters aren't allowed here."
-msgstr "No se admiten caracteres no numéricos."
-
-#: core/validators.py:111
-msgid "This value can't be comprised solely of digits."
-msgstr "Este valor no puede comprender sólo dígitos."
-
-#: core/validators.py:116
-msgid "Enter a whole number."
-msgstr "Introduzca un número entero."
-
-#: core/validators.py:120
-msgid "Only alphabetical characters are allowed here."
-msgstr "Sólo se admiten caracteres alfabéticos."
-
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
-
-#: core/validators.py:128
-msgid "Enter a valid time in HH:MM format."
-msgstr "Introduzca una hora válida en formato HH:MM."
-
-#: core/validators.py:132 db/models/fields/__init__.py:468
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Introduzca una fecha/hora válida en formato YYYY-MM-DD HH:MM."
-
-#: core/validators.py:136
-msgid "Enter a valid e-mail address."
-msgstr "Introduzca una dirección de correo electrónico válida"
-
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se "
-"trataba de una imagen corrupta."
-
-#: core/validators.py:155
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
 #, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "La URL %s no apunta a una imagen válida."
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "Se añadió con éxito el %(name)s \"%(obj)s\"."
 
-#: core/validators.py:159
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Los números de teléfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" "
-"no es válido."
+#: 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 "Puede editarlo de nuevo abajo."
 
-#: core/validators.py:167
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "La URL %s no apunta a un vídeo QuickTime válido."
+msgid "You may add another %s below."
+msgstr "Puede agregar otro %s abajo."
 
-#: core/validators.py:171
-msgid "A valid URL is required."
-msgstr "Se precisa una URL válida."
-
-#: core/validators.py:185
+#: contrib/admin/views/main.py:289
 #, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Se precisa HTML válido. Los errores específicos son:\n"
-"%s"
+msgid "Add %s"
+msgstr "Agregar %s"
 
-#: core/validators.py:192
+#: contrib/admin/views/main.py:335
 #, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML mal formado: %s"
+msgid "Added %s."
+msgstr "Agregado %s."
 
-#: core/validators.py:202
+#: contrib/admin/views/main.py:337
 #, python-format
-msgid "Invalid URL: %s"
-msgstr "URL no válida: %s"
+msgid "Changed %s."
+msgstr "Modificado %s."
 
-#: core/validators.py:206 core/validators.py:208
+#: contrib/admin/views/main.py:339
 #, python-format
-msgid "The URL %s is a broken link."
-msgstr "La URL %s es un enlace roto."
+msgid "Deleted %s."
+msgstr "Borrado %s."
 
-#: core/validators.py:214
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Introduzca una abreviatura válida de estado de los EEUU."
+#: contrib/admin/views/main.py:342
+msgid "No fields changed."
+msgstr "No ha cambiado ningún campo."
 
-#: core/validators.py:229
+#: contrib/admin/views/main.py:345
 #, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "¡Vigila tu boca! Aquí no admitimos la palabra %s."
-msgstr[1] "¡Vigila tu boca! Aquí no admitimos las palabras %s."
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "Se modificó con éxito el %(name)s \"%(obj)s."
 
-#: core/validators.py:236
+#: contrib/admin/views/main.py:353
 #, python-format
-msgid "This field must match the '%s' field."
-msgstr "Este campo debe concordar con el campo '%s'."
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "Se agregó con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo."
 
-#: core/validators.py:255
-msgid "Please enter something for at least one field."
-msgstr "Por favor, introduzca algo en al menos un campo."
-
-#: core/validators.py:264 core/validators.py:275
-msgid "Please enter both fields or leave them both empty."
-msgstr "Por favor, rellene ambos campos o deje ambos vacíos."
-
-#: core/validators.py:282
+#: contrib/admin/views/main.py:391
 #, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Se debe proporcionar este campo si %(field)s es %(value)s"
+msgid "Change %s"
+msgstr "Modificar %s"
 
-#: core/validators.py:294
+#: contrib/admin/views/main.py:473
 #, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
 
-#: core/validators.py:313
-msgid "Duplicate values are not allowed."
-msgstr "No se admiten valores duplicados."
-
-#: core/validators.py:336
+#: contrib/admin/views/main.py:478
 #, python-format
-msgid "This value must be a power of %s."
-msgstr "Este valor debe ser una potencia de %s."
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Uno o más %(fieldname)s en %(name)s:"
 
-#: core/validators.py:347
-msgid "Please enter a valid decimal number."
-msgstr "Por favor, introduzca un número decimal válido."
-
-#: core/validators.py:349
+#: contrib/admin/views/main.py:511
 #, 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] ""
-"Por favor, introduzca un número decimal válido con a lo más %s dígito en "
-"total."
-msgstr[1] ""
-"Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
-"total."
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"."
 
-#: core/validators.py:352
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] ""
-"Por favor, introduzca un número decimal válido con a lo más %s dígito "
-"decimal."
-msgstr[1] ""
-"Por favor, introduzca un número decimal válido con a lo más %s dígitos "
-"decimales."
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "¿Está seguro?"
 
-#: core/validators.py:362
+#: contrib/admin/views/main.py:536
 #, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Asegúrese de que el fichero que envía tiene al menos %s bytes."
+msgid "Change history: %s"
+msgstr "Modificar histórico: %s"
 
-#: core/validators.py:363
+#: contrib/admin/views/main.py:570
 #, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Asegúrese de que el fichero que envía tiene como máximo %s bytes."
+msgid "Select %s"
+msgstr "Escoja %s"
 
-#: core/validators.py:376
-msgid "The format for this field is wrong."
-msgstr "El formato de este campo es incorrecto."
-
-#: core/validators.py:391
-msgid "This field is invalid."
-msgstr "Este campo no es válido."
-
-#: core/validators.py:426
+#: contrib/admin/views/main.py:570
 #, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "No pude obtener nada de %s."
+msgid "Select %s to change"
+msgstr "Escoja %s para modificar"
 
-#: core/validators.py:429
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"La URL %(url)s devolvió la cabecera Content-Type '%(contenttype)s', que no "
-"es válida."
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "Erorr en la base de datos"
 
-#: core/validators.py:462
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Por favor, cierre la etiqueta %(tag)s de la línea %(line)s. (La línea "
-"empieza por \"%(start)s\".)"
+#: contrib/admin/views/auth.py:30
+msgid "Add user"
+msgstr "Añadir usuario"
 
-#: core/validators.py:466
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Parte del texto que comienza en la línea %(line)s no está permitido en ese "
-"contexto. (La línea empieza por \"%(start)s\".)"
+#: contrib/admin/views/auth.py:57
+msgid "Password changed successfully."
+msgstr "La clave se ha cambiado exitosamente."
 
-#: core/validators.py:471
+#: contrib/admin/views/auth.py:64
 #, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"El \"%(attr)s\" de la línea %(line)s no es un atributo válido. (La línea "
-"empieza por \"%(start)s\".)"
+msgid "Change password: %s"
+msgstr "Cambiar clave: %s"
 
-#: core/validators.py:476
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"La \"<%(tag)s>\" de la línea %(line)s no es una etiqueta válida. (La línea "
-"empieza por \"%(start)s\".)"
+#: contrib/localflavor/usa/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Introduzca un código zip en el formato XXXXX o XXXX-XXXX."
 
-#: core/validators.py:480
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
 msgstr ""
-"A una etiqueta de la línea %(line)s le faltan uno o más atributos "
-"requeridos. (La línea empieza por \"%(start)s\".)"
+"Introduzca in código postal. Se necesita un espacio entre las dos partes del "
+"código."
 
-#: core/validators.py:485
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"El atributo \"%(attr)s\" de la línea %(line)s tiene un valor que no es "
-"válido. (La línea empieza por \"%(start)s\".)"
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "clave de sesión"
 
-#: db/models/manipulators.py:302
-#, fuzzy, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "Ya existe %(optname)s con este %(fieldname)s."
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "datos de sesión"
 
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "Ya existe %(optname)s con este %(fieldname)s."
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "fecha de caducidad"
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "Este campo es obligatorio."
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "sesión"
 
-#: db/models/fields/__init__.py:337
-#, fuzzy
-msgid "This value must be an integer."
-msgstr "Este valor debe ser una potencia de %s."
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "sesiones"
 
-#: db/models/fields/__init__.py:369
-#, fuzzy
-msgid "This value must be either True or False."
-msgstr "Este valor debe ser una potencia de %s."
-
-#: db/models/fields/__init__.py:385
-#, fuzzy
-msgid "This field cannot be null."
-msgstr "Este campo no es válido."
-
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "Introduzca un nombre de fichero válido"
-
-#: db/models/fields/related.py:43
+#: views/generic/create_update.py:43
 #, python-format
-msgid "Please enter a valid %s."
-msgstr "Por favor, introduzca un %s válido."
+msgid "The %(verbose_name)s was created successfully."
+msgstr "El %(verbose_name)s se ha creado correctamente."
 
-#: db/models/fields/related.py:579
-#, fuzzy
-msgid "Separate multiple IDs with commas."
-msgstr " Separe múltiples IDs con comas."
-
-#: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "Pulse \"Control\" o \"Command\" en un Mac para escoger más de uno."
-
-#: db/models/fields/related.py:625
+#: views/generic/create_update.py:117
 #, 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] ""
-"Por favor, introduzca IDs de %(self)s válidos. El valor %(value)r no es "
-"válido."
-msgstr[1] ""
-"Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
-"válidos."
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "Se actualizó con éxito el %(verbose_name)s."
 
-#: forms/__init__.py:380
+#: views/generic/create_update.py:184
 #, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Asegúrese de que su texto tiene menos de %s carácter."
-msgstr[1] "Asegúrese de que su texto tiene menos de %s caracteres."
+msgid "The %(verbose_name)s was deleted."
+msgstr "El %(verbose_name)s ha sido eliminado."
 
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-msgstr "No se permiten saltos de línea."
-
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Escoja una opción válida; '%(data)s' no está en %(choices)s."
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "El fichero enviado está vacío."
-
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Introduzca un número entero entre -32,768 y 32,767."
-
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "Introduzca un número positivo."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Introduzca un número entero entre 0 y 32,767."
-
-#: template/defaultfilters.py:379
-msgid "yes,no,maybe"
-msgstr "si,no,tal vez"
-
-#~ msgid "Comment"
-#~ msgstr "Comentario"
-
-#~ msgid "Comments"
-#~ msgstr "Comentarios"
-
-#~ msgid "String (up to 50)"
-#~ msgstr "Cadena (máximo 50)"
-
-#~ msgid "label"
-#~ msgstr "etiqueta"
-
-#~ msgid "package"
-#~ msgstr "paquete"
-
-#~ msgid "packages"
-#~ msgstr "paquetes"
-
-#, fuzzy
-#~ 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] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígito en "
-#~ "total."
-#~ msgstr[1] ""
-#~ "Por favor, introduzca un número decimal válido con a lo más %s dígitos en "
-#~ "total."

Modified: vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,15 +1,14 @@
 # Translation of django.po to Argentinean spanish, based on Spanish
 # translation work by Ricardo Javier Cárdenes Medina.
-# This file is distributed under the same license as the PACKAGE package.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
-# Ramiro Morales <rm0 at gmx.net>, 2006.
+# This file is distributed under the same license as the Django package.
+# Copyright (C) 2006,2007 Ramiro Morales <rm0 at gmx.net>
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-06-19 11:19-0300\n"
-"PO-Revision-Date: 2006-05-16 10:05-0300\n"
+"POT-Creation-Date: 2007-02-25 17:21-0300\n"
+"PO-Revision-Date: 2007-02-25 17:46-0300\n"
 "Last-Translator: Ramiro Morales <rm0 at gmx.net>\n"
 "Language-Team: Spanish <es at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -17,15 +16,15 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
-#: contrib/contenttypes/models.py:25
+#: contrib/contenttypes/models.py:26
 msgid "python model class name"
 msgstr "nombre de la clase python del modelo"
 
-#: contrib/contenttypes/models.py:28
+#: contrib/contenttypes/models.py:29
 msgid "content type"
 msgstr "tipo de contenido"
 
-#: contrib/contenttypes/models.py:29
+#: contrib/contenttypes/models.py:30
 msgid "content types"
 msgstr "tipos de contenido"
 
@@ -33,79 +32,107 @@
 msgid "Logged out"
 msgstr "Sesión cerrada"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
 msgid "name"
 msgstr "nombre"
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr "nombre en código"
 
-#: contrib/auth/models.py:17
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr "permiso"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
 msgid "permissions"
 msgstr "permisos"
 
-#: contrib/auth/models.py:29
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr "grupo"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
 msgid "groups"
 msgstr "grupos"
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr "nombre de usuario"
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"Requerido. Longitud máxima 30 caracteres alfanuméricos (letras, dígitos y "
+"guiones bajos)."
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr "nombre"
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr "apellido"
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr "dirección de correo"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr "contraseña"
 
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Use '[algoritmo]$[salt]$[hexdigest]'"
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Use '[algo]$[salt]$[hexdigest]' o use el <a href=\"password/\">formulario de "
+"cambio de contraseña</a>."
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr "es staff"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
 msgstr "Indica si el usuario puede ingresar a este sitio de administración."
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr "activo"
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Indica si el usuario puede ingresar al sitio de administración Django."
+"Desactive este campo en lugar de eliminar usuarios."
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr "es superusuario"
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Indica que este usuario posee todos los permisos, sin asignarle los mismos "
+"explícitamente."
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr "último registro"
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr "fecha de creación"
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -113,39 +140,47 @@
 "Además de los permisos asignados manualmente, este usuario también poseerá "
 "todos los permisos de los grupos a los que pertenezca."
 
-#: contrib/auth/models.py:67
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr "permisos de usuario"
 
-#: contrib/auth/models.py:70
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr "usuario"
 
-#: contrib/auth/models.py:71
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr "usuarios"
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr "Información personal"
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr "Permisos"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr "Fechas importantes"
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr "Grupos"
 
-#: contrib/auth/models.py:219
+#: contrib/auth/models.py:258
 msgid "message"
 msgstr "mensaje"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr "Los dos campos de contraseñas no coinciden entre si."
+
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
+msgstr "Ya existe un usuario con ese nombre."
+
+#: contrib/auth/forms.py:53
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -153,19 +188,36 @@
 "Su navegador Web aparenta no tener cookies activas. Las cookies son un "
 "requerimiento para poder ingresar."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:43
-#: contrib/admin/views/decorators.py:9
+#: 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 ""
-"Por favor ingrese un nombre de usuario y una contraseña correctos. Note que "
-"ambos campos son sensibles a mayúsculas/minúsculas."
+"Por favor introduzca un nombre de usuario y una contraseña correctos. Note "
+"que ambos campos son sensibles a mayúsculas/minúsculas."
 
-#: contrib/auth/forms.py:45
+#: contrib/auth/forms.py:62
 msgid "This account is inactive."
 msgstr "Esta cuenta está inactiva"
 
+#: contrib/auth/forms.py:85
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Esa dirección de e-mail no está asociada a ninguna cuenta de usuario. ¿Está "
+"seguro de que ya se ha registrado?"
+
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
+msgstr "Los dos campos 'nueva contraseña' no coinciden entre si."
+
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr ""
+"La antigua contraseña ingresada es incorrecta. Por favor ingrésela "
+"nuevamente."
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redirigir desde"
@@ -255,7 +307,7 @@
 msgid "is public"
 msgstr "es público"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:292
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
 msgid "IP address"
 msgstr "Dirección IP"
 
@@ -392,12 +444,12 @@
 msgid "No voting for yourself"
 msgstr "No puedes votarte tú mismo"
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid ""
 "This rating is required because you've entered at least one other rating."
 msgstr "Se precisa esta puntuación porque ha introducido al menos otra más."
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -420,35 +472,35 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
-#, fuzzy, python-format
+#: contrib/comments/views/comments.py:116
+#, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
 "\n"
 "%(text)s"
 msgstr ""
-"Este comentario ha sido enviado por un usuario 'sketcky':\n"
+"Este comentario ha sido enviado por un usuario 'semi-anónimo':\n"
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "Sólo se admiten POSTs"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "No se proporcionó uno o más de los siguientes campos requeridos"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr ""
 "Alguien está jugando con el formulario de comentarios (violación de "
 "seguridad)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
@@ -467,12 +519,12 @@
 msgstr "Su nombre:"
 
 #: contrib/comments/templates/comments/freeform.html:5
-#: contrib/comments/templates/comments/form.html:27
+#: contrib/comments/templates/comments/form.html:28
 msgid "Comment:"
 msgstr "Comentario:"
 
-#: contrib/comments/templates/comments/freeform.html:9
-#: contrib/comments/templates/comments/form.html:32
+#: contrib/comments/templates/comments/freeform.html:10
+#: contrib/comments/templates/comments/form.html:35
 msgid "Preview comment"
 msgstr "Previsualizar comentario"
 
@@ -483,20 +535,12 @@
 msgstr "Usuario:"
 
 #: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Contraseña:"
-
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr "Olvidó su contraseña?"
-
-#: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
+#: 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:4
@@ -512,6 +556,15 @@
 msgid "Log out"
 msgstr "Cerrar sesión"
 
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Olvidó su contraseña?"
+
 #: contrib/comments/templates/comments/form.html:12
 msgid "Ratings"
 msgstr "Calificaciones"
@@ -530,7 +583,7 @@
 msgid "Post a photo"
 msgstr "Enviar una foto"
 
-#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:303
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
 msgid "URL"
 msgstr "URL"
 
@@ -559,11 +612,11 @@
 
 #: contrib/flatpages/models.py:13
 msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
 msgstr ""
-"Ejemplo: 'flatpages/contact_page'. Si no lo proporciona, el sistema usará "
-"'flatpages/default'."
+"Ejemplo: 'flatpages/contact_page.html'. Si no lo proporciona, el sistema "
+"usará 'flatpages/default.html'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -581,23 +634,23 @@
 msgid "flat pages"
 msgstr "páginas estáticas"
 
-#: contrib/sessions/models.py:35
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "clave de sesión"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "datos de sesión"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "fecha de caducidad"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "sesión"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "sesiones"
 
@@ -651,15 +704,18 @@
 msgid "This year"
 msgstr "Este año"
 
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
+#: oldforms/__init__.py:572
 msgid "Yes"
 msgstr "Sí"
 
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
+#: oldforms/__init__.py:572
 msgid "No"
 msgstr "No"
 
-#: contrib/admin/filterspecs.py:150
+#: contrib/admin/filterspecs.py:150 newforms/widgets.py:170
+#: oldforms/__init__.py:572
 msgid "Unknown"
 msgstr "Desconocido"
 
@@ -691,16 +747,16 @@
 msgid "log entries"
 msgstr "entradas de registro"
 
-#: contrib/admin/templatetags/admin_list.py:230
+#: contrib/admin/templatetags/admin_list.py:238
 msgid "All dates"
 msgstr "Todas las fechas"
 
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "Identificarse"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
@@ -708,7 +764,7 @@
 "Por favor, identifíquese de nuevo porque su sesión ha caducado. No se "
 "preocupe: se ha guardado su envío."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -716,187 +772,261 @@
 "Parece que su navegador no está configurado para aceptar cookies. Actívelas "
 "por favor, recargue esta página, e inténtelo de nuevo."
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "Los nombres de usuario no pueden contener el carácter '@'."
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
 "lugar."
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
 msgstr "Sitio administrativo"
 
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Se añadió con éxito el %(name)s \"%(obj)s\"."
+msgstr "Se agregó con éxito %(name)s \"%(obj)s\"."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:24
 msgid "You may edit it again below."
-msgstr "Puede editarlo de nuevo abajo."
+msgstr "Puede modificarlo nuevamente abajo."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
 msgstr "Puede agregar otro %s abajo."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr "Agregar %s"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "Agregado %s."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339 db/models/manipulators.py:306
 msgid "and"
 msgstr "y"
 
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "Modifica %s."
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "Elimina %s."
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
-msgstr "No ha cambiado ningún campo."
+msgstr "No ha modificado ningún campo."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Se modificó con éxito el %(name)s \"%(obj)s."
+msgstr "Se modificó con éxito %(name)s \"%(obj)s."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
-"Se agregó con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo."
+"Se agregó con éxito %(name)s \"%(obj)s. Puede modificarlo nuevamente abajo."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "Modificar %s"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:473
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:478
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Uno o más %(fieldname)s en %(name)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:511
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"."
+msgstr "Se eliminó con éxito %(name)s \"%(obj)s\"."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:514
 msgid "Are you sure?"
 msgstr "¿Está seguro?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:536
 #, python-format
 msgid "Change history: %s"
 msgstr "Historia de modificaciones: %s"
 
-#: contrib/admin/views/main.py:567
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s"
 msgstr "Seleccione %s"
 
-#: contrib/admin/views/main.py:567
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s to change"
 msgstr "Seleccione %s a modificar"
 
-#: contrib/admin/views/main.py:743
+#: contrib/admin/views/main.py:758
 msgid "Database error"
 msgstr "Error de base de datos"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:289
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:297
-#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:300
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "etiqueta:"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "Filtrar:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "ver:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "App %r no encontrada"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "Modelo %r no encontrado en app %r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "El objeto relacionado `%s.%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 "modelo:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "objetos relacionados `%s.%s`"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "todos %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "número de %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Campos en %s objetos"
+
+#: 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 "Entero"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "Booleano (Verdadero o Falso)"
 
-#: contrib/admin/views/doc.py:281 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Cadena (máximo %(maxlength)s)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "Enteros separados por comas"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "Fecha (sin hora)"
 
-#: contrib/admin/views/doc.py:284
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "Fecha (con hora)"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "Dirección de correo electrónico"
 
-#: contrib/admin/views/doc.py:286 contrib/admin/views/doc.py:287
-#: contrib/admin/views/doc.py:290
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "Ruta de archivo"
 
-#: contrib/admin/views/doc.py:288
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr "Número decimal"
 
-#: contrib/admin/views/doc.py:294
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "Booleano (Verdadero, Falso o Nulo)"
 
-#: contrib/admin/views/doc.py:295
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr "Relación con el modelo padre"
 
-#: contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "Número de teléfono"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "Texto"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "Hora"
 
-#: contrib/admin/views/doc.py:304
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
 msgstr "Estado de los EEUU (dos letras mayúsculas)"
 
-#: contrib/admin/views/doc.py:305
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "Texto XML"
 
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s no parece ser un objeto urlpattern"
+
+#: contrib/admin/views/auth.py:30
+msgid "Add user"
+msgstr "Agregar usuario"
+
+#: contrib/admin/views/auth.py:57
+msgid "Password changed successfully."
+msgstr "Cambio de contraseña exitoso"
+
+#: contrib/admin/views/auth.py:64
+#, python-format
+msgid "Change password: %s"
+msgstr "Cambiar contraseña: %S"
+
 #: contrib/admin/templates/widget/file.html:2
 msgid "Currently:"
 msgstr "Actualmente"
@@ -916,8 +1046,9 @@
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
+#: 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
@@ -927,8 +1058,11 @@
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
+#: 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/bookmarklets.html:4
@@ -948,9 +1082,10 @@
 #: contrib/admin/templates/admin/change_list.html:6
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
+#: 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
@@ -961,7 +1096,7 @@
 msgstr "Inicio"
 
 #: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 msgid "History"
 msgstr "Historia"
 
@@ -989,15 +1124,15 @@
 "Este objeto no tiene historia de modificaciones. Probablemente no fue "
 "añadido usando este sitio de administración."
 
-#: contrib/admin/templates/admin/change_list.html:11
+#: contrib/admin/templates/admin/change_list.html:12
 #, python-format
 msgid "Add %(name)s"
 msgstr "Agregar %(name)s"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
-msgid " By %(title)s "
-msgstr " Por %(title)s "
+msgid " By %(filter_title)s "
+msgstr " Por %(filter_title)s "
 
 #: contrib/admin/templates/admin/500.html:4
 msgid "Server error"
@@ -1053,6 +1188,11 @@
 msgid "Models available in the %(name)s application."
 msgstr "Modelos disponibles en la aplicación %(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"
@@ -1087,33 +1227,30 @@
 msgid "We're sorry, but the requested page could not be found."
 msgstr "Lo sentimos, pero no se encuentra la página solicitada."
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "¿Ha <a href=\"/password_reset/\">olvidado su contraseña</a>?"
-
 #: contrib/admin/templates/admin/filters.html:4
 msgid "Filter"
 msgstr "Filtrar"
 
-#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/change_form.html:22
 msgid "View on site"
 msgstr "Ver en el sitio"
 
-#: contrib/admin/templates/admin/change_form.html:30
+#: 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] "Por favor, corrija el siguiente error."
 msgstr[1] "Por favor, corrija los siguientes errores."
 
-#: contrib/admin/templates/admin/change_form.html:48
+#: contrib/admin/templates/admin/change_form.html:50
 msgid "Ordering"
 msgstr "Ordenación"
 
-#: contrib/admin/templates/admin/change_form.html:51
+#: contrib/admin/templates/admin/change_form.html:53
 msgid "Order:"
 msgstr "Orden:"
 
-#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "Bienvenido,"
 
@@ -1125,22 +1262,22 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
-"Eliminar el %(object_name)s '%(object)s' provocaría la eliminación de "
-"objetos relacionados, pero su cuenta no tiene permiso para eliminar los "
+"Eliminar el %(object_name)s '%(escaped_object)s' provocaría la eliminación "
+"de objetos relacionados, pero su cuenta no tiene permiso para eliminar los "
 "siguientes tipos de objetos:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"¿Está seguro de que quiere eliminar los %(object_name)s \"%(object)s\"? Se "
-"eliminarán los siguientes objetos relacionados:"
+"¿Está seguro de que quiere eliminar los %(object_name)s \"%(escaped_object)s"
+"\"? Se eliminarán los siguientes objetos relacionados:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -1172,6 +1309,40 @@
 "tablas de la misma hayan sido creadas, y asegúrese de que el usuario "
 "apropiado tenga permisos de escritura en la base de datos."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr ""
+"Introduzca una nueva contraseªna para el usuario <strong>%(username)s</"
+"strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Contraseña:"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Contraseña (de nuevo)"
+
+#: 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 "Para verificación, introduzca la misma contraseña que ingresó arriba."
+
+#: 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 ""
+"Primero, introduzca un nombre de usuario y una contraseña. Luego podrá "
+"configurar opciones adicionales."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Nombre de usuario:"
+
 #: 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
@@ -1359,26 +1530,16 @@
 msgstr ""
 "Como antes, pero abre la página de administración en una nueva ventana."
 
-#: utils/translation.py:363
-msgid "DATE_FORMAT"
-msgstr "j N Y"
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
+msgstr ""
+"Introduzca un postcode. Se requiere un espacio entre ambas partes del "
+"postcode."
 
-#: utils/translation.py:364
-msgid "DATETIME_FORMAT"
-msgstr "j N Y P"
+#: contrib/localflavor/usa/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Introduzca un zip code en el formato XXXXX o XXXXX-XXXX."
 
-#: utils/translation.py:365
-msgid "TIME_FORMAT"
-msgstr "P"
-
-#: utils/translation.py:381
-msgid "YEAR_MONTH_FORMAT"
-msgstr "F Y"
-
-#: utils/translation.py:382
-msgid "MONTH_DAY_FORMAT"
-msgstr "j \\de F"
-
 #: utils/dates.py:6
 msgid "Monday"
 msgstr "Lunes"
@@ -1461,11 +1622,11 @@
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "feb"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mar"
 
 #: utils/dates.py:19
 msgid "apr"
@@ -1473,15 +1634,15 @@
 
 #: utils/dates.py:19
 msgid "may"
-msgstr ""
+msgstr "may"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "jun"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "jul"
 
 #: utils/dates.py:20
 msgid "aug"
@@ -1493,11 +1654,11 @@
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "oct"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
@@ -1509,7 +1670,7 @@
 
 #: utils/dates.py:27
 msgid "Feb."
-msgstr ""
+msgstr "Feb."
 
 #: utils/dates.py:28
 msgid "Aug."
@@ -1521,11 +1682,11 @@
 
 #: utils/dates.py:28
 msgid "Oct."
-msgstr ""
+msgstr "Oct."
 
 #: utils/dates.py:28
 msgid "Nov."
-msgstr ""
+msgstr "Nov."
 
 #: utils/dates.py:28
 msgid "Dec."
@@ -1567,171 +1728,228 @@
 msgstr[0] "minuto"
 msgstr[1] "minutos"
 
-#: conf/global_settings.py:37
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j N Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j N Y P"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "j \\de F"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Árabe"
+
+#: conf/global_settings.py:40
 msgid "Bengali"
 msgstr "Bengalí"
 
-#: conf/global_settings.py:38
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr "Catalán"
+
+#: conf/global_settings.py:42
 msgid "Czech"
 msgstr "Checo"
 
-#: conf/global_settings.py:39
+#: conf/global_settings.py:43
 msgid "Welsh"
 msgstr "Galés"
 
-#: conf/global_settings.py:40
+#: conf/global_settings.py:44
 msgid "Danish"
 msgstr "Danés"
 
-#: conf/global_settings.py:41
+#: conf/global_settings.py:45
 msgid "German"
 msgstr "Alemán"
 
-#: conf/global_settings.py:42
+#: conf/global_settings.py:46
 msgid "Greek"
 msgstr "Griego"
 
-#: conf/global_settings.py:43
+#: conf/global_settings.py:47
 msgid "English"
 msgstr "Inglés"
 
-#: conf/global_settings.py:44
+#: conf/global_settings.py:48
 msgid "Spanish"
 msgstr "Español"
 
-#: conf/global_settings.py:45
+#: conf/global_settings.py:49
 msgid "Argentinean Spanish"
 msgstr "Español Argentino"
 
-#: conf/global_settings.py:46
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "Finlandés"
+
+#: conf/global_settings.py:51
 msgid "French"
 msgstr "Francés"
 
-#: conf/global_settings.py:47
+#: conf/global_settings.py:52
 msgid "Galician"
 msgstr "Gallego"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:53
 msgid "Hungarian"
 msgstr "Húngaro"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:54
 msgid "Hebrew"
 msgstr "Hebreo"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:55
 msgid "Icelandic"
 msgstr "Islandés"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:56
 msgid "Italian"
 msgstr "Italiano"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:57
 msgid "Japanese"
 msgstr "Japonés"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:58
+msgid "Latvian"
+msgstr "Latvio"
+
+#: conf/global_settings.py:59
+msgid "Macedonian"
+msgstr "Macedonio"
+
+#: conf/global_settings.py:60
 msgid "Dutch"
 msgstr "Holandés"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:61
 msgid "Norwegian"
 msgstr "Noruego"
 
-#: conf/global_settings.py:55
+#: conf/global_settings.py:62
+msgid "Polish"
+msgstr "Polaco"
+
+#: conf/global_settings.py:63
 msgid "Brazilian"
 msgstr "Brasileño"
 
-#: conf/global_settings.py:56
+#: conf/global_settings.py:64
 msgid "Romanian"
 msgstr "Rumano"
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:65
 msgid "Russian"
 msgstr "Ruso"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:66
 msgid "Slovak"
 msgstr "Eslovaco"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:67
 msgid "Slovenian"
 msgstr "Esloveno"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:68
 msgid "Serbian"
 msgstr "Serbio"
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:69
 msgid "Swedish"
 msgstr "Sueco"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:70
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:71
+msgid "Turkish"
+msgstr "Turco"
+
+#: conf/global_settings.py:72
 msgid "Ukrainian"
 msgstr "Ucraniano"
 
-#: conf/global_settings.py:63
+#: conf/global_settings.py:73
 msgid "Simplified Chinese"
 msgstr "Chino simplificado"
 
-#: conf/global_settings.py:64
+#: conf/global_settings.py:74
 msgid "Traditional Chinese"
 msgstr "Chino tradicional"
 
-#: db/models/manipulators.py:302
+#: db/models/manipulators.py:305
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-"Ya existen %(object)s con este %(type)s para el %(field)s especificado."
+msgstr "Ya existe un(a) %(object)s con este/a %(type)s para %(field)s."
 
-#: db/models/fields/__init__.py:40
+#: db/models/fields/__init__.py:42
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
 msgstr "Ya existe %(optname)s con este %(fieldname)s."
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:545 db/models/fields/__init__.py:556
-#: forms/__init__.py:346
+#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
+#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450
+#: newforms/fields.py:461 newforms/models.py:177 oldforms/__init__.py:352
 msgid "This field is required."
 msgstr "Este campo es obligatorio."
 
-#: db/models/fields/__init__.py:337
+#: db/models/fields/__init__.py:366
 msgid "This value must be an integer."
 msgstr "Este valor debe ser un número entero."
 
-#: db/models/fields/__init__.py:369
+#: db/models/fields/__init__.py:401
 msgid "This value must be either True or False."
 msgstr "Este valor debe ser True o False."
 
-#: db/models/fields/__init__.py:385
+#: db/models/fields/__init__.py:422
 msgid "This field cannot be null."
 msgstr "Este campo no puede ser nulo."
 
-#: db/models/fields/__init__.py:471 core/validators.py:135
+#: db/models/fields/__init__.py:454 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
+
+#: db/models/fields/__init__.py:521 core/validators.py:156
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr "Introduzca una fecha/hora válida en formato YYYY-MM-DD HH:MM."
 
-#: db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:625
 msgid "Enter a valid filename."
-msgstr "Introduzca un nombre de achivo válido"
+msgstr "Introduzca un nombre de achivo válido."
 
-#: db/models/fields/related.py:43
+#: db/models/fields/related.py:53
 #, python-format
 msgid "Please enter a valid %s."
 msgstr "Por favor, introduzca un %s válido."
 
-#: db/models/fields/related.py:579
+#: db/models/fields/related.py:642
 msgid "Separate multiple IDs with commas."
 msgstr " Separe múltiples IDs con comas."
 
-#: db/models/fields/related.py:581
+#: db/models/fields/related.py:644
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
-"Pulse \"Control\", o \"Command\" en un Mac, para seleccionar más de uno."
+"Mantenga presionada \"Control\" (\"Command\" en un Mac) para seleccionar más "
+"de uno."
 
-#: db/models/fields/related.py:625
+#: db/models/fields/related.py:691
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -1743,108 +1961,86 @@
 "Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
 "válidos."
 
-#: forms/__init__.py:381
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Asegúrese de que su texto tiene menos de %s carácter."
-msgstr[1] "Asegúrese de que su texto tiene menos de %s caracteres."
-
-#: forms/__init__.py:386
-msgid "Line breaks are not allowed here."
-msgstr "No se permiten saltos de línea."
-
-#: forms/__init__.py:485 forms/__init__.py:558 forms/__init__.py:597
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Seleccione una opción válida; '%(data)s' no está en %(choices)s."
-
-#: forms/__init__.py:659 core/validators.py:151 core/validators.py:379
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"No se envió un archivo. Verifique el tipo de codificación en el formulario."
-
-#: forms/__init__.py:661
-msgid "The submitted file is empty."
-msgstr "El archivo enviado está vacío."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Introduzca un número entero entre -32,768 y 32,767."
-
-#: forms/__init__.py:727
-msgid "Enter a positive number."
-msgstr "Introduzca un número positivo."
-
-#: forms/__init__.py:737
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Introduzca un número entero entre 0 y 32,767."
-
-#: core/validators.py:63
+#: core/validators.py:64
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Este valor debe contener sólo letras, números y guiones bajos."
 
-#: core/validators.py:67
+#: core/validators.py:68
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
 msgstr ""
-"Este valor debe contener sólo letras, números, guiones bajos, barras (/) o "
-"slashes."
+"Este valor debe contener sólo letras, números, guiones bajos, guiones o "
+"barras (/)"
 
-#: core/validators.py:75
+#: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"Este valor debe contener sólo letras, números, guiones bajos o guiones."
+
+#: core/validators.py:76
 msgid "Uppercase letters are not allowed here."
 msgstr "No se admiten letras mayúsculas."
 
-#: core/validators.py:79
+#: core/validators.py:80
 msgid "Lowercase letters are not allowed here."
 msgstr "No se admiten letras minúsculas."
 
-#: core/validators.py:86
+#: core/validators.py:87
 msgid "Enter only digits separated by commas."
 msgstr "Introduzca sólo dígitos separados por comas."
 
-#: core/validators.py:98
+#: core/validators.py:99
 msgid "Enter valid e-mail addresses separated by commas."
 msgstr "Introduzca direcciones de correo válidas separadas por comas."
 
-#: core/validators.py:102
+#: core/validators.py:103
 msgid "Please enter a valid IP address."
 msgstr "Por favor introduzca una dirección IP válida."
 
-#: core/validators.py:106
+#: core/validators.py:107
 msgid "Empty values are not allowed here."
 msgstr "No se admiten valores vacíos."
 
-#: core/validators.py:110
+#: core/validators.py:111
 msgid "Non-numeric characters aren't allowed here."
 msgstr "No se admiten caracteres no numéricos."
 
-#: core/validators.py:114
+#: core/validators.py:115
 msgid "This value can't be comprised solely of digits."
 msgstr "Este valor no puede estar formado sólo por dígitos."
 
-#: core/validators.py:119
+#: core/validators.py:120 newforms/fields.py:126
 msgid "Enter a whole number."
 msgstr "Introduzca un número entero."
 
-#: core/validators.py:123
+#: core/validators.py:124
 msgid "Only alphabetical characters are allowed here."
 msgstr "Sólo se admiten caracteres alfabéticos."
 
-#: core/validators.py:127
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "El año debe ser 1900 o posterior."
 
-#: core/validators.py:131
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Fecha no válida: %s."
+
+#: core/validators.py:152
 msgid "Enter a valid time in HH:MM format."
 msgstr "Introduzca una hora válida en formato HH:MM."
 
-#: core/validators.py:139
+#: core/validators.py:161 newforms/fields.py:269
 msgid "Enter a valid e-mail address."
 msgstr "Introduzca una dirección de correo electrónico válida"
 
-#: core/validators.py:155
+#: core/validators.py:173 core/validators.py:444 oldforms/__init__.py:667
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+"No se envió un archivo. Verifique el tipo de codificación en el formulario."
+
+#: core/validators.py:177
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -1852,28 +2048,28 @@
 "Envíe una imagen válida. El archivo que ha enviado no era una imagen o se "
 "trataba de una imagen corrupta."
 
-#: core/validators.py:162
+#: core/validators.py:184
 #, python-format
 msgid "The URL %s does not point to a valid image."
 msgstr "La URL %s no apunta a una imagen válida."
 
-#: core/validators.py:166
+#: core/validators.py:188
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr ""
-"Los números de teléfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" "
-"no es válido."
+"Los números telefónicos deben respetar el formato XXX-XXX-XXXX. \"%s\" no es "
+"válido."
 
-#: core/validators.py:174
+#: core/validators.py:196
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
 msgstr "La URL %s no apunta a un vídeo QuickTime válido."
 
-#: core/validators.py:178
+#: core/validators.py:200
 msgid "A valid URL is required."
 msgstr "Se precisa una URL válida."
 
-#: core/validators.py:192
+#: core/validators.py:214
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
@@ -1882,69 +2078,84 @@
 "Se precisa HTML válido. Los errores específicos son:\n"
 "%s"
 
-#: core/validators.py:199
+#: core/validators.py:221
 #, python-format
 msgid "Badly formed XML: %s"
 msgstr "XML mal formado: %s"
 
-#: core/validators.py:209
+#: core/validators.py:238
 #, python-format
 msgid "Invalid URL: %s"
 msgstr "URL no válida: %s"
 
-#: core/validators.py:213 core/validators.py:215
+#: core/validators.py:243 core/validators.py:245
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr "La URL %s es un enlace roto."
 
-#: core/validators.py:221
+#: core/validators.py:251
 msgid "Enter a valid U.S. state abbreviation."
 msgstr "Introduzca una abreviatura válida de estado de los EEUU."
 
-#: core/validators.py:236
+#: core/validators.py:265
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "¡Vigila tu boca! Aquí no admitimos la palabra %s."
 msgstr[1] "¡Vigila tu boca! Aquí no admitimos las palabras %s."
 
-#: core/validators.py:243
+#: core/validators.py:272
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr "Este campo debe concordar con el campo '%s'."
 
-#: core/validators.py:262
+#: core/validators.py:291
 msgid "Please enter something for at least one field."
 msgstr "Por favor, introduzca algo en al menos un campo."
 
-#: core/validators.py:271 core/validators.py:282
+#: core/validators.py:300 core/validators.py:311
 msgid "Please enter both fields or leave them both empty."
 msgstr "Por favor, rellene ambos campos o deje ambos vacíos."
 
-#: core/validators.py:289
+#: core/validators.py:319
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
 msgstr "Se debe proporcionar este campo si %(field)s es %(value)s"
 
-#: core/validators.py:301
+#: core/validators.py:332
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
 msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
 
-#: core/validators.py:320
+#: core/validators.py:351
 msgid "Duplicate values are not allowed."
 msgstr "No se admiten valores duplicados."
 
-#: core/validators.py:343
+#: core/validators.py:366
 #, python-format
+msgid "This value must be between %s and %s."
+msgstr "Este valor debe ser estar entre %s y %s."
+
+#: core/validators.py:368
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Este valor debe ser al menos %s."
+
+#: core/validators.py:370
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "Este valor debe ser no mayor que %s."
+
+#: core/validators.py:406
+#, python-format
 msgid "This value must be a power of %s."
 msgstr "Este valor debe ser una potencia de %s."
 
-#: core/validators.py:354
+#: core/validators.py:417
 msgid "Please enter a valid decimal number."
 msgstr "Por favor, introduzca un número decimal válido."
 
-#: core/validators.py:356
+#: core/validators.py:421
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
 msgid_plural ""
@@ -1956,7 +2167,7 @@
 "Por favor, introduzca un número decimal válido con un maximo de %s dígitos "
 "en total."
 
-#: core/validators.py:359
+#: core/validators.py:424
 #, python-format
 msgid ""
 "Please enter a valid decimal number with a whole part of at most %s digit."
@@ -1969,7 +2180,7 @@
 "Por favor, introduzca un número decimal válido con un máximo de %s dígitos "
 "enteros."
 
-#: core/validators.py:362
+#: core/validators.py:427
 #, python-format
 msgid "Please enter a valid decimal number with at most %s decimal place."
 msgid_plural ""
@@ -1981,30 +2192,34 @@
 "Por favor, introduzca un número decimal válido con un máximo de %s "
 "posiciones decimales."
 
-#: core/validators.py:372
+#: core/validators.py:437
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Asegúrese de que el archivo que envía tiene al menos %s bytes."
+msgstr ""
+"Asegúrese de que el archivo que envía es de un tamaño mínimo de "
+"%s bytes."
 
-#: core/validators.py:373
+#: core/validators.py:438
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Asegúrese de que el archivo que envía tiene como máximo %s bytes."
+msgstr ""
+"Asegúrese de que el archivo que envía es de un tamaño máximo de "
+"%s bytes."
 
-#: core/validators.py:390
+#: core/validators.py:455
 msgid "The format for this field is wrong."
 msgstr "El formato de este campo es incorrecto."
 
-#: core/validators.py:405
+#: core/validators.py:470
 msgid "This field is invalid."
 msgstr "Este campo no es válido."
 
-#: core/validators.py:441
+#: core/validators.py:506
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr "No pude obtener nada de %s."
 
-#: core/validators.py:444
+#: core/validators.py:509
 #, python-format
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
@@ -2012,7 +2227,7 @@
 "La URL %(url)s devolvió la cabecera Content-Type '%(contenttype)s', que no "
 "es válida."
 
-#: core/validators.py:477
+#: core/validators.py:542
 #, python-format
 msgid ""
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@@ -2021,7 +2236,7 @@
 "Por favor, cierre la etiqueta %(tag)s de la línea %(line)s. (La línea "
 "empieza por \"%(start)s\".)"
 
-#: core/validators.py:481
+#: core/validators.py:546
 #, python-format
 msgid ""
 "Some text starting on line %(line)s is not allowed in that context. (Line "
@@ -2030,7 +2245,7 @@
 "Parte del texto que comienza en la línea %(line)s no está permitido en ese "
 "contexto. (La línea empieza por \"%(start)s\".)"
 
-#: core/validators.py:486
+#: core/validators.py:551
 #, python-format
 msgid ""
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@@ -2039,7 +2254,7 @@
 "El \"%(attr)s\" de la línea %(line)s no es un atributo válido. (La línea "
 "empieza por \"%(start)s\".)"
 
-#: core/validators.py:491
+#: core/validators.py:556
 #, python-format
 msgid ""
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@@ -2048,7 +2263,7 @@
 "La \"<%(tag)s>\" de la línea %(line)s no es una etiqueta válida. (La línea "
 "empieza por \"%(start)s\".)"
 
-#: core/validators.py:495
+#: core/validators.py:560
 #, python-format
 msgid ""
 "A tag on line %(line)s is missing one or more required attributes. (Line "
@@ -2057,7 +2272,7 @@
 "A una etiqueta de la línea %(line)s le faltan uno o más atributos "
 "requeridos. (La línea empieza por \"%(start)s\".)"
 
-#: core/validators.py:500
+#: core/validators.py:565
 #, python-format
 msgid ""
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@@ -2066,18 +2281,126 @@
 "El atributo \"%(attr)s\" de la línea %(line)s tiene un valor que no es "
 "válido. (La línea empieza por \"%(start)s\".)"
 
-#: template/defaultfilters.py:389
+#: template/defaultfilters.py:490
 msgid "yes,no,maybe"
-msgstr "si,no,tal vez"
+msgstr "si,no,talvez"
 
-#, fuzzy
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "Se creó con éxito %(verbose_name)."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "Se actualizó con éxito %(verbose_name)s."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "Se eliminó %(verbose_name)s."
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Asegúrese de que este valor tenga como máximo %d caracteres."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Asegúrese de que este valor tenga al menos %d caracteres."
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Asegúrese de que este valor sea menor o igual a %s."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Asegúrese de que este valor sea mayor o igual a %s."
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Ingrse una fecha válida."
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "Introduzca una hora válida."
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Introduzca una fecha/hora válida."
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Introduzca un valor válido."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Introduzca una URL válida."
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "La URL parece ser un enlace roto."
+
+#: newforms/fields.py:360 newforms/models.py:164
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+"Seleccione una opción válida. Esa opción no es una de las opciones "
+"disponibles."
+
+#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181
+msgid "Enter a list of values."
+msgstr "Introduzca una lista de valores."
+
+#: newforms/fields.py:387 newforms/models.py:187
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr ""
+"Seleccione una opción válida. %s no es una de las opciones disponibles."
+
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Asegúrese de que su texto tiene menos de %s caracter."
+msgstr[1] "Asegúrese de que su texto tiene menos de %s caracteres."
+
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "No se permiten saltos de línea."
+
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Seleccione una opción válida; '%(data)s' no está en %(choices)s."
+
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "El archivo enviado está vacío."
+
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Introduzca un número entero entre -32.768 y 32.767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Introduzca un número positivo."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Introduzca un número entero entre 0 y 32.767."
+
+#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
+#~ msgstr "Use '[algoritmo]$[salt]$[hexdigest]'"
+
+#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+#~ msgstr "¿Ha <a href=\"/password_reset/\">olvidado su contraseña</a>?"
+
 #~ msgid "%(content_type_name)s"
 #~ msgstr "tipos de contenido"
 
-#, fuzzy
-#~ msgid "%(myname)s"
-#~ msgstr "Agregar %(name)s"
-
 #~ msgid "%(result_count)s result"
 #~ msgid_plural "%(counter)s results"
 #~ msgstr[0] "un resultado"

Modified: vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,15 +1,14 @@
 # Argentinean spanish translation for the django-admin JS files, based on
 # Spanish translation work by Jorge Gajon.
-# Copyright (C)
-# This file is distributed under the same license as the PACKAGE package.
-# Ramiro Morales <rm0 at gmx.net>, 2006.
+# This file is distributed under the same license as the Django package.
+# Copyright (C) Ramiro Morales <rm0 at gmx.net>, 2006,2007.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Django JavaScript 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-06-19 12:15-0300\n"
-"PO-Revision-Date: 2006-05-16 10:20-0300\n"
+"POT-Creation-Date: 2007-02-25 17:48-0300\n"
+"PO-Revision-Date: 2007-02-25 17:55-0300\n"
 "Last-Translator: Ramiro Morales <rm0 at gmx.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
@@ -39,7 +38,7 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:54
 msgid "Select your choice(s) and click "
-msgstr "Haga sus elecciones y haga click en "
+msgstr "Seleccione los items a agregar y haga click en "
 
 #: contrib/admin/media/js/SelectFilter2.js:59
 msgid "Clear all"
@@ -51,7 +50,7 @@
 "January February March April May June July August September October November "
 "December"
 msgstr ""
-"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre "
+"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Setiembre Octubre "
 "Noviembre Diciembre"
 
 #: contrib/admin/media/js/dateparse.js:33
@@ -71,49 +70,49 @@
 msgid "Hide"
 msgstr "Ocultar"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Now"
 msgstr "Ahora"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
 msgid "Clock"
 msgstr "Reloj"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
 msgid "Choose a time"
 msgstr "Elija una hora"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:90
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
 msgid "Midnight"
 msgstr "Medianoche"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
 msgid "6 a.m."
 msgstr "6 a.m."
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Noon"
 msgstr "Mediodía"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:96
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:187
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:120
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:181
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
 msgid "Today"
 msgstr "Hoy"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:123
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
 msgid "Calendar"
 msgstr "Calendario"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
 msgid "Yesterday"
 msgstr "Ayer"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
 msgid "Tomorrow"
 msgstr "Mañana"

Added: vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/fi/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2036 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-08-05 14:41+0300\n"
+"PO-Revision-Date: 2006-08-12 23:41+0300\n"
+"Last-Translator: Antti Kaihola <antti.kaihola at ambitone.com>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: db/models/manipulators.py:302
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr ""
+
+#: db/models/fields/related.py:51
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Syöttämäsi %s ei kelpaa."
+
+#: db/models/fields/related.py:618
+msgid "Separate multiple IDs with commas."
+msgstr "Erottele tunnisteet pilkuilla."
+
+#: db/models/fields/related.py:620
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+" Pidä \"Ctrl\"-näppäin (tai Macin \"Command\") pohjassa valitaksesi useita "
+"vaihtoehtoja."
+
+#: db/models/fields/related.py:664
+#, 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] "Syöttämäsi %(self)s-tunniste %(value)r ei kelpaa."
+msgstr[1] "Syöttämäsi %(self)s-tunnisteet %(value)r eivät kelpaa."
+
+#: db/models/fields/__init__.py:40
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s, jolla on tämä %(fieldname)s, on jo olemassa."
+
+#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
+#: forms/__init__.py:346
+msgid "This field is required."
+msgstr "Tämä kenttä vaaditaan."
+
+#: db/models/fields/__init__.py:340
+msgid "This value must be an integer."
+msgstr "Tarvitaan kokonaisluku."
+
+#: db/models/fields/__init__.py:372
+msgid "This value must be either True or False."
+msgstr "Tarvitaan tosi (True) tai epätosi (False)."
+
+#: db/models/fields/__init__.py:388
+msgid "This field cannot be null."
+msgstr "Tämän kentän arvo ei voi olla \"null\"."
+
+#: db/models/fields/__init__.py:415 core/validators.py:127
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Päivämäärän pitää olla muodossa VVVV-KK-PP."
+
+#: db/models/fields/__init__.py:477 core/validators.py:135
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Ajankohdan pitää olla muodossa VVVV-KK-PP TT:MM."
+
+#: db/models/fields/__init__.py:571
+msgid "Enter a valid filename."
+msgstr "Tiedostonimi ei kelpaa."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "arabia"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "bengali"
+
+#: conf/global_settings.py:41
+msgid "Czech"
+msgstr "tšekki"
+
+#: conf/global_settings.py:42
+msgid "Welsh"
+msgstr "wales"
+
+#: conf/global_settings.py:43
+msgid "Danish"
+msgstr "tanska"
+
+#: conf/global_settings.py:44
+msgid "German"
+msgstr "saksa"
+
+#: conf/global_settings.py:45
+msgid "Greek"
+msgstr "kreikka"
+
+#: conf/global_settings.py:46
+msgid "English"
+msgstr "englanti"
+
+#: conf/global_settings.py:47
+msgid "Spanish"
+msgstr "espanja"
+
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "Argentiinan espanja"
+
+#: conf/global_settings.py:49
+msgid "French"
+msgstr "ranska"
+
+#: conf/global_settings.py:50
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:51
+msgid "Hungarian"
+msgstr "unkari"
+
+#: conf/global_settings.py:52
+msgid "Hebrew"
+msgstr "heprea"
+
+#: conf/global_settings.py:53
+msgid "Icelandic"
+msgstr "islanti"
+
+#: conf/global_settings.py:54
+msgid "Italian"
+msgstr "italia"
+
+#: conf/global_settings.py:55
+msgid "Japanese"
+msgstr "japani"
+
+#: conf/global_settings.py:56
+msgid "Dutch"
+msgstr "hollanti"
+
+#: conf/global_settings.py:57
+msgid "Norwegian"
+msgstr "norja"
+
+#: conf/global_settings.py:58
+msgid "Brazilian"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Romanian"
+msgstr "romania"
+
+#: conf/global_settings.py:60
+msgid "Russian"
+msgstr "venäjä"
+
+#: conf/global_settings.py:61
+msgid "Slovak"
+msgstr "slovakia"
+
+#: conf/global_settings.py:62
+msgid "Slovenian"
+msgstr "slovenia"
+
+#: conf/global_settings.py:63
+msgid "Serbian"
+msgstr "serbia"
+
+#: conf/global_settings.py:64
+msgid "Swedish"
+msgstr "ruotsi"
+
+#: conf/global_settings.py:65
+msgid "Tamil"
+msgstr ""
+
+#: conf/global_settings.py:66
+msgid "Ukrainian"
+msgstr "ukraina"
+
+#: conf/global_settings.py:67
+msgid "Simplified Chinese"
+msgstr "kiina (yksinkertaistettu)"
+
+#: conf/global_settings.py:68
+msgid "Traditional Chinese"
+msgstr "kiina (perinteinen)"
+
+#: core/validators.py:63
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) ja alaviivoja (_)."
+
+#: core/validators.py:67
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr "Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) sekä ala-, tavu- ja kauttaviivoja (_ - /)."
+
+#: core/validators.py:75
+msgid "Uppercase letters are not allowed here."
+msgstr "Isot kirjaimet (ABC) eivät kelpaa tässä."
+
+#: core/validators.py:79
+msgid "Lowercase letters are not allowed here."
+msgstr "Pienet kirjaimet (abc) eivät kelpaa tässä."
+
+#: core/validators.py:86
+msgid "Enter only digits separated by commas."
+msgstr "Vain pilkulla erotetut luvut kelpaavat tässä."
+
+#: core/validators.py:98
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Syötä sähköpostiosoitteita pilkuilla erotettuina."
+
+#: core/validators.py:102
+msgid "Please enter a valid IP address."
+msgstr "IP-osoite ei kelpaa."
+
+#: core/validators.py:106
+msgid "Empty values are not allowed here."
+msgstr "Tätä kohtaa ei voi jättää tyhjäksi."
+
+#: core/validators.py:110
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Vain numerot (0-9) kelpaavat tässä."
+
+#: core/validators.py:114
+msgid "This value can't be comprised solely of digits."
+msgstr "Tarvitaan vähintään yksi merkki, joka ei ole numero (0-9)."
+
+#: core/validators.py:119
+msgid "Enter a whole number."
+msgstr "Syötä kokonaisluku."
+
+#: core/validators.py:123
+msgid "Only alphabetical characters are allowed here."
+msgstr "Vain kirjaimet kelpaavat tässä."
+
+#: core/validators.py:131
+msgid "Enter a valid time in HH:MM format."
+msgstr "Ajan täytyy olla muodossa TT:MM."
+
+#: core/validators.py:139
+msgid "Enter a valid e-mail address."
+msgstr "Syötä kelvollinen sähköpostiosoite."
+
+#: core/validators.py:151 core/validators.py:379 forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Tiedostoa ei lähetetty. Tarkista lomakkeen koodaus (encoding)."
+
+#: core/validators.py:155
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr "Kuva ei kelpaa. Lähettämäsi tiedosto ei ole kuva, tai tiedosto on vioittunut."
+
+#: core/validators.py:162
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "Osoittessa %s ei ole kuvaa tai se on vioittunut."
+
+#: core/validators.py:166
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "Puhelinnumeron tulee olla muodossa XXX-XXX-XXXX. \"%s\" ei kelpaa."
+
+#: core/validators.py:174
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "Osoitteessa %s ei ole QuickTime-videota tai se on vioittunut."
+
+#: core/validators.py:178
+msgid "A valid URL is required."
+msgstr "URL-osoite ei kelpaa."
+
+#: core/validators.py:192
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"HTML-koodi ei kelpaa. Virheilmoitus on:\n"
+"%s"
+
+#: core/validators.py:199
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Vääränmuotoinen XML: %s"
+
+#: core/validators.py:209
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL-osoite %s ei kelpaa."
+
+#: core/validators.py:213 core/validators.py:215
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "Osoite %s on rikkoutunut tai väärä linkki."
+
+#: core/validators.py:221
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Syötä USA:n osavaltion lyhenne."
+
+#: core/validators.py:236
+#, 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] "Sanaa \"%s\" ei saa käyttää tässä."
+msgstr[1] "Sanoja \"%s\" ei saa käyttää tässä."
+
+#: core/validators.py:243
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Arvon täytyy olla sama kuin kentässä '%s'."
+
+#: core/validators.py:262
+msgid "Please enter something for at least one field."
+msgstr "Täytä ainakin yksi kenttä."
+
+#: core/validators.py:271 core/validators.py:282
+msgid "Please enter both fields or leave them both empty."
+msgstr "Täytä tai jätä tyhjäksi kummatkin kentät."
+
+#: core/validators.py:289
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Tämä kenttä pitää täyttää, jos %(field)s on %(value)s."
+
+#: core/validators.py:301
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Tämä kenttä pitää täyttää, jos %(field)s ei ole %(value)s."
+
+#: core/validators.py:320
+msgid "Duplicate values are not allowed."
+msgstr "Samaa arvoa ei voi käyttää kahdesti."
+
+#: core/validators.py:343
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Tämän luvun on oltava %s:n potenssi."
+
+#: core/validators.py:354
+msgid "Please enter a valid decimal number."
+msgstr "Desimaaliluku ei kelpaa."
+
+#: core/validators.py:356
+#, 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] "Desimaaliluvussa saa tässä olla yhteensä vain %s merkitsevä numero. Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
+msgstr[1] "Desimaaliluvussa saa tässä olla yhteensä vain %s merkitsevää numeroa. Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
+
+#: core/validators.py:359
+#, 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] "Desimaaliluvun kokonaisosassa saa tässä olla vain %s numero. Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
+msgstr[1] "Desimaaliluvun kokonaisosassa saa tässä olla vain %s numeroa. Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
+
+#: core/validators.py:362
+#, 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] "Tässä saa olla vain %s desimaali. Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
+msgstr[1] "Tässä saa olla vain %s desimaalia. Huomaa, että desimaalierottimena käytetään pilkun (,) sijasta pistettä (.)."
+
+#: core/validators.py:372
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Lähetä vähintään %s tavun kokoinen tiedosto."
+
+#: core/validators.py:373
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Lähetä enintään %s tavun kokoinen tiedosto."
+
+#: core/validators.py:390
+msgid "The format for this field is wrong."
+msgstr "Muoto ei kelpaa."
+
+#: core/validators.py:405
+msgid "This field is invalid."
+msgstr "Tämä arvo ei kelpaa."
+
+#: core/validators.py:441
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Tietoja ei voida noutaa kohteesta: %s."
+
+#: core/validators.py:444
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "Osoitteesta %(url)s saatiin virheellinen Content-Type '%(contenttype)s'."
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr "Rivillä %(line)s oleva tagi %(tag)s pitää sulkea. (Rivi alkaa \"%(start)s\")"
+
+#: core/validators.py:481
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr "Rivillä %(line)s on tekstiä, joka ei kelpaa tässä yhteydessä. (Rivi alkaa \"%(start)s\")"
+
+#: core/validators.py:486
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr "Rivillä %(line)s attribuutti %(attr)s ei kelpaa. (Rivi alkaa \"%(start)s\")"
+
+#: core/validators.py:491
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr "Rivillä %(line)s tagi \"<%(tag)s>\" ei kelpaa. (Rivi alkaa \"%(start)s\")"
+
+#: core/validators.py:495
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr "Rivillä %(line)s yhdestä tagista puuttuu yksi tai useampi attribuutti. (Rivi alkaa \"%(start)s\")"
+
+#: core/validators.py:500
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr "Rivillä %(line)s attribuutin %(attr)s arvo ei kelpaa. (Rivi alkaa \"%(start)s\")"
+
+#: contrib/auth/forms.py:52
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr "Selaimesi ei salli evästeitä. Sisäänkirjautuminen vaatii evästeen."
+
+#: contrib/auth/forms.py:59 contrib/admin/views/decorators.py:10
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr "Käyttäjätunnus tai salasana ei kelpaa. Huomaa, että isot ja pienet kirjaimet ovat merkitseviä."
+
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr "Tämä käyttäjätili ei ole voimassa."
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "nimi"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "koodinimi"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "oikeus"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "oikeudet"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "ryhmä"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "ryhmät"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "tunnus"
+
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr " Vaaditaan. Enintään 30 kirjanta (a-z), numeroa (0-9) tai alaviivaa (_)."
+
+#: contrib/auth/models.py:91
+msgid "first name"
+msgstr "etunimi"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "sukunimi"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "sähköposti"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "salasana"
+
+#: contrib/auth/models.py:94
+msgid "Use '[algo]$[salt]$[hexdigest]'"
+msgstr "(Salasanaa ei näytetä selväkielisenä)"
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "ylläpitäjä"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Ylläpitäjillä on pääsy tähän sivuston ylläpito-osioon."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "voimassa"
+
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr "Määrää, voiko käyttäjä kirjautua sisään. Tällä voi estää käyttäjätilin käytön poistamatta sitä."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "pääkäyttäjä"
+
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "Antaa käyttäjälle kaikki oikeudet ilman, että niitä täytyy erikseen luetella."
+
+#: contrib/auth/models.py:98
+msgid "last login"
+msgstr "viimeksi kirjautunut"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "liittynyt"
+
+#: 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 ""
+"Tässä valittujen oikeuksien lisäksi käyttäjä saa myös kaikki niiden ryhmien "
+"oikeudet, joiden jäsen hän on."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "käyttäjän oikeudet"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "käyttäjä"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "käyttäjät"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Henkilökohtaiset tiedot"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Oikeudet"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Tärkeät päivämäärät"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Ryhmät"
+
+#: contrib/auth/models.py:256
+msgid "message"
+msgstr "viesti"
+
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Kirjautunut ulos"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "tapahtumahetki"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "kohteen tunniste"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "kohteen tiedot"
+
+#: contrib/admin/models.py:21
+msgid "action flag"
+msgstr "tapahtumatyyppi"
+
+#: contrib/admin/models.py:22
+msgid "change message"
+msgstr "selitys"
+
+#: contrib/admin/models.py:25
+msgid "log entry"
+msgstr "lokimerkintä"
+
+#: contrib/admin/models.py:26
+msgid "log entries"
+msgstr "lokimerkinnät"
+
+#: contrib/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>Yksi %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "Kaikki"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "Mikä tahansa päivä"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "Tänään"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "Viimeiset 7 päivää"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "Tässä kuussa"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "Tänä vuonna"
+
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "Kyllä"
+
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "Ei"
+
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: contrib/admin/views/decorators.py:24
+#: contrib/admin/templates/admin/login.html:25
+msgid "Log in"
+msgstr "Kirjaudu sisään"
+
+#: 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 "Kirjaudu uudelleen sisään, koska istuntosi on mennyt umpeen. Muutoksesi ovat silti tallessa."
+
+#: 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 "Selaimesi ei salli evästeitä. Muuta asetukset sallimaan evästeet, lataa tämä sivu uudelleen ja yritä toistamiseen."
+
+#: contrib/admin/views/decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Käyttäjätunnuksessa ei saa olla '@'-merkkiä."
+
+#: contrib/admin/views/decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "Käyttäjätunnus ei ole sama kuin sähköpostiosoite. Kokeile '%s'."
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Sivuston ylläpito"
+
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:14
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" on nyt lisätty."
+
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:345
+#: contrib/admin/views/auth.py:19
+msgid "You may edit it again below."
+msgstr "Voit muokata sitä uudelleen alla."
+
+#: contrib/admin/views/main.py:269 contrib/admin/views/main.py:354
+#, python-format
+msgid "You may add another %s below."
+msgstr "Uusi %s on lisättävissä alla."
+
+#: contrib/admin/views/main.py:287
+#, python-format
+msgid "Add %s"
+msgstr "Uusi %s"
+
+#: contrib/admin/views/main.py:333
+#, python-format
+msgid "Added %s."
+msgstr "Lisätty %s."
+
+#: contrib/admin/views/main.py:333 contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:337
+msgid "and"
+msgstr "ja"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Changed %s."
+msgstr "Muokattu: %s."
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Deleted %s."
+msgstr "Poistettu %s."
+
+#: contrib/admin/views/main.py:340
+msgid "No fields changed."
+msgstr "Ei muutoksia kenttiin."
+
+#: contrib/admin/views/main.py:343
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "%(name)s \"%(obj)s\" on nyt muutettu."
+
+#: contrib/admin/views/main.py:351
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" on nyt lisätty. Voit muokata sitä uudelleen alla."
+
+#: contrib/admin/views/main.py:389
+#, python-format
+msgid "Change %s"
+msgstr "Muokkaa: %s"
+
+#: contrib/admin/views/main.py:471
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s: %(obj)s"
+
+#: contrib/admin/views/main.py:476
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s:"
+
+#: contrib/admin/views/main.py:509
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" on poistettu."
+
+#: contrib/admin/views/main.py:512
+msgid "Are you sure?"
+msgstr "Oletko varma?"
+
+#: contrib/admin/views/main.py:534
+#, python-format
+msgid "Change history: %s"
+msgstr "Muokkaushistoria: %s"
+
+#: contrib/admin/views/main.py:568
+#, python-format
+msgid "Select %s"
+msgstr "Valitse %s"
+
+#: contrib/admin/views/main.py:568
+#, python-format
+msgid "Select %s to change"
+msgstr "Valitse muokattava %s"
+
+#: contrib/admin/views/main.py:744
+msgid "Database error"
+msgstr "Tietokantavirhe"
+
+#: 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 "Kokonaisluku"
+
+#: contrib/admin/views/doc.py:292
+msgid "Boolean (Either True or False)"
+msgstr "Totuusarvo: joko tosi (True) tai epätosi (False)"
+
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "Merkkijono (enintään %(maxlength)s merkkiä)"
+
+#: contrib/admin/views/doc.py:294
+msgid "Comma-separated integers"
+msgstr "Pilkulla erotetut kokonaisluvut"
+
+#: contrib/admin/views/doc.py:295
+msgid "Date (without time)"
+msgstr "Päivämäärä"
+
+#: contrib/admin/views/doc.py:296
+msgid "Date (with time)"
+msgstr "Päivämäärä ja kellonaika"
+
+#: contrib/admin/views/doc.py:297
+msgid "E-mail address"
+msgstr "Sähköpostios."
+
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
+msgid "File path"
+msgstr "Tiedostopolku"
+
+#: contrib/admin/views/doc.py:300
+msgid "Decimal number"
+msgstr "Desimaaliluku"
+
+#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85
+msgid "IP address"
+msgstr "IP-osoite"
+
+#: contrib/admin/views/doc.py:306
+msgid "Boolean (Either True, False or None)"
+msgstr "Totuusarvo: joko tosi (True), epätosi (False) tai ei mikään (None)"
+
+#: contrib/admin/views/doc.py:307
+msgid "Relation to parent model"
+msgstr "Relaatio emomalliin"
+
+#: contrib/admin/views/doc.py:308
+msgid "Phone number"
+msgstr "Puhelinnumero"
+
+#: contrib/admin/views/doc.py:313
+msgid "Text"
+msgstr "Tekstiä"
+
+#: contrib/admin/views/doc.py:314
+msgid "Time"
+msgstr "Kellonaika"
+
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
+msgid "URL"
+msgstr "URL-osoite"
+
+#: contrib/admin/views/doc.py:316
+msgid "U.S. state (two uppercase letters)"
+msgstr "USA:n osavaltio (kaksikirjaiminen versaalein)"
+
+#: contrib/admin/views/doc.py:317
+msgid "XML text"
+msgstr "XML-teksti"
+
+#: contrib/admin/views/auth.py:25
+msgid "Add user"
+msgstr "Uusi käyttäjä"
+
+#: contrib/admin/templatetags/admin_list.py:230
+msgid "All dates"
+msgstr "Kaikki päivät"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Näytä kaikki"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+msgid "Documentation"
+msgstr "Ohjeita"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+msgid "Change password"
+msgstr "Vaihda salasana"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:24
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/comments/templates/comments/form.html:6
+msgid "Log out"
+msgstr "Kirjaudu ulos"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/change_form.html:13
+#: 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/base.html:29
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: 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/registration/password_change_done.html:4
+msgid "Home"
+msgstr "Etusivu"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
+msgstr "Poista"
+
+#: 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 "Kohteen '%(escaped_object)s' (%(object_name)s) poisto poistaisi myös siihen liittyviä kohteita, mutta sinulla ei ole oikeutta näiden kohteiden poistamiseen:"
+
+#: 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 "Haluatko varmasti poistaa kohteen \"%(escaped_object)s\" (%(object_name)s)? Myös seuraavat kohteet poistettaisiin samalla:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "Kyllä, olen varma"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Sivua ei löydy"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Pahoittelemme, pyydettyä sivua ei voitu löytää."
+
+#: contrib/admin/templates/admin/change_form.html:15
+#: contrib/admin/templates/admin/index.html:28
+msgid "Add"
+msgstr "Lisää uusi"
+
+#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Muokkaushistoria"
+
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "View on site"
+msgstr "Näytä lopputulos"
+
+#: contrib/admin/templates/admin/change_form.html:30
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Korjaa virhe."
+msgstr[1] "Korjaa virheet."
+
+#: contrib/admin/templates/admin/change_form.html:48
+msgid "Ordering"
+msgstr "Järjestys"
+
+#: contrib/admin/templates/admin/change_form.html:51
+msgid "Order:"
+msgstr "Järjestysnumero:"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " %(filter_title)s:"
+
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "Tallenna uutena"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "Tallenna ja lisää seuraava"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "Tallenna välillä ja jatka muokkaamista"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "Tallenna ja poistu"
+
+#: contrib/admin/templates/admin/change_list.html:11
+#, python-format
+msgid "Add %(name)s"
+msgstr "Lisää uusi %(name)s"
+
+#: contrib/admin/templates/admin/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Sovelluksen %(name)s mallit."
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
+msgstr "Muokkaa"
+
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
+msgstr "Sinulla ei ole oikeutta muokata mitään."
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
+msgstr "Viimeisimmät muutokset"
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
+msgstr "Sinun tekemäsi muutokset"
+
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
+msgstr "Ei yhtään"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django-sivuston ylläpito"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Djangon ylläpito"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Pvm/klo"
+
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "User"
+msgstr "Käyttäjä"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Toiminto"
+
+#: 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 "Tällä kohteella ei ole muutoshistoriaa. Sitä ei ole lisätty tämän ylläpitosivun avulla."
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Palvelinvirhe"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Palvelinvirhe (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Palvelinvirhe <em>(500)</em>"
+
+#: 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 "Tietokanta-asennuksessasi on jotain vialla. Varmistu, että sopivat taulut on luotu ja että oikea käyttäjä voi lukea tietokantaa."
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Etsi"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 hakutulas"
+msgstr[1] "%(counter)s hakutulosta"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "yhteensä %(full_result_count)s"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Suodatin"
+
+#: contrib/admin/templates/admin/login.html:17
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+msgid "Username:"
+msgstr "Käyttäjätunnus"
+
+#: contrib/admin/templates/admin/login.html:20
+#: contrib/comments/templates/comments/form.html:8
+msgid "Password:"
+msgstr "Salasana:"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Oletko <a href=\"/password_reset\">unohtanut salasanasi</a>?"
+
+#: contrib/admin/templates/admin/base.html:24
+msgid "Welcome,"
+msgstr "Tervetuloa,"
+
+#: 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 "Syötä ensin käyttäjätunnus ja salasana. Sen jälkeen voit muokata muita käyttäjän tietoja."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Käyttäjätunnus"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Salasana:"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Salasana toistamiseen"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr "Syötä sama salasana tarkistuksen vuoksi toistamiseen."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Kirjanmerkkiset"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "Ohjeiden kirjanmerkkiset"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr "\n<p class=\"help\">Asenna kirjanmerkkinen raahaamalla linkki kirjanmerkkien työkalupalkkiin tai napsauttamalla linkkiä oikeanpuoleisella hiiren painikkeella ja valitsemalla kirjanmerkkeihin lisäämisen. Sen jälkeen voit valita kirjanmerkkisen miltä tahansa sivuston sivulta. Huomaa, että jotkin näistä kirjanmerkkisistä toimivat vain, jos selaat sivustoa \"paikalliseksi\" määritellyltä tietokoneelta (kysy lisätietoja verkkonne ylläpitäjältä).</p>\n"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "Tämän sivun ohjeita"
+
+#: 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 "Vie avoinna olevan sivun luoneen näkymän ohjeisiin."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "Näytä kohteen tunniste"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr "Näyttää yksittäistä kohdetta vastaavilla sivuilla kohteen tyypin ja tunnisteen."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "Muokkaa tätä kohdetta (tässä ikkunassa)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr "Siirtyy yksittäistä kohdetta vastaavalta sivulta kohteen ylläpitosivulle."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "Muokkaa tätä kohdetta (uudessa ikkunassa)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Kuten yllä, mutta avaa ylläpitosivun uuteen ikkunaan."
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Pvm:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Klo:"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Tällä hetkellä:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Muokkaa:"
+
+#: 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 "Salasanan nollaus"
+
+#: 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 ""
+"Unohditko salasanasi? Syötä alle sähköpostiosoitteesi, niin \n"
+"lähetämme sinulle uuden salasanan."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Sähköpostiosoite:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Nollaa salasana"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Sait tämän viestin, koska pyysit uutta salasanaa"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "sivuston %(site_name)s käyttäjätilillesi"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Uusi salasanasi on: %(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 "Voit vaihtaa salasanan sivulla:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Käyttäjätunnuksesi siltä varalta, että olet unohtanut sen:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Kiitos vierailustasi sivuillemme!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "%(site_name)s ylläpitäjät"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Kiitos sivuillamme viettämästäsi ajasta."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Kirjaudu uudelleen sisään"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Salasanan nollaus onnistui"
+
+#: 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 ""
+"Uusi salasanasi on lähetetty antamaasi sähköpostiosoitteeseen.\n"
+"Se saapuu tuota pikaa."
+
+#: 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 "Salasanan muuttaminen"
+
+#: 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 ""
+"Syötä vanha salasanasi varmistukseksi, ja syötä sitten uusi salasanasi\n"
+"kaksi kertaa, jotta se tulee varmasti oikein."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Vanha salasana:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Uusi salasana:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Varmista uusi salasana:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Vaihda salasana"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Salasanan muuttaminen onnistui"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Salasanasi on muutettu."
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "domain-nimi"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "näyttönimi"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "sivusto"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "sivustot"
+
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Esimerkki: '/tietoja/yhteystiedot/'. Varmista, että sekä alussa että lopussa "
+"on kauttaviiva."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "otsikko"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "sisältö"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "salli kommentit"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "mallipohjan nimi"
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr "Esimerkiksi: 'flatpages/yhteydenotto.html'. Jos tämä jätetään tyhjäksi, käytetään oletuspohjaa 'flatpages/default.html'."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "vaaditaan rekisteröityminen"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Jos tämä kohta on valittu, vain sisäänkirjautuneet käyttäjät näkevät sivun."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "tekstisivu"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "tekstisivut"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "ohjaa osoitteesta"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Tässä on käytettävä absoluuttista polkua ilman verkkotunnusta. Esimerkki: "
+"'\\\n"
+"events/search/'"
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "ohjaa osoitteeseen"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Tässä on käytettävä joko absoluuttista polkua (kuten yllä) tai täydellistä "
+"'http://'-alkuista URL-osoitetta."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "edelleenohjaus"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "edelleenohjaukset"
+
+#: contrib/comments/models.py:67 contrib/comments/models.py:166
+msgid "object ID"
+msgstr "kohteen tunniste"
+
+#: contrib/comments/models.py:68
+msgid "headline"
+msgstr "otsikko"
+
+#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:167
+msgid "comment"
+msgstr "kommentti"
+
+#: contrib/comments/models.py:70
+msgid "rating #1"
+msgstr "1. pisteytys"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "2. pisteytys"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "3. pisteytys"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "4. pisteytys"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "5. pisteytys"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "6. pisteytys"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "7. pisteytys"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "8. pisteytys"
+
+#: contrib/comments/models.py:82
+msgid "is valid rating"
+msgstr "on sallittu pisteytys"
+
+#: contrib/comments/models.py:83 contrib/comments/models.py:169
+msgid "date/time submitted"
+msgstr "lähetyshetki"
+
+#: contrib/comments/models.py:84 contrib/comments/models.py:170
+msgid "is public"
+msgstr "on julkinen"
+
+#: contrib/comments/models.py:86
+msgid "is removed"
+msgstr "on poistettu"
+
+#: 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 ""
+"Rastita jos kommentti on asiaankuulumaton. Kommentin tilalla näytetään\n"
+"viesti \"Tämä kommentti on poistettu\"."
+
+#: contrib/comments/models.py:91
+msgid "comments"
+msgstr "kommentit"
+
+#: contrib/comments/models.py:131 contrib/comments/models.py:207
+msgid "Content object"
+msgstr "Kommentoitu kohde"
+
+#: 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 ""
+" Kirjoittanut %(user)s, pvm %(date)s\\n\n"
+" \\n\n"
+" %(comment)s\\n\n"
+" \\n\n"
+" http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "henkilön nimi"
+
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "IP-osoite"
+
+#: contrib/comments/models.py:173
+msgid "approved by staff"
+msgstr "ylläpidon hyväksymä"
+
+#: contrib/comments/models.py:176
+msgid "free comment"
+msgstr "vapaa kommentti"
+
+#: contrib/comments/models.py:177
+msgid "free comments"
+msgstr "vapaat kommentit"
+
+#: contrib/comments/models.py:233
+msgid "score"
+msgstr "pisteet"
+
+#: contrib/comments/models.py:234
+msgid "score date"
+msgstr "pisteytyspäivä"
+
+#: contrib/comments/models.py:237
+msgid "karma score"
+msgstr "karma-pisteytys"
+
+#: contrib/comments/models.py:238
+msgid "karma scores"
+msgstr "karma-pisteytykset"
+
+#: contrib/comments/models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "%(score)d pistettä käyttäjältä %(user)s"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+" %(user)s on merkinnyt tämän kommentin:\\n\n"
+" \\n\n"
+" %(text)s"
+
+#: contrib/comments/models.py:265
+msgid "flag date"
+msgstr "merkintäpäivä"
+
+#: contrib/comments/models.py:268
+msgid "user flag"
+msgstr "käyttäjän merkki"
+
+#: contrib/comments/models.py:269
+msgid "user flags"
+msgstr "käyttäjien merkit"
+
+#: contrib/comments/models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "Käyttäjän %r merkki"
+
+#: contrib/comments/models.py:278
+msgid "deletion date"
+msgstr "poistamispäivä"
+
+#: contrib/comments/models.py:280
+msgid "moderator deletion"
+msgstr "valvojan poisto"
+
+#: contrib/comments/models.py:281
+msgid "moderator deletions"
+msgstr "valvojien poistot"
+
+#: contrib/comments/models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "Valvojan %r poisto"
+
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Anonyymit käyttäjät eivät voi äänestää"
+
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "Kommentin tunniste on virheellinen"
+
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "Itseään ei voi äänestää"
+
+#: contrib/comments/views/comments.py:27
+msgid ""
+"This rating is required because you've entered at least one other rating."
+msgstr "Tämä pisteytys on annettava, koska olet syöttänyt ainakin yhden muunkin pisteytyksen."
+
+#: 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] ""
+"Kommentin kirjoittanut käyttäjä on kirjoittanut vain yhden kommentin:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Kommentin kirjoittanut käyttäjä on kirjoittanut alle %(count)s kommenttia:\n"
+"\n"
+"%(text)s"
+
+# Mitä "sketchy user" tarkoittaa?
+#: contrib/comments/views/comments.py:116
+#, python-format
+msgid ""
+"This comment was posted by a sketchy user:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Tämä on \"sketchy\"-käyttäjän kirjoittama kommentti:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Vain POST-kutsut sallittu"
+
+#: contrib/comments/views/comments.py:192
+#: contrib/comments/views/comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Yksi tai useampi vaadittu kenttä on jäänyt täyttämättä"
+
+#: contrib/comments/views/comments.py:196
+#: contrib/comments/views/comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr "Kommenttilomaketta on käpälöity (turvallisuusrike)"
+
+#: 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 "Kommenttilomakkeen 'target'-parametri ei kelpaa -- kohteen ID oli virheellinen"
+
+#: contrib/comments/views/comments.py:257
+#: contrib/comments/views/comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr "Kommenttilomake ei pyytänyt esikatselua tai lähettämistä"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Unohditko salasanasi?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Pisteytykset"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Vaaditaan"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Vapaavalintainen"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Lähetä valokuva"
+
+#: contrib/comments/templates/comments/form.html:28
+#: contrib/comments/templates/comments/freeform.html:5
+msgid "Comment:"
+msgstr "Kommentti:"
+
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
+msgid "Preview comment"
+msgstr "Esikatsele kommenttia"
+
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Nimesi:"
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "istunnon avain"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "istunnon tiedot"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "vanhenee"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "istunto"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "istunnot"
+
+#: contrib/contenttypes/models.py:20
+msgid "python model class name"
+msgstr "mallin python-luokan nimi"
+
+#: contrib/contenttypes/models.py:23
+msgid "content type"
+msgstr "sisältötyyppi"
+
+#: contrib/contenttypes/models.py:24
+msgid "content types"
+msgstr "sisältötyypit"
+
+#: forms/__init__.py:381
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Varmista, että tekstin pituus on vähemmän kuin %s merkki."
+msgstr[1] "Varmista, että teksti pituus on vähemmän kuin %s merkkiä."
+
+#: forms/__init__.py:386
+msgid "Line breaks are not allowed here."
+msgstr "Rivinvaihtoja ei voi käyttää."
+
+#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Valinta ei kelpaa; '%(data)s' ei löydy vaihtoehtojen %(choices)s joukosta."
+
+#: forms/__init__.py:663
+msgid "The submitted file is empty."
+msgstr "Lähetetty tiedosto on tyhjä."
+
+#: forms/__init__.py:719
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Syötä kokonaisluku väliltä -32768 ja 32767."
+
+#: forms/__init__.py:729
+msgid "Enter a positive number."
+msgstr "Syötä positiivinen kokonaisluku."
+
+#: forms/__init__.py:739
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Syötä kokonaisluku väliltä 0 ja 32767."
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "maanantai"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "tiistai"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "keskiviikko"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "torstai"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "perjantai"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "lauantai"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "sunnuntai"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "tammikuu"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "helmikuu"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "maaliskuu"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "huhtikuu"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "toukokuu"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "kesäkuu"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "heinäkuu"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "elokuu"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "syyskuu"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "lokakuu"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "marraskuu"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "joulukuu"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "tam"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "hel"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "maa"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "huh"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "tou"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "kes"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "hei"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "elo"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "syy"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "lok"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "mar"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "jou"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "tammi"
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "helmi"
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "elo"
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "syys"
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "loka"
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "marras"
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "joulu"
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "vuosi"
+msgstr[1] "vuotta"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "kuukausi"
+msgstr[1] "kuukautta"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "viikko"
+msgstr[1] "viikkoa"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "päivä"
+msgstr[1] "päivää"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "tunti"
+msgstr[1] "tuntia"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minuutti"
+msgstr[1] "minuuttia"
+
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j.n.Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j.n.Y G:i"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "G:i"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "N Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "N j, Y"
+
+#: template/defaultfilters.py:401
+msgid "yes,no,maybe"
+msgstr "kyllä,ei,ehkä"

Added: vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/fi/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,110 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-12-09 11:51+0100\n"
+"PO-Revision-Date: 2006-08-05 15:27+0300\n"
+"Last-Translator: Antti Kaihola <akaihola at ambitone.com>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "Mahdolliset %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Valitse kaikki"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Lisää uusi"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Poista"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Valitut %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Valitse vasemmalta ja napsauta "
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Tyhjennä kaikki"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"Tammikuu Helmikuu Maaliskuu Huhtikuu Toukokuu Kesäkuu Heinäkuu Elokuu "
+"Syyskuu Lokakuu Marraskuu Joulukuu"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Sunnuntai Maanantai Tiistai Keskiviikko Torstai Perjantai Lauantai"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "S M T K T P L"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "Nyt"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "Kello"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "Valitse kellonaika"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "24"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "06"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "12"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "Tänään"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "Kalenteri"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "Eilen"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "Huomenna"

Modified: vendor/django/current/django/conf/locale/fr/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/fr/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/fr/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/fr/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,14 +7,775 @@
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:11+0200\n"
+"POT-Creation-Date: 2007-03-11 11:46+0100\n"
 "PO-Revision-Date: 2006-05-08 15:12+0200\n"
-"Last-Translator: Gaël Chardon <gael.dev_at_nospam_4now.net>\n"
+"Last-Translator: Baptiste Goupil <baptiste.goupil_at_google_email.com>\n"
 "Language-Team: français <fr at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: oldforms/__init__.py:357 db/models/fields/__init__.py:116
+#: db/models/fields/__init__.py:273 db/models/fields/__init__.py:609
+#: db/models/fields/__init__.py:620 newforms/models.py:177
+#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450
+#: newforms/fields.py:461
+msgid "This field is required."
+msgstr "Ce champ est obligatoire."
+
+#: 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] "Assurez-vous que votre texte fait moins de %s caractère."
+msgstr[1] "Assurez-vous que votre texte fait moins de %s caractères."
+
+#: oldforms/__init__.py:397
+msgid "Line breaks are not allowed here."
+msgstr "Les retours à la ligne ne sont pas autorisés ici."
+
+#: 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 "Sélectionnez un choix valide ; '%(data)s' n'est pas dans %(choices)s."
+
+#: oldforms/__init__.py:577 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: oldforms/__init__.py:577 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "Oui"
+
+#: oldforms/__init__.py:577 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "Non"
+
+#: 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 ""
+
+#: oldforms/__init__.py:674
+msgid "The submitted file is empty."
+msgstr "Le fichier soumis est vide."
+
+#: oldforms/__init__.py:730
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Entrez un nombre entier entre -32 768 et 32 767."
+
+#: oldforms/__init__.py:740
+msgid "Enter a positive number."
+msgstr "Entrez un nombre entier positif."
+
+#: oldforms/__init__.py:750
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Entrez un nombre entier entre 0 et 32 767."
+
+#: 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 "et"
+
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s avec le champ %(fieldname)s existe déjà."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Cette valeur doit être un entier."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Cette valeur doit être soit Vraie soit Fausse."
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Ce champ ne peut pas être vide."
+
+#: db/models/fields/__init__.py:456 core/validators.py:148
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Entrez une date valide au format AAAA-MM-JJ."
+
+#: db/models/fields/__init__.py:525 core/validators.py:157
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Entrez une date et une heure valide au format AAAA-MM-JJ HH:MM."
+
+#: db/models/fields/__init__.py:629
+msgid "Enter a valid filename."
+msgstr "Entrez un nom de fichier valide."
+
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Entrez un %s valide."
+
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Séparez les ID par des virgules."
+
+#: db/models/fields/related.py:644
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Maintenez \"Contrôle (ctrl)\", ou \"Commande (touche pomme)\" sur un Mac, "
+"pour en sélectionner plusieurs."
+
+#: 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] "Entrez un ID %(self)s valide. La valeur %(value)r est invalide."
+msgstr[1] ""
+"Entrez des ID %(self)s valides. Les valeurs %(value)r sont invalides."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Arabe"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Indien"
+
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr "Catalan"
+
+#: conf/global_settings.py:42
+msgid "Czech"
+msgstr "Tchèque"
+
+#: conf/global_settings.py:43
+msgid "Welsh"
+msgstr "Gallois"
+
+#: conf/global_settings.py:44
+msgid "Danish"
+msgstr "Dannois"
+
+#: conf/global_settings.py:45
+msgid "German"
+msgstr "Allemand"
+
+#: conf/global_settings.py:46
+msgid "Greek"
+msgstr "Grec"
+
+#: conf/global_settings.py:47
+msgid "English"
+msgstr "Anglais"
+
+#: conf/global_settings.py:48
+msgid "Spanish"
+msgstr "Espagnol"
+
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr "Espagnol Argentin"
+
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "Dannois"
+
+#: conf/global_settings.py:51
+msgid "French"
+msgstr "Français"
+
+#: conf/global_settings.py:52
+msgid "Galician"
+msgstr "Galicien"
+
+#: conf/global_settings.py:53
+msgid "Hungarian"
+msgstr "Hongrois"
+
+#: conf/global_settings.py:54
+msgid "Hebrew"
+msgstr "Israélien"
+
+#: conf/global_settings.py:55
+msgid "Icelandic"
+msgstr "Islandais"
+
+#: conf/global_settings.py:56
+msgid "Italian"
+msgstr "Italien"
+
+#: conf/global_settings.py:57
+msgid "Japanese"
+msgstr "Japonais"
+
+#: conf/global_settings.py:58
+msgid "Kannada"
+msgstr "Kannada"
+
+#: conf/global_settings.py:59
+msgid "Latvian"
+msgstr "Letton"
+
+#: conf/global_settings.py:60
+msgid "Macedonian"
+msgstr "Macédonien"
+
+#: conf/global_settings.py:61
+msgid "Dutch"
+msgstr "Néerlandais"
+
+#: conf/global_settings.py:62
+msgid "Norwegian"
+msgstr "Norvégien"
+
+#: conf/global_settings.py:63
+msgid "Polish"
+msgstr "Polonais"
+
+#: conf/global_settings.py:64
+msgid "Brazilian"
+msgstr "Brésilien"
+
+#: conf/global_settings.py:65
+msgid "Romanian"
+msgstr "Roumain"
+
+#: conf/global_settings.py:66
+msgid "Russian"
+msgstr "Russe"
+
+#: conf/global_settings.py:67
+msgid "Slovak"
+msgstr "Slovaque"
+
+#: conf/global_settings.py:68
+msgid "Slovenian"
+msgstr "Slovaque"
+
+#: conf/global_settings.py:69
+msgid "Serbian"
+msgstr "Serbe"
+
+#: conf/global_settings.py:70
+msgid "Swedish"
+msgstr "Suédois"
+
+#: conf/global_settings.py:71
+msgid "Tamil"
+msgstr "Tamoul"
+
+#: conf/global_settings.py:72
+msgid "Telugu"
+msgstr "Télougou"
+
+#: conf/global_settings.py:73
+msgid "Turkish"
+msgstr "Turc"
+
+#: conf/global_settings.py:74
+msgid "Ukrainian"
+msgstr "Ukrainien"
+
+#: conf/global_settings.py:75
+msgid "Simplified Chinese"
+msgstr "Chinois simplifié"
+
+#: conf/global_settings.py:76
+msgid "Traditional Chinese"
+msgstr "Chinois traditionnel"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr ""
+"Ce champ ne doit contenir que des lettres, des nombres et des tirets bas "
+"('_')."
+
+#: core/validators.py:68
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas ('_') "
+"et des '/'."
+
+#: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas ('_') "
+"et des '-'."
+
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "Les lettres majuscules ne sont pas autorisées ici."
+
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "Les lettres minuscules ne sont pas autorisées ici."
+
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Saisissez uniquement des chiffres séparés par des virgules."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Entrez des adresses de courriel valides séparées par des virgules."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "Entrez une adresse IP valide."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "Vous ne pouvez pas laisser ce champ vide."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Les caractères non numériques ne sont pas autorisés ici."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Cette valeur ne peut pas être composé uniquement de chiffres."
+
+#: core/validators.py:120 newforms/fields.py:126
+msgid "Enter a whole number."
+msgstr "Entrez un nombre entier."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Seules les lettres de l'alphabet sont autorisées ici."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "L'année doit être supérieure à 1900."
+
+#: core/validators.py:143
+#, fuzzy, python-format
+msgid "Invalid date: %s"
+msgstr "URL invalide : %s"
+
+#: core/validators.py:153
+msgid "Enter a valid time in HH:MM format."
+msgstr "Entrez une heure valide au format HH:MM."
+
+#: core/validators.py:162 newforms/fields.py:269
+msgid "Enter a valid e-mail address."
+msgstr "Entrez une adresse de courriel valide."
+
+#: core/validators.py:178
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Envoyez une image valide. Le fichier que vous avez transferé n'est pas une "
+"image ou bien est une image corrompue."
+
+#: core/validators.py:185
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "L'URL %s ne pointe pas vers une image valide."
+
+#: core/validators.py:189
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Les numéros de téléphone doivent être au format XXX-XXX-XXXX. \"%s\" est "
+"incorrect."
+
+#: core/validators.py:197
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "L'URL %s ne pointe pas vers une vidéo QuickTime valide."
+
+#: core/validators.py:201
+msgid "A valid URL is required."
+msgstr "Une URL valide est requise."
+
+#: core/validators.py:215
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Du HTML valide est requis. Les erreurs sont les suivantes :\n"
+"%s"
+
+#: core/validators.py:222
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML mal formé : %s"
+
+#: core/validators.py:239
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL invalide : %s"
+
+#: core/validators.py:244 core/validators.py:246
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "L'URL %s est un lien cassé."
+
+#: core/validators.py:252
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Entrez une abréviation d'état américain valide."
+
+#: 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] "Attention à votre langage ! Le mot %s n'est pas autorisé ici."
+msgstr[1] "Attention à votre langage ! Les mots %s ne sont pas autorisés ici."
+
+#: core/validators.py:273
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Ce champ doit correspondre au champ '%s'."
+
+#: core/validators.py:292
+msgid "Please enter something for at least one field."
+msgstr "Saisissez au moins une valeur dans un des champs s'il vous plaît."
+
+#: core/validators.py:301 core/validators.py:312
+msgid "Please enter both fields or leave them both empty."
+msgstr ""
+"Renseignez chacun des champs ou laissez les deux vides s'il vous plaît."
+
+#: core/validators.py:320
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Ce champ doit être renseigné si %(field)s vaut %(value)s"
+
+#: core/validators.py:333
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Ce champ doit être renseigné si %(field)s ne vaut pas %(value)s"
+
+#: core/validators.py:352
+msgid "Duplicate values are not allowed."
+msgstr "Des valeurs identiques ne sont pas autorisées."
+
+#: core/validators.py:367
+#, fuzzy, python-format
+msgid "This value must be between %(lower)s and %(upper)s."
+msgstr "Cette valeur doit être entre %(lower)s et %(upper)s."
+
+#: core/validators.py:369
+#, fuzzy, python-format
+msgid "This value must be at least %s."
+msgstr "Cette valeur doit être au moins %s."
+
+#: core/validators.py:371
+#, fuzzy, python-format
+msgid "This value must be no more than %s."
+msgstr "Cette valeur ne doit pas dépasser %s."
+
+#: core/validators.py:407
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Cette valeur doit être une puissance de %s."
+
+#: core/validators.py:418
+msgid "Please enter a valid decimal number."
+msgstr "Saisissez un nombre décimal valide s'il vous plaît."
+
+#: 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] ""
+"Saisissez un nombre décimal valide avec au plus %s chiffre s'il vous plaît."
+msgstr[1] ""
+"Saisissez un nombre décimal valide avec au plus %s chiffres s'il vous plaît."
+
+#: 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] "Veuillez saisir un nombre décimal valide avec au plus %s chiffre."
+msgstr[1] "Veuillez saisir un nombre décimal valide avec au plus %s chiffres."
+
+#: 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] "Veuillez saisir un nombre décimal valide avec au plus %s décimale."
+msgstr[1] "Veuillez saisir un nombre décimal valide avec au plus %s décimales."
+
+#: core/validators.py:438
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+"Vérifiez que le fichier transféré fait au moins une taille de %s octets."
+
+#: core/validators.py:439
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+"Vérifiez que le fichier transféré fait au plus une taille de %s octets."
+
+#: core/validators.py:456
+msgid "The format for this field is wrong."
+msgstr "Le format de ce champ est mauvais."
+
+#: core/validators.py:471
+msgid "This field is invalid."
+msgstr "Ce champ est invalide."
+
+#: core/validators.py:507
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Impossible de récupérer quoi que ce soit depuis %s."
+
+#: core/validators.py:510
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"L'entête Content-Type '%(contenttype)s', renvoyée par l'url %(url)s n'est "
+"pas valide."
+
+#: core/validators.py:543
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Veuillez fermer le tag %(tag)s de la ligne %(line)s. (La ligne débutant par "
+"\"%(start)s\".)"
+
+#: 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 ""
+"Du texte commençant à la ligne %(line)s n'est pas autorisé dans ce contexte. "
+"(Ligne débutant par \"%(start)s\".)"
+
+#: core/validators.py:552
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"%(attr)s\" ligne %(line)s n'est pas un attribut valide. (Ligne débutant "
+"par \"%(start)s\".)"
+
+#: core/validators.py:557
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"<%(tag)s>\" ligne %(line)s n'est pas un tag valide. (Ligne débutant par \"%"
+"(start)s\".)"
+
+#: 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 ""
+"Un tag, ou un ou plusieurs attributs, de la ligne %(line)s est manquant. "
+"(Ligne débutant par \"%(start)s\".)"
+
+#: 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 ""
+"La valeur de l'attribut \"%(attr)s\" de la ligne %(line)s n'est pas valide. "
+"(Ligne débutant par \"%(start)s\".)"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "L'objet %(verbose_name)s a été créé avec succès."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "L'objet %(verbose_name)s a été mis à jour avec succès."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "L'objet %(verbose_name)s a été supprimé."
+
+#: newforms/models.py:164 newforms/fields.py:360
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+"Sélectionnez un choix valide. Ce choix ne fait pas partie de ceux "
+"disponibles."
+
+#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454
+msgid "Enter a list of values."
+msgstr "Entrez une liste de valeur."
+
+#: newforms/models.py:187 newforms/fields.py:387
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Sélectionnez un choix valide ; %s n'en fait pas partie."
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Assurez-vous que cette valeur fait moins de %d caractère."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Assurez-vous que cette valeur fait au moins %d caractère."
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Assurez-vous que cette valeur soit plus petite ou égale à %s."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Assurez-vous que cette valeur soit plus grande ou égale à %s."
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Entrez une date valide."
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "Entrez une heure valide."
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Entrez une date et une heure valides."
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Entrez une valeur valide."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Entrez une URL valide."
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "L'URL est un lien cassé."
+
+#: contrib/humanize/templatetags/humanize.py:16
+msgid "th"
+msgstr "e"
+
+#: contrib/humanize/templatetags/humanize.py:16
+msgid "st"
+msgstr "er"
+
+#: contrib/humanize/templatetags/humanize.py:16
+msgid "nd"
+msgstr "d"
+
+#: contrib/humanize/templatetags/humanize.py:16
+msgid "rd"
+msgstr "e"
+
+#: contrib/humanize/templatetags/humanize.py:48
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] "%(value).1f million"
+msgstr[1] "%(value).1f millions"
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] "%(value).1f milliard"
+msgstr[1] "%(value).1f milliards"
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] "%(value).1f billion"
+msgstr[1] "%(value).1f billions"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "one"
+msgstr "un"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "two"
+msgstr "deux"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "three"
+msgstr "trois"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "four"
+msgstr "quatre"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "five"
+msgstr "cinq"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "six"
+msgstr "six"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "seven"
+msgstr "sept"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "eight"
+msgstr "huit"
+
+#: contrib/humanize/templatetags/humanize.py:69
+msgid "nine"
+msgstr "neuf"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "redirigé depuis"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple: '/events/"
+"search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "redirigé vers"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Ceci peut être soit un chemin absolu (voir ci-dessus) soit une URL complète "
+"débutant par 'http://'."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "redirige"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "redirige"
+
 #: contrib/comments/models.py:67 contrib/comments/models.py:166
 msgid "object ID"
 msgstr "ID de l'objet"
@@ -72,7 +833,7 @@
 msgid "is public"
 msgstr "est public"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
 msgid "IP address"
 msgstr "adresse IP"
 
@@ -209,13 +970,13 @@
 msgid "No voting for yourself"
 msgstr "Impossible de voter pour soi-même"
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid ""
 "This rating is required because you've entered at least one other rating."
 msgstr ""
 "Ce votre est nécéssaire parceque vous avez saisi au moins un autre vote."
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -238,7 +999,7 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
@@ -249,24 +1010,24 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "Seuls les POSTs sont autorisés"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "Un ou plusieurs champs requis n'ont pas été remplis"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr ""
 "Quelqu'un a trafiqué le formulaire de commentaire (violation des règles de "
 "sécurité)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
@@ -282,6 +1043,20 @@
 "Le formulaire de commentaire ne proposait ni les options de prévisualisation "
 "ni d'envoi"
 
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Votre nom :"
+
+#: contrib/comments/templates/comments/freeform.html:5
+#: contrib/comments/templates/comments/form.html:28
+msgid "Comment:"
+msgstr "Commentaire :"
+
+#: contrib/comments/templates/comments/freeform.html:10
+#: contrib/comments/templates/comments/form.html:35
+msgid "Preview comment"
+msgstr "Prévisualisation du commentaire"
+
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/login.html:17
@@ -289,20 +1064,12 @@
 msgstr "Nom d'utilisateur"
 
 #: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Mot de passe"
-
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr "Mot de passe oublié?"
-
-#: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/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:4
@@ -318,6 +1085,15 @@
 msgid "Log out"
 msgstr "Déconnexion"
 
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Mot de passe"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Mot de passe oublié?"
+
 #: contrib/comments/templates/comments/form.html:12
 msgid "Ratings"
 msgstr "Votes"
@@ -336,20 +1112,22 @@
 msgid "Post a photo"
 msgstr "Poster une photo"
 
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Commentaire :"
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "nom de domaine"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-msgid "Preview comment"
-msgstr "Prévisualisation du commentaire"
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "nom à afficher"
 
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Votre nom :"
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "site"
 
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "sites"
+
 #: contrib/admin/filterspecs.py:40
 #, python-format
 msgid ""
@@ -360,7 +1138,7 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "Tout"
 
@@ -384,18 +1162,6 @@
 msgid "This year"
 msgstr "Cette année"
 
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "Oui"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "Non"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "Inconnu"
-
 #: contrib/admin/models.py:16
 msgid "action time"
 msgstr "heure de l'action"
@@ -424,12 +1190,11 @@
 msgid "log entries"
 msgstr "entrées d'historique"
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/templatetags/admin_list.py:247
 msgid "All dates"
 msgstr "Toutes les dates"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
+#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -438,12 +1203,12 @@
 "Remarquez que chacun de ces champs est sensible à la casse (différenciation "
 "des majuscules/minuscules)."
 
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "Connectez-vous"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
@@ -451,7 +1216,7 @@
 "Votre session a expiré, connectez-vous de nouveau s'il vous plaît. Ne vous "
 "inquiétez pas, votre travail précédement éffectué a été sauvé."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -459,69 +1224,80 @@
 "Il semblerait que votre navigateur n'accepte pas les cookies. Activez-les, "
 "rechargez cette page et rééssayez s'il vous plaît."
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "Les noms d'utilisateur ne peuvent contenir le caractère '@'"
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Votre courriel n'est pas votre nom d'utilisateur. Essayez '%s' à la place."
 
-#: contrib/admin/views/main.py:226
-msgid "Site administration"
-msgstr "Gestion du site"
-
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "L'objet %(name)s \"%(obj)s\" a été ajouté avec succès."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
+#: contrib/admin/views/main.py:347
 msgid "You may edit it again below."
 msgstr "Vous pouvez continuez de l'éditez ci-dessous."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/auth.py:30
+#, fuzzy
+msgid "Add user"
+msgstr "Ajouter %s"
+
+#: contrib/admin/views/auth.py:57
+#, fuzzy
+msgid "Password changed successfully."
+msgstr "Mot de passe modifié avec succés"
+
+#: contrib/admin/views/auth.py:64
+#, fuzzy, python-format
+msgid "Change password: %s"
+msgstr "Modifier votre mot de passe"
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Gestion du site"
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
 msgstr "Vous pouvez ajouter un autre %s ci-dessous."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr "Ajouter %s"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "Ajouté %s."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "et"
-
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "Modifié %s."
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "Supprimé %s."
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "Aucun champ modifié."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "L'objet %(name)s \"%(obj)s\" a été modifié avec succès."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -529,121 +1305,203 @@
 "L'objet %(name)s \"%(obj)s\" a été ajouté avec succès.Vous pouvez continuez "
 "de l'éditez ci-dessous."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "Changement %s"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:476
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Un ou plusieurs %(fieldname)s dans %(name)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:481
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Un ou plusieurs %(fieldname)s dans %(name)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:514
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "L'objet %(name)s \"%(obj)s\" a été supprimé avec succès."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:517
 msgid "Are you sure?"
 msgstr "Êtes-vous sûr ?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:539
 #, python-format
 msgid "Change history: %s"
 msgstr "Historique des changements : %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:573
 #, python-format
 msgid "Select %s"
 msgstr "Sélectionnez %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:573
 #, python-format
 msgid "Select %s to change"
 msgstr "Sélectionnez %s pour changer"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:768
+msgid "Database error"
+msgstr ""
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "mot-clé :"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "filtre :"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "vue :"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "L'application %r n'a pas été trouvée."
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %(name)r not found in app %(label)r"
+msgstr "Le modèle %(name)r n'a pas été trouvé dans l'application %(label)r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%(label)s.%(type)s` object"
+msgstr "l'objet `%(label)s.%(type)s en relation "
+
+#: 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 "modèle :"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%(label)s.%(name)s` objects"
+msgstr "les objets `%(label)s.%(type)s en relation"
+
+#: 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 "nombre de %s"
+
+#: 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 "Entier"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "Booléen (Vrai ou Faux)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Chaîne de caractère (jusqu'à %(maxlength)s)"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "Des entiers séparés par une virgule"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "Date (sans l'heure)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "Date (avec l'heure)"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "Courriel :"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "Chemin vers le fichier"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr "Nombre décimal"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "Booléen (Vrai, Faux ou None)"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr "Relation au modèle parent"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "Numéro de téléphone"
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "Texte"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "Heure"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
 msgstr "État U.S. (deux lettres majuscules)"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "Texte XML"
 
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s ne semble pas être un objet urlpattern"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Actuellement :"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Modification :"
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Date :"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Heure :"
+
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/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
@@ -652,9 +1510,12 @@
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/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/bookmarklets.html:4
@@ -671,11 +1532,13 @@
 msgstr "Modifier votre mot de passe"
 
 #: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_list.html:6
 #: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/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
@@ -686,7 +1549,7 @@
 msgstr "Accueil"
 
 #: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 msgid "History"
 msgstr "Historique"
 
@@ -714,13 +1577,15 @@
 "Cet objet n'a pas d'historique de modification. Il n'a probablement pas été "
 "ajouté au moyen de ce site d'administration."
 
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Site d'administration de Django"
+#: contrib/admin/templates/admin/change_list.html:12
+#, python-format
+msgid "Add %(name)s"
+msgstr "Ajouter %(name)s"
 
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administration de Django"
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " Par %(filter_title)s "
 
 #: contrib/admin/templates/admin/500.html:4
 msgid "Server error"
@@ -743,6 +1608,45 @@
 "administrateurs du site et sera corrigée dans les meilleurs délais. Merci "
 "pour votre patience."
 
+#: 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 "Envoyer"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 résultat"
+msgstr[1] "%(counter)s résultats"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s résultats"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Tout montrer"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Site d'administration de Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administration de Django"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filtre"
+
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
@@ -757,6 +1661,11 @@
 msgid "Models available in the %(name)s application."
 msgstr "Modèles disponibles dans l'application %(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"
@@ -782,16 +1691,26 @@
 msgid "None available"
 msgstr "Aucun(e) disponible"
 
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Ajouter %(name)s"
+#: contrib/admin/templates/admin/change_form.html:22
+msgid "View on site"
+msgstr "Voir sur le site"
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Avez vous <a href=\"/password_reset/\">perdu votre mot de passe</a>?"
+#: 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] "Veuillez corriger l'erreur ci-dessous."
+msgstr[1] "Veuillez corriger les erreurs ci-dessous."
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:50
+msgid "Ordering"
+msgstr "Tri"
+
+#: contrib/admin/templates/admin/change_form.html:53
+msgid "Order:"
+msgstr "Ordre :"
+
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "Bienvenue,"
 
@@ -803,54 +1722,28 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
-"Supprimer l'objet %(object_name)s '%(object)s' provoquerait la suppression "
-"des objets qui lui sont liés mais votre compte ne possède pas la permission "
-"de supprimer les types d'objets suivants :"
+"Supprimer l'objet %(object_name)s '%(escaped_object)s' provoquerait la "
+"suppression des objets qui lui sont liés mais votre compte ne possède pas la "
+"permission de supprimer les types d'objets suivants :"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"Êtes vous certain de vouloir supprimer l'objet %(object_name)s \"%(object)s"
-"\" ? Les éléments suivant sont liés à celui-ci et seront aussi supprimés :"
+"Êtes vous certain de vouloir supprimer l'objet %(object_name)s \"%"
+"(escaped_object)s\" ? Les éléments suivant sont liés à celui-ci et seront "
+"aussi supprimés :"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
 msgstr "Oui, j'en suis certain"
 
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(title)s "
-msgstr " Par %(title)s "
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Envoyer"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Voir sur le site"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Veuillez corriger l'erreur ci-dessous."
-msgstr[1] "Veuillez corriger les erreurs ci-dessous."
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "Tri"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "Ordre :"
-
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
 msgstr "Sauver en tant que nouveau"
@@ -867,6 +1760,40 @@
 msgid "Save"
 msgstr "Sauver"
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr ""
+"Entrez un nouveau mot de passe pour l'utilisateur <strong>%(username)s</"
+"strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Mot de passe"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Mot de passe (à nouveau)"
+
+#: 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 "Entrez le même mot de passe que précedemment, par sécurité."
+
+#: 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 ""
+"Entrez tout d'abord un nom d'utilisateur et un mot de passe.Vous pourrez "
+"ensuite modifier plus d'options."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
 #: 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
@@ -1046,176 +1973,123 @@
 "Comme ci-dessus, mais ouvre la page d'administration dans une nouvelle "
 "fenêtre."
 
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Date :"
+#: contrib/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "nom du module python"
 
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Heure :"
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr "type de contenu"
 
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Actuellement :"
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "types de contenu"
 
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Modification :"
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Déconnecté"
 
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirigé depuis"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple: '/events/"
-"search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirigé vers"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ceci peut être soit un chemin absolu (voir ci-dessus) soit une URL complète "
-"débutant par 'http://'."
-
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "redirige"
-
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "redirige"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Par exemple : '/about/contact/'. Vérifiez la présence du caractère '/' en "
-"début et en fin de chaine."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "titre"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "contenu"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "autoriser les commentaires"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "nom du template"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Par exemple: 'flatfiles/contact_page'. Sans définition, le système utilisera "
-"'flatfiles/default'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "enregistrement requis"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Si coché, seuls les utilisateurs connectés auront la possibilité de voir "
-"cette page."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "page à plat"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "pages à plat"
-
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
 msgid "name"
 msgstr "nom"
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr "nom de code"
 
-#: contrib/auth/models.py:17
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr "permission"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
 msgid "permissions"
 msgstr "permissions"
 
-#: contrib/auth/models.py:29
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr "groupe"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
 msgid "groups"
 msgstr "groupes"
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr "nom d'utilisateur"
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"Requis. 30 caractères maximum, alphanumériques uniquement (lettres, "
+"chiffres, et tirets bas '_')."
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr "prénom"
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr "nom"
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr "courriel"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr "mot de passe"
 
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Utilisez '[algo]$[salt]$[hexdigest]'"
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Utilisez [algo]$[salt]$[hexdigest]' ou le <a href=\"password/\">formulaire "
+"de changement de mot de passe</a>."
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr "statut équipe"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
 msgstr "Précise si l'utilisateur peut se connecter à ce site d'administration."
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr "actif"
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Précise si l'utilisateur peut se connecter à l'administration. "
+"Déselectionnezceci plutôt que supprimer le compte."
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr "statut super-utilisateur"
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Précise que l'utilisateur possède toutes les permissions sans les assigner "
+"explicitement."
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr "dernière connexion"
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr "date d'inscription"
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1224,39 +2098,47 @@
 "recevra aussi toutes les permissions de tous les groupes auquels il "
 "appartient. "
 
-#: contrib/auth/models.py:67
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr "permissions de l'utilisateur"
 
-#: contrib/auth/models.py:70
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr "utilisateur"
 
-#: contrib/auth/models.py:71
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr "utilisateurs"
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr "Information personnelle"
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr "Permissions"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr "Dates importantes"
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr "Groupes"
 
-#: contrib/auth/models.py:219
+#: contrib/auth/models.py:258
 msgid "message"
 msgstr "message"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr "Les deux mots de passe ne correspondent pas."
+
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
+msgstr "Un utilisateur avec ce nom existe déjà."
+
+#: contrib/auth/forms.py:53
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1264,66 +2146,103 @@
 "Votre navigateur ne semble pas avoir activé les cookies. Les cookies sont "
 "nécessaire pour se connecter"
 
-#: contrib/contenttypes/models.py:25
-msgid "python model class name"
-msgstr "nom du module python"
+#: contrib/auth/forms.py:62
+msgid "This account is inactive."
+msgstr "Ce compte est inactif."
 
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "type de contenu"
+#: contrib/auth/forms.py:85
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Cette adresse e-mail ne correspond à aucun compte utilisateur. Êtes-vous sûr "
+"de vous être enregistré ?"
 
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "types de contenu"
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
+msgstr "Les deux nouveaux mots de passe ne correspondent pas."
 
-#: contrib/sessions/models.py:35
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Votre ancien mot de passe est incorrect. Veuillez le rectifier."
+
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
+msgstr ""
+
+#: contrib/localflavor/usa/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr ""
+
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "clé de session"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "donnée de session"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "date d'expiration"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "session"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "sessions"
 
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "nom de domaine"
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Par exemple : '/about/contact/'. Vérifiez la présence du caractère '/' en "
+"début et en fin de chaine."
 
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "nom à afficher"
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "titre"
 
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "site"
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "contenu"
 
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "sites"
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "autoriser les commentaires"
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "j F Y"
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "nom du template"
 
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, G:i"
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Par exemple: 'flatfiles/contact_page'. Sans définition, le système utilisera "
+"'flatfiles/default'."
 
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "G:i:s"
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "enregistrement requis"
 
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Si coché, seuls les utilisateurs connectés auront la possibilité de voir "
+"cette page."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "page à plat"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "pages à plat"
+
 #: utils/dates.py:6
 msgid "Monday"
 msgstr "Lundi"
@@ -1491,8 +2410,8 @@
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "semaine"
+msgstr[1] "semaines"
 
 #: utils/timesince.py:15
 msgid "day"
@@ -1512,485 +2431,66 @@
 msgstr[0] "minute"
 msgstr[1] "minutes"
 
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "Indien"
+#: utils/dateformat.py:40
+msgid "p.m."
+msgstr "après-midi"
 
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "Tchèque"
+#: utils/dateformat.py:41
+msgid "a.m."
+msgstr "matin"
 
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "Gallois"
+#: utils/dateformat.py:46
+msgid "PM"
+msgstr "Matin"
 
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "Dannois"
+#: utils/dateformat.py:47
+msgid "AM"
+msgstr "Après-midi"
 
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "Allemand"
+#: utils/dateformat.py:95
+msgid "midnight"
+msgstr "minuit"
 
-#: conf/global_settings.py:42
-msgid "Greek"
-msgstr "Grec"
+#: utils/dateformat.py:97
+msgid "noon"
+msgstr "midi"
 
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "Anglais"
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j F Y"
 
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "Espagnol"
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j F Y, G:i"
 
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "Français"
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "G:i:s"
 
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "Galicien"
+#: utils/translation/trans_real.py:380
+#, fuzzy
+msgid "YEAR_MONTH_FORMAT"
+msgstr "j F Y"
 
-#: conf/global_settings.py:47
-msgid "Hungarian"
-msgstr "Hongrois"
+#: utils/translation/trans_real.py:381
+#, fuzzy
+msgid "MONTH_DAY_FORMAT"
+msgstr "j F Y"
 
-#: conf/global_settings.py:48
-msgid "Hebrew"
-msgstr "Israélien"
+#: template/defaultfilters.py:491
+msgid "yes,no,maybe"
+msgstr "oui,non,peut-être"
 
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "Islandais"
+#~ msgid "%dth"
+#~ msgstr "%de"
 
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "Italien"
+#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+#~ msgstr ""
+#~ "Avez vous <a href=\"/password_reset/\">perdu votre mot de passe</a>?"
 
-#: conf/global_settings.py:51
-msgid "Japanese"
-msgstr "Japonais"
+#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
+#~ msgstr "Utilisez '[algo]$[salt]$[hexdigest]'"
 
-#: conf/global_settings.py:52
-msgid "Dutch"
-msgstr "Néerlandais"
-
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "Norvégien"
-
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "Brésilien"
-
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "Roumain"
-
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "Russe"
-
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "Slovaque"
-
-#: conf/global_settings.py:58
-msgid "Slovenian"
-msgstr "Slovaque"
-
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "Serbe"
-
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "Suédois"
-
-#: conf/global_settings.py:61
-msgid "Ukrainian"
-msgstr "Ukrainien"
-
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "Chinois simplifié"
-
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr "Chinois traditionnel"
-
-#: core/validators.py:60
-msgid "This value must contain only letters, numbers and underscores."
-msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres et des tirets bas "
-"('_')."
-
-#: core/validators.py:64
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas ('_') "
-"et des '/'."
-
-#: core/validators.py:72
-msgid "Uppercase letters are not allowed here."
-msgstr "Les lettres majuscules ne sont pas autorisées ici."
-
-#: core/validators.py:76
-msgid "Lowercase letters are not allowed here."
-msgstr "Les lettres minuscules ne sont pas autorisées ici."
-
-#: core/validators.py:83
-msgid "Enter only digits separated by commas."
-msgstr "Saisissez uniquement des chiffres séparés par des virgules."
-
-#: core/validators.py:95
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Entrez des adresses de courriel valides séparées par des virgules."
-
-#: core/validators.py:99
-msgid "Please enter a valid IP address."
-msgstr "Entrez une adresse IP valide."
-
-#: core/validators.py:103
-msgid "Empty values are not allowed here."
-msgstr "Vous ne pouvez pas laisser ce champ vide."
-
-#: core/validators.py:107
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Les caractères non numériques ne sont pas autorisés ici."
-
-#: core/validators.py:111
-msgid "This value can't be comprised solely of digits."
-msgstr "Cette valeur ne peut pas être composé uniquement de chiffres."
-
-#: core/validators.py:116
-msgid "Enter a whole number."
-msgstr "Entrez un nombre entier."
-
-#: core/validators.py:120
-msgid "Only alphabetical characters are allowed here."
-msgstr "Seules les lettres de l'alphabet sont autorisées ici."
-
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Entrez une date valide au format AAAA-MM-JJ."
-
-#: core/validators.py:128
-msgid "Enter a valid time in HH:MM format."
-msgstr "Entrez une heure valide au format HH:MM."
-
-#: core/validators.py:132 db/models/fields/__init__.py:468
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Entrez une date et une heure valide au format AAAA-MM-JJ HH:MM."
-
-#: core/validators.py:136
-msgid "Enter a valid e-mail address."
-msgstr "Entrez une adresse de courriel valide."
-
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Envoyez une image valide. Le fichier que vous avez transferé n'est pas une "
-"image ou bien est une image corrompue."
-
-#: core/validators.py:155
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "L'URL %s ne pointe pas vers une image valide."
-
-#: core/validators.py:159
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Les numéros de téléphone doivent être au format XXX-XXX-XXXX. \"%s\" est "
-"incorrect."
-
-#: core/validators.py:167
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "L'URL %s ne pointe pas vers une vidéo QuickTime valide."
-
-#: core/validators.py:171
-msgid "A valid URL is required."
-msgstr "Une URL valide est requise."
-
-#: core/validators.py:185
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Du HTML valide est requis. Les erreurs sont les suivantes :\n"
-"%s"
-
-#: core/validators.py:192
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML mal formé : %s"
-
-#: core/validators.py:202
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL invalide : %s"
-
-#: core/validators.py:206 core/validators.py:208
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "L'URL %s est un lien cassé."
-
-#: core/validators.py:214
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Entrez une abréviation d'état américain valide."
-
-#: core/validators.py:229
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Attention à votre langage ! Le mot %s n'est pas autorisé ici."
-msgstr[1] "Attention à votre langage ! Les mots %s ne sont pas autorisés ici."
-
-#: core/validators.py:236
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Ce champ doit correspondre au champ '%s'."
-
-#: core/validators.py:255
-msgid "Please enter something for at least one field."
-msgstr "Saisissez au moins une valeur dans un des champs s'il vous plaît."
-
-#: core/validators.py:264 core/validators.py:275
-msgid "Please enter both fields or leave them both empty."
-msgstr ""
-"Renseignez chacun des champs ou laissez les deux vides s'il vous plaît."
-
-#: core/validators.py:282
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Ce champ doit être renseigné si %(field)s vaut %(value)s"
-
-#: core/validators.py:294
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Ce champ doit être renseigné si %(field)s ne vaut pas %(value)s"
-
-#: core/validators.py:313
-msgid "Duplicate values are not allowed."
-msgstr "Des valeurs identiques ne sont pas autorisées."
-
-#: core/validators.py:336
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Cette valeur doit être une puissance de %s."
-
-#: core/validators.py:347
-msgid "Please enter a valid decimal number."
-msgstr "Saisissez un nombre décimal valide s'il vous plaît."
-
-#: core/validators.py:349
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] ""
-"Saisissez un nombre décimal valide avec au plus %s chiffre s'il vous plaît."
-msgstr[1] ""
-"Saisissez un nombre décimal valide avec au plus %s chiffres s'il vous plaît."
-
-#: core/validators.py:352
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] ""
-"Saisissez un nombre décimal valide avec au plus %s décimale s'il vous plaît"
-msgstr[1] ""
-"Saisissez un nombre décimal valide avec au plus %s décimales s'il vous plaît"
-
-#: core/validators.py:362
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr ""
-"Vérifiez que le fichier transféré fait au moins une taille de %s octets."
-
-#: core/validators.py:363
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr ""
-"Vérifiez que le fichier transféré fait au plus une taille de %s octets."
-
-#: core/validators.py:376
-msgid "The format for this field is wrong."
-msgstr "Le format de ce champ est mauvais."
-
-#: core/validators.py:391
-msgid "This field is invalid."
-msgstr "Ce champ est invalide."
-
-#: core/validators.py:426
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Impossible de récupérer quoi que ce soit depuis %s."
-
-#: core/validators.py:429
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"L'entête Content-Type '%(contenttype)s', renvoyée par l'url %(url)s n'est "
-"pas valide."
-
-#: core/validators.py:462
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Veuillez fermer le tag %(tag)s de la ligne %(line)s. (La ligne débutant par "
-"\"%(start)s\".)"
-
-#: core/validators.py:466
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Du texte commençant à la ligne %(line)s n'est pas autorisé dans ce contexte. "
-"(Ligne débutant par \"%(start)s\".)"
-
-#: core/validators.py:471
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"%(attr)s\" ligne %(line)s n'est pas un attribut valide. (Ligne débutant "
-"par \"%(start)s\".)"
-
-#: core/validators.py:476
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" ligne %(line)s n'est pas un tag valide. (Ligne débutant par \"%"
-"(start)s\".)"
-
-#: core/validators.py:480
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Un tag, ou un ou plusieurs attributs, de la ligne %(line)s est manquant. "
-"(Ligne débutant par \"%(start)s\".)"
-
-#: core/validators.py:485
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"La valeur de l'attribut \"%(attr)s\" de la ligne %(line)s n'est pas valide. "
-"(Ligne débutant par \"%(start)s\".)"
-
-#: db/models/manipulators.py:302
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s avec le champ %(fieldname)s existe déjà."
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "Ce champ est obligatoire."
-
-#: db/models/fields/__init__.py:337
-msgid "This value must be an integer."
-msgstr "Cette valeur doit être un entier."
-
-#: db/models/fields/__init__.py:369
-msgid "This value must be either True or False."
-msgstr "Cette valeur doit être soit Vraie soit Fausse."
-
-#: db/models/fields/__init__.py:385
-msgid "This field cannot be null."
-msgstr "Ce champ ne peut pas être vide."
-
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "Entrez un nom de fichier valide."
-
-#: db/models/fields/related.py:43
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Entrez un %s valide."
-
-#: db/models/fields/related.py:579
-msgid "Separate multiple IDs with commas."
-msgstr "Séparez les ID par des virgules."
-
-#: db/models/fields/related.py:581
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Maintenez \"Contrôle (ctrl)\", ou \"Commande (touche pomme)\" sur un Mac, "
-"pour en sélectionner plusieurs."
-
-#: db/models/fields/related.py:625
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Entrez un ID %(self)s valide. La valeur %(value)r est invalide."
-msgstr[1] ""
-"Entrez des ID %(self)s valides. Les valeurs %(value)r sont invalides."
-
-#: forms/__init__.py:380
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Assurez-vous que votre texte fais moins de %s caractère."
-msgstr[1] "Assurez-vous que votre texte fais moins de %s caractères."
-
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-msgstr "Les retours à la ligne ne sont pas autorisés ici."
-
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Sélectionnez un choix valide ; '%(data)s' n'est pas dans %(choices)s."
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "Le fichier soumis est vide."
-
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Entrez un nombre entier entre -32 768 et 32 767."
-
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "Entrez un nombre entier positif."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Entrez un nombre entier entre 0 et 32 767."
-
-#: template/defaultfilters.py:379
-msgid "yes,no,maybe"
-msgstr "oui,non,peut-être"
-
 #~ msgid "Comment"
 #~ msgstr "Commentaire"
 

Modified: vendor/django/current/django/conf/locale/it/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/it/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/it/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/it/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,357 +1,730 @@
+# translation of django.po to Italiano
 # Italian translation of Django.
 # Copyright (C) 2006 the Lawrence Journal-World
 # This file is distributed under the same license as the Django package.
+#
 # Carlo C8E Miron <carlo.miron AT gmail.com>, 2006.
-# 
-# 
+# Nicola 'tekNico' Larosa <nico AT tekNico.net>, 2007.
+# Nicola Larosa <nico at tekNico.net>, 2007.
 msgid ""
 msgstr ""
-"Project-Id-Version: Django pre-1.0\n"
+"Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:12+0200\n"
-"PO-Revision-Date: 2006-05-21 23:45+0200\n"
-"Last-Translator: Carlo C8E Miron <carlo.miron AT gmail.com>\n"
-"Language-Team: Italian <Django-I18N at googlegroups.com>\n"
+"POT-Creation-Date: 2007-02-26 20:44+0100\n"
+"PO-Revision-Date: 2007-03-14 19:29+0100\n"
+"Last-Translator: Nicola Larosa <nico at tekNico.net>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"Language-Team: Italiano\n"
 
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
-msgid "object ID"
-msgstr "ID dell'oggetto"
+#: db/models/manipulators.py:307
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(object)s·con questo·%(type)s·esiste già per questo·%(field)s."
 
-#: contrib/comments/models.py:68
-msgid "headline"
-msgstr "intestazione"
+#: 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 "e"
 
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
-#: contrib/comments/models.py:167
-msgid "comment"
-msgstr "commento"
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Inserire un %s valido."
 
-#: contrib/comments/models.py:70
-msgid "rating #1"
-msgstr "valutazione #1"
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Separare ID multipli con virgole."
 
-#: contrib/comments/models.py:71
-msgid "rating #2"
-msgstr "valutazione #2"
+#: db/models/fields/related.py:644
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Tenere premuto \"Control\", o \"Command\" su Mac, per selezionarne più di uno."
 
-#: contrib/comments/models.py:72
-msgid "rating #3"
-msgstr "valutazione #3"
+#: 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] "Inserire un ID validi per %(self)s. Il valore %(value)r non è valido."
+msgstr[1] "Inserire un ID validi per %(self)s. I valori %(value)r non sono validi."
 
-#: contrib/comments/models.py:73
-msgid "rating #4"
-msgstr "valutazione #4"
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s·con questo·%(fieldname)s·esiste già."
 
-#: contrib/comments/models.py:74
-msgid "rating #5"
-msgstr "valutazione #5"
+#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:609 db/models/fields/__init__.py:620
+#: oldforms/__init__.py:352 newforms/fields.py:78 newforms/fields.py:374
+#: newforms/fields.py:450 newforms/fields.py:461 newforms/models.py:177
+msgid "This field is required."
+msgstr "Questo campo è obbligatorio."
 
-#: contrib/comments/models.py:75
-msgid "rating #6"
-msgstr "valutazione #6"
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Questo valore deve essere un intero."
 
-#: contrib/comments/models.py:76
-msgid "rating #7"
-msgstr "valutazione #7"
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Questo valore deve essere True o False."
 
-#: contrib/comments/models.py:77
-msgid "rating #8"
-msgstr "valutazione #8"
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Questo campo non può essere nullo."
 
-#: contrib/comments/models.py:82
-msgid "is valid rating"
-msgstr "valutazione valida"
+#: db/models/fields/__init__.py:456 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Inserire una data valida in formato AAAA-MM-GG."
 
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
-msgid "date/time submitted"
-msgstr "data/ora di sottomissione"
+#: db/models/fields/__init__.py:525 core/validators.py:156
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Inserire una data/ora valida in formato AAAA-MM-GG OO:MM."
 
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
-msgid "is public"
-msgstr "pubblico"
+#: db/models/fields/__init__.py:629
+msgid "Enter a valid filename."
+msgstr "Inserire un nome file valido."
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
-msgid "IP address"
-msgstr "indirizzo IP"
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Arabo"
 
-#: contrib/comments/models.py:86
-msgid "is removed"
-msgstr "eliminato"
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Bengali"
 
-#: contrib/comments/models.py:86
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr "Catalano"
+
+#: conf/global_settings.py:42
+msgid "Czech"
+msgstr "Ceco"
+
+#: conf/global_settings.py:43
+msgid "Welsh"
+msgstr "Gallese"
+
+#: conf/global_settings.py:44
+msgid "Danish"
+msgstr "Danese"
+
+#: conf/global_settings.py:45
+msgid "German"
+msgstr "Tedesco"
+
+#: conf/global_settings.py:46
+msgid "Greek"
+msgstr "Greco"
+
+#: conf/global_settings.py:47
+msgid "English"
+msgstr "Inglese"
+
+#: conf/global_settings.py:48
+msgid "Spanish"
+msgstr "Spagnolo"
+
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr "Spagnolo argentino"
+
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "Finlandese"
+
+#: conf/global_settings.py:51
+msgid "French"
+msgstr "Francese"
+
+#: conf/global_settings.py:52
+msgid "Galician"
+msgstr "Galiziano"
+
+#: conf/global_settings.py:53
+msgid "Hungarian"
+msgstr "Ungherese"
+
+#: conf/global_settings.py:54
+msgid "Hebrew"
+msgstr "Ebraico"
+
+#: conf/global_settings.py:55
+msgid "Icelandic"
+msgstr "Islandese"
+
+#: conf/global_settings.py:56
+msgid "Italian"
+msgstr "Italiano"
+
+#: conf/global_settings.py:57
+msgid "Japanese"
+msgstr "Giapponese"
+
+#: conf/global_settings.py:58
+msgid "Kannada"
+msgstr "Kannada"
+
+#: conf/global_settings.py:59
+msgid "Latvian"
+msgstr "Lettone"
+
+#: conf/global_settings.py:60
+msgid "Macedonian"
+msgstr "Macedone"
+
+#: conf/global_settings.py:61
+msgid "Dutch"
+msgstr "Olandese"
+
+#: conf/global_settings.py:62
+msgid "Norwegian"
+msgstr "Norvegese"
+
+#: conf/global_settings.py:63
+msgid "Polish"
+msgstr "Polacco"
+
+#: conf/global_settings.py:64
+msgid "Brazilian"
+msgstr "Brasiliano"
+
+#: conf/global_settings.py:65
+msgid "Romanian"
+msgstr "Rumeno"
+
+#: conf/global_settings.py:66
+msgid "Russian"
+msgstr "Russo"
+
+#: conf/global_settings.py:67
+msgid "Slovak"
+msgstr "Slovacco"
+
+#: conf/global_settings.py:68
+msgid "Slovenian"
+msgstr "Sloveno"
+
+#: conf/global_settings.py:69
+msgid "Serbian"
+msgstr "Serbo"
+
+#: conf/global_settings.py:70
+msgid "Swedish"
+msgstr "Svedese"
+
+#: conf/global_settings.py:71
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:72
+msgid "Turkish"
+msgstr "Turco"
+
+#: conf/global_settings.py:73
+msgid "Ukrainian"
+msgstr "Ucraino"
+
+#: conf/global_settings.py:74
+msgid "Simplified Chinese"
+msgstr "Cinese semplificato"
+
+#: conf/global_settings.py:75
+msgid "Traditional Chinese"
+msgstr "Cinese tradizionale"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Questo valore può contenere solo lettere, cifre e sottolineature."
+
+#: core/validators.py:68
 msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
 msgstr ""
-"Spunta la casella se il commento è inappropriato. Verrà sostituito con un "
-"messaggio \"Questo commento è stato rimosso\"."
+"Questo valore può contenere solo lettere, cifre, sottolineature, trattini e "
+"barre diagonali."
 
-#: contrib/comments/models/comments.py:31
-msgid "Comment"
-msgstr "Commento"
+#: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Questo valore può contenere solo lettere, cifre, sottolineature e trattini."
 
-#: contrib/comments/models/comments.py:32
-#: contrib/comments/models.py:91
-msgid "Comments"
-msgstr "Commenti"
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "Non sono ammesse lettere maiuscole."
 
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
-msgid "Content object"
-msgstr "Contenitore"
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "Non sono ammesse lettere minuscole."
 
-#: contrib/comments/models.py:159
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Inserire solo cifre separate da virgole."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Inserire indirizzi e-mail validi separati da virgole."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "Inserire un indirizzo IP valido."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "È necessario inserire un valore."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Sono ammessi soltanto caratteri numerici."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Questo valore non può essere composto solo da cifre."
+
+#: core/validators.py:120 newforms/fields.py:126
+msgid "Enter a whole number."
+msgstr "Inserire un numero intero."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Sono ammessi solo caratteri alfabetici."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "L'anno deve essere 1900 o successivo."
+
+#: core/validators.py:143
 #, python-format
+msgid "Invalid date: %s."
+msgstr "Data non valida: %s."
+
+#: core/validators.py:152
+msgid "Enter a valid time in HH:MM format."
+msgstr "Inserire un orario valido in formato OO:MM."
+
+#: core/validators.py:161 newforms/fields.py:269
+msgid "Enter a valid e-mail address."
+msgstr "Inserire un indirizzo e-mail valido."
+
+#: core/validators.py:173 core/validators.py:444 oldforms/__init__.py:667
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Non è stato inviato alcun file. Verificare il tipo di codifica della form."
+
+#: core/validators.py:177
 msgid ""
-"Posted by %(user)s at %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr "Caricare un'immagine valida. Il file caricato non è un'immagine o è corrotto."
+
+#: core/validators.py:184
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "La URL %s non punta ad un'immagine valida."
+
+#: core/validators.py:188
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "I numeri di telefono devono essere in formato XXX-XXX-XXXX. \"%s\" non è valido."
+
+#: core/validators.py:196
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "La URL %s non punta ad un video QuickTime valido."
+
+#: core/validators.py:200
+msgid "A valid URL is required."
+msgstr "Inserire una URL valida."
+
+#: core/validators.py:214
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
 msgstr ""
-"Commento di %(user)s del %(date)s\n"
-"\n"
-"%(comment)s\n"
-"\n"
-"http://%(domain)s%(url)s"
+"È richiesto HTML valido. Gli errori sono i seguenti:\n"
+"%s"
 
-#: contrib/comments/models.py:168
-msgid "person's name"
-msgstr "nome della persona"
+#: core/validators.py:221
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML malformato: %s"
 
-#: contrib/comments/models.py:171
-msgid "ip address"
-msgstr "indirizzo IP"
+#: core/validators.py:238
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL non valida: %s"
 
-#: contrib/comments/models.py:173
-msgid "approved by staff"
-msgstr "approvato dallo staff"
+#: core/validators.py:243 core/validators.py:245
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "La URL %s è un link non funzionante."
 
-#: contrib/comments/models.py:176
-msgid "free comment"
-msgstr "commento libero"
+#: core/validators.py:251
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Inserire un valido nome di stato USA abbreviato."
 
-#: contrib/comments/models.py:177
-msgid "free comments"
-msgstr "commenti liberi"
+#: core/validators.py:265
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Moderare i termini: la parola %s non è ammessa."
+msgstr[1] "Moderare i termini: le parole %s non sono ammesse."
 
-#: contrib/comments/models.py:233
-msgid "score"
-msgstr "punteggio"
+#: core/validators.py:272
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Questo campo deve corrispondere al campo '%s'."
 
-#: contrib/comments/models.py:234
-msgid "score date"
-msgstr "data punteggio"
+#: core/validators.py:291
+msgid "Please enter something for at least one field."
+msgstr "Inserire qualcosa in almeno un campo."
 
-#: contrib/comments/models.py:237
-msgid "karma score"
-msgstr "livello karma"
+#: core/validators.py:300 core/validators.py:311
+msgid "Please enter both fields or leave them both empty."
+msgstr "Inserire entrambi i campi o lasciarli entrambi vuoti."
 
-#: contrib/comments/models.py:238
-msgid "karma scores"
-msgstr "livelli karma"
+#: core/validators.py:319
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Questo campo è obbligatorio se %(field)s è %(value)s"
 
-#: contrib/comments/models.py:242
+#: core/validators.py:332
 #, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "valutazione: %(score)d da %(user)s"
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Questo campo è obbligatorio se %(field)s non è %(value)s"
 
-#: contrib/comments/models.py:258
+#: core/validators.py:351
+msgid "Duplicate values are not allowed."
+msgstr "Non sono ammessi valori duplicati."
+
+#: core/validators.py:366
 #, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Questo commento ha un flag di %(user)s:\n"
-"\n"
-"%(text)s"
+msgid "This value must be between %s and %s."
+msgstr "Questo valore deve essere compreso tra %s e %s."
 
-#: contrib/comments/models.py:265
-msgid "flag date"
-msgstr "data flag"
+#: core/validators.py:368
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Questo valore deve essere almeno pari a %s."
 
-#: contrib/comments/models.py:268
-msgid "user flag"
-msgstr "flag utente"
+#: core/validators.py:370
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "Questo valore non deve essere maggiore di %s."
 
-#: contrib/comments/models.py:269
-msgid "user flags"
-msgstr "flag utente"
+#: core/validators.py:406
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Questo valore deve essere una potenza di %s."
 
-#: contrib/comments/models.py:273
+#: core/validators.py:417
+msgid "Please enter a valid decimal number."
+msgstr "Inserire un numero decimale valido."
+
+#: core/validators.py:421
 #, python-format
-msgid "Flag by %r"
-msgstr "Flag da %r"
+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] "Inserire un numero decimale con non più di %s cifra in totale."
+msgstr[1] "Inserire un numero decimale con non più di %s cifre in totale."
 
-#: contrib/comments/models/comments.py:278
-#: contrib/comments/models.py:278
-msgid "deletion date"
-msgstr "data eliminazione"
+#: core/validators.py:424
+#, 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] "Inserire un numero decimale la cui parte intera sia composta da non più di %s cifra."
+msgstr[1] "Inserire un numero decimale la cui parte intera sia composta da non più di %s cifre."
 
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "rimozione da moderatore"
+#: core/validators.py:427
+#, 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] "Inserire un decimale con non più di %s cifra decimale."
+msgstr[1] "Inserire un decimale con non più di %s cifre decimali."
 
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "rimozioni da moderatore"
+#: core/validators.py:437
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Verificare che il file caricato sia grande almeno %s byte."
 
-#: contrib/comments/models.py:285
+#: core/validators.py:438
 #, python-format
-msgid "Moderator deletion by %r"
-msgstr "Rimozione da moderatore di %r"
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Verificare che il file caricato non sia più grande di %s byte."
 
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "Gli utenti anonimi non possono votare"
+#: core/validators.py:455
+msgid "The format for this field is wrong."
+msgstr "Il formato di questo campo non è valido."
 
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "ID commento non valido"
+#: core/validators.py:470
+msgid "This field is invalid."
+msgstr "Questo campo non è valido."
 
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "Non votare per te stesso"
+#: core/validators.py:506
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Impossibile recuperare alcunché da %s."
 
-#: contrib/comments/views/comments.py:28
+#: core/validators.py:509
+#, python-format
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "La URL %(url)s ha restituito un header Content-Type non valido: '%(contenttype)s'."
+
+#: core/validators.py:542
+#, python-format
 msgid ""
-"This rating is required because you've entered at least one other rating."
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr "Chiudere il tag %(tag)s a linea %(line)s. (La linea inizia con \"%(start)s\".)"
+
+#: core/validators.py:546
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
 msgstr ""
-"Questa valutazione è obbligatoria perché hai inserito almeno un'altra valutazione"
+"Il testo che comincia a linea %(line)s non e' ammesso in questo contesto. "
+"(La linea comincia con \"%(start)s\".)"
 
-#: contrib/comments/views/comments.py:112
+#: core/validators.py:551
 #, 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] ""
-"Commento di un utente autore di meno di %(count)s commento:\n"
-"\n"
-"%(text)s"
-msgstr[1] ""
-"Commento di un utente autore di meno di %(count)s commenti:\n"
-"\n"
-"%(text)s"
-""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr "\"%(attr)s\" a linea %(line)s non è un attributo valido. (La linea comincia con \"%(start)s\".)"
 
-#: contrib/comments/views/comments.py:117
+#: core/validators.py:556
 #, python-format
 msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
 msgstr ""
-"Commento di un utente \"sketchy\":\n"
-"\n"
-"%(text)s"
+"\"<%(tag)s>\" a linea %(line)s non è un tag valido. (La linea comincia con \"%"
+"(start)s\".)"
 
-#: contrib/comments/views/comments.py:189
-#: contrib/comments/views/comments.py:280
-msgid "Only POSTs are allowed"
-msgstr "Sono ammessi solo POST"
+#: core/validators.py:560
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Un tag a linea %(line)s manca di uno o più attributi richiesti. (La linea "
+"comincia con \"%(start)s\".)"
 
-#: contrib/comments/views/comments.py:193
-#: contrib/comments/views/comments.py:284
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Uno o più dei campi richiesti non sono stati sottomessi"
+#: core/validators.py:565
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"L'attributo \"%(attr)s\" a linea %(line)s ha un valore non valido. (La "
+"linea comincia con \"%(start)s\".)"
 
-#: contrib/comments/views/comments.py:197
-#: contrib/comments/views/comments.py:286
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Qualcuno ha alterato il modulo di commento (violazione di sicurezza)"
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr "I due campi password non corrispondono."
 
-#: contrib/comments/views/comments.py:207
-#: contrib/comments/views/comments.py:292
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
+msgstr "Un utente con questo nome·è già presente."
+
+#: contrib/auth/forms.py:53
 msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr "Il browser web sembra non avere i cookie abilitati. I cookie sono necessari per poter accedere."
+
+#: 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 ""
-"Il modulo di commento ha un parametro 'target' non valido -- l'ID dell'oggetto non e` valido"
+"Inserire nome utente e password corretti. Entrambi i campi sono case "
+"sensitive."
 
-#: contrib/comments/views/comments.py:257
-#: contrib/comments/views/comments.py:321
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Il modulo di commento non fornisce 'anteprima' o 'invia'"
+#: contrib/auth/forms.py:62
+msgid "This account is inactive."
+msgstr "Questo account non è attivo."
 
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "Nome utente:"
+#: contrib/auth/forms.py:85
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr "Questo indirizzo email non è associato ad alcun account utente. Sei sicuro di esserti registrato?"
 
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Password:"
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
+msgstr "I due campi 'nuova password' non corrispondono."
 
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr "Hai dimenticato la password?"
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "La vecchia password non è stata inserita correttamente: va inserita di nuovo."
 
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
-#: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
-#: contrib/admin/templates/admin_doc/template_tag_index.html:5
-#: contrib/admin/templates/admin_doc/template_detail.html:4
-#: contrib/admin/templates/admin_doc/template_filter_index.html:5
-#: contrib/admin/templates/admin_doc/missing_docutils.html:4
-#: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
-#: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Log out"
-msgstr "Esci"
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "nome"
 
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Valutazioni"
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "nome in codice"
 
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Obbligatorio"
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "permesso"
 
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Opzionale"
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "permessi"
 
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Invia una foto"
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "gruppo"
 
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Commento:"
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "gruppi"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-msgid "Preview comment"
-msgstr "Anteprima commento"
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "nome utente"
 
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Il tuo nome:"
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr "Obbligatorio. 30 caratteri o meno. Solo caratteri alfanumerici (lettere, cifre e sottolineature)."
 
+#: contrib/auth/models.py:91
+msgid "first name"
+msgstr "nome"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "cognome"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "indirizzo e-mail"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "password"
+
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr "Usare '[algo]$[salt]$[hexdigest]' oppure la maschera di <a href=\"password/\">cambio password</a>."
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "privilegi di staff"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Indica se l'utente può accedere a questo sito di amministrazione."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "attivo"
+
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr "Indica se l'utente può accedere all'amministrazione di Django. Deselezionare qui, piuttosto che cancellare gli account."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "privilegi di superutente"
+
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "Indica che l'utente ha tutti i privilegi, senza che siano stati assegnati esplicitamente."
+
+#: contrib/auth/models.py:98
+msgid "last login"
+msgstr "ultimo accesso"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "iscritto in data"
+
+#: 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 ""
+"In aggiunta ai privilegi assegnati manualmente, l'utente riceverà anche tutti "
+"i privilegi assegnati ad ogni gruppo cui appartiene."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "privilegi utente"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "utente"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "utenti"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Informazioni personali"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Privilegi"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Date importanti"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Gruppi"
+
+#: contrib/auth/models.py:258
+msgid "message"
+msgstr "messaggio"
+
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Accesso annullato"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "data azione"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "ID oggetto"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "rappresentazione oggetto"
+
+#: contrib/admin/models.py:21
+msgid "action flag"
+msgstr "flag azione"
+
+#: contrib/admin/models.py:22
+msgid "change message"
+msgstr "messaggio di modifica"
+
+#: contrib/admin/models.py:25
+msgid "log entry"
+msgstr "voce di log"
+
+#: contrib/admin/models.py:26
+msgid "log entries"
+msgstr "voci di log"
+
 #: contrib/admin/filterspecs.py:40
 #, python-format
 msgid ""
@@ -362,7 +735,7 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "Tutti"
 
@@ -386,600 +759,621 @@
 msgid "This year"
 msgstr "Quest'anno"
 
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 oldforms/__init__.py:572
+#: newforms/widgets.py:170
 msgid "Yes"
 msgstr "Sì"
 
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 oldforms/__init__.py:572
+#: newforms/widgets.py:170
 msgid "No"
 msgstr "No"
 
-#: contrib/admin/filterspecs.py:150
+#: contrib/admin/filterspecs.py:150 oldforms/__init__.py:572
+#: newforms/widgets.py:170
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: contrib/admin/models.py:16
-msgid "action time"
-msgstr "data azione"
-
-#: contrib/admin/models.py:19
-msgid "object id"
-msgstr "ID dell'oggetto"
-
-#: contrib/admin/models.py:20
-msgid "object repr"
-msgstr "rappresentazione dell'oggetto"
-
-#: contrib/admin/models.py:21
-msgid "action flag"
-msgstr "flag azione"
-
-#: contrib/admin/models.py:22
-msgid "change message"
-msgstr "modifica messaggio"
-
-#: contrib/admin/models.py:25
-msgid "log entry"
-msgstr "voce di log"
-
-#: contrib/admin/models.py:26
-msgid "log entries"
-msgstr "voci di log"
-
-#: contrib/admin/templatetags/admin_list.py:228
-msgid "All dates"
-msgstr "Tutte le date"
-
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Inserire nome utente e password corretti. Entrambi i campi sono case sensitive."
-
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "Accedi"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
 msgstr ""
-"La sessione è scaduta, si prega di accedere nuovamente. I dati sono stati salvati."
+"La sessione è scaduta: occorre accedere nuovamente. I dati inseriti sono stati comunque"
+"salvati."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
-msgstr ""
-"Il browser non è configurato per accettare cookie. Abilitarli, ricaricare la pagina e provare di nuovo."
+msgstr "Il browser non sembra configurato per accettare i cookie. Una volta abilitati, ricaricare la pagina e riprovare."
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
-msgstr "Il nome utente non può contenere il carattere '@'."
+msgstr "I nomi utente non possono contenere il carattere '@'."
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Il nome utente non è l'indirizzo e-mail. Provare con '%s'."
+msgstr "Il nome utente non è costituito dall'indirizzo e-mail. Provare con '%s'."
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
 msgstr "Amministrazione sito"
 
-#: contrib/admin/views/main.py:410
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "L'oggetto %(name)s di tipo \"%(obj)s\" è stato aggiunto."
+msgstr "%(name)s \"%(obj)s\" è stato aggiunto correttamente."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:24
 msgid "You may edit it again below."
-msgstr "Puoi modificarlo nuovamente qui sotto."
+msgstr "È possibile modificarlo nuovamente qui sotto."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
-msgstr "Puoi aggiungere un altro %s qui sotto."
+msgstr "È possibile aggiungere un altro %s qui sotto."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
-msgstr "Aggiungi %s"
+msgstr "Aggiungere %s"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "Aggiunto %s"
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "e"
-
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "Modificato %s."
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
-msgstr "Rimosso %s"
+msgstr "Cancellato %s"
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "Nessun campo modificato."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "L'oggetto %(name)s di tipo \"%(obj)s\" è stato modificato."
+msgstr "%(name)s \"%(obj)s\" è stato modificato correttamente."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"L'oggetto %(name)s di tipo \"%(obj)s\" è stato aggiunto. Puoi modificarlo nuovamente qui sotto."
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" è stato aggiunto correttamente. È possibile modificarlo nuovamente qui sotto."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
-msgstr "Modifica %s"
+msgstr "Modificare %s"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:476
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Uno o più %(fieldname)s in %(name)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:481
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Uno o più %(fieldname)s in %(name)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:514
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "L'oggetto %(name)s di tipo \"%(obj)s\" è stato rimosso."
+msgstr "%(name)s \"%(obj)s\" è stato cancellato correttamente."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:517
 msgid "Are you sure?"
 msgstr "Sei sicuro?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:539
 #, python-format
 msgid "Change history: %s"
-msgstr "Storia delle modifiche: %s"
+msgstr "Tracciato delle modifiche: %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:573
 #, python-format
 msgid "Select %s"
-msgstr "Selezionare %s"
+msgstr "Seleziona %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:573
 #, python-format
 msgid "Select %s to change"
-msgstr "Selezionare %s per modificare"
+msgstr "Seleziona %s per modificare"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:768
+msgid "Database error"
+msgstr "Errore nel database"
+
+#: 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 "filtro:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "view:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "Appl. %r non trovata"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "Modello %r non trovato nell'appl. %r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "l'oggetto `%s.%s` collegato"
+
+#: 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 "modello:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "oggetti `%s.%s` collegati"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "tutti %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "numero di %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Campi sugli oggetti %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 "Intero"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "Booleano (True o False)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
-msgstr "Stringa (massimo %(maxlength)s caratteri)"
+msgstr "Stringa (fino a %(maxlength)s caratteri)"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "Interi separati da virgola"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "Data (senza orario)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "Data (con orario)"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "Indirizzo e-mail"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "Percorso di file"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr "Numero decimale"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85
+msgid "IP address"
+msgstr "indirizzo IP"
+
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "Booleano (True, False o None)"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
-msgstr "Relazione a modello padre"
+msgstr "Collegamento a modello padre"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "Numero di telefono"
 
-#: contrib/admin/views/doc.py:263
-msgid "String (up to 50)"
-msgstr "Stringa (massimo 50 caratteri)"
-
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "Testo"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
-msgstr "Ora"
+msgstr "Orario"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
-msgstr "Stato americano (due lettere maiuscole)"
+msgstr "Stato USA (due lettere maiuscole)"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "Testo XML"
 
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s non sembra essere un oggetto urlpattern"
+
+#: contrib/admin/views/auth.py:30
+msgid "Add user"
+msgstr "Aggiungi utente"
+
+#: contrib/admin/views/auth.py:57
+msgid "Password changed successfully."
+msgstr "La password è stata cambiata correttamente."
+
+#: contrib/admin/views/auth.py:64
+#, python-format
+msgid "Change password: %s"
+msgstr "Cambia la password: %s"
+
+#: contrib/admin/templatetags/admin_list.py:247
+msgid "All dates"
+msgstr "Tutte le date"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Mostra tutto"
+
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/auth/user/change_password.html:9
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
 #: 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 "Documentazione"
 
-#: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
-#: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/object_history.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/admin_doc/template_filter_index.html:5
 #: contrib/admin/templates/admin_doc/bookmarklets.html:4
-#: contrib/admin/templates/admin_doc/view_detail.html:4
 #: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
 #: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+msgid "Change password"
+msgstr "Cambia la password"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/auth/user/change_password.html:9
 #: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_detail.html:3
 #: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/template_detail.html:4
 #: contrib/admin/templates/admin_doc/view_index.html:5
-#: contrib/admin/templates/admin_doc/model_detail.html:3
-#: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/model_index.html:5
-msgid "Change password"
-msgstr "Modifica la password"
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/comments/templates/comments/form.html:6
+msgid "Log out"
+msgstr "Esci"
 
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/change_form.html:13
+#: 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/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
-#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/base.html:30
+#: contrib/admin/templates/admin/auth/user/change_password.html:12
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
 #: 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
+#: contrib/admin/templates/registration/password_change_done.html:4
 msgid "Home"
 msgstr "Pagina iniziale"
 
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
-msgid "History"
-msgstr "Storia"
-
-#: contrib/admin/templates/admin/object_history.html:18
-msgid "Date/time"
-msgstr "Data/ora"
-
-#: contrib/admin/templates/admin/object_history.html:19
-msgid "User"
-msgstr "Utente"
-
-#: contrib/admin/templates/admin/object_history.html:20
-msgid "Action"
-msgstr "Azione"
-
-#: contrib/admin/templates/admin/object_history.html:26
-msgid "DATE_WITH_TIME_FULL"
-msgstr "j F Y, H:i"
-
-#: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Questo oggetto non ha cambiamenti storicizzati. Probabilmente non è stato "
-"creato con questo sito di amministrazione."
-
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Amministrazione sito Django"
-
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Amministrazione Django"
-
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "Errore del server"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "Errore del server (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "Errore del Server <em>(500)</em>"
-
-#: 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 ""
-"C'è stato un errore. E' stato riportato agli amministratori del sito via e-"
-"mail e verrà risolto a breve. Grazie per la pazienza."
-
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Pagina non trovata"
-
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Spiacente, ma la pagina richiesta non esiste."
-
-#: contrib/admin/templates/admin/index.html:17
-#, python-format
-msgid "Models available in the %(name)s application."
-msgstr "Modelli disponibili nell'applicazione %(name)s."
-
-#: contrib/admin/templates/admin/index.html:28
-#: contrib/admin/templates/admin/change_form.html:15
-msgid "Add"
-msgstr "Aggiungi"
-
-#: contrib/admin/templates/admin/index.html:34
-msgid "Change"
-msgstr "Modifica"
-
-#: contrib/admin/templates/admin/index.html:44
-msgid "You don't have permission to edit anything."
-msgstr "Non hai i permessi di modificare nulla."
-
-#: contrib/admin/templates/admin/index.html:52
-msgid "Recent Actions"
-msgstr "Azioni Recenti"
-
-#: contrib/admin/templates/admin/index.html:53
-msgid "My Actions"
-msgstr "Azioni Proprie"
-
-#: contrib/admin/templates/admin/index.html:57
-msgid "None available"
-msgstr "Nessuna disponibile"
-
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Aggiungi %(name)s"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Hai <a href=\"/password_reset/\">dimenticato la tua password</a>?"
-
-#: contrib/admin/templates/admin/base.html:23
-msgid "Welcome,"
-msgstr "Benvenuto,"
-
 #: contrib/admin/templates/admin/delete_confirmation.html:9
 #: contrib/admin/templates/admin/submit_line.html:3
 msgid "Delete"
-msgstr "Elimina"
+msgstr "Cancella"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
-"La rimozione di %(object_name)s '%(object)s' causerebbe la cancellazione "
-"degli oggetti relazionati, ma il tuo account non ha i permessi per rimuovere "
-"i seguenti tipi di oggetti:"
+"La cancellazione di %(object_name)s '%(escaped_object)s' causerebbe la cancellazione "
+"di oggetti collegati, ma questo account non ha i permessi per cancellare gli oggetti dei seguenti tipi:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"Sei sicuro di voler rimuovere %(object_name)s \"%(object)s\"? I seguenti "
-"oggetti relazionati saranno rimossi:"
+"Sei sicuro di voler rimuovere %(object_name)s \"%(escaped_object)s\"? Tutti i seguenti "
+"oggetti collegati saranno cancellati:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
 msgstr "Sì, sono sicuro"
 
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(title)s "
-msgstr " Per %(title)s "
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Pagina non trovata"
 
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Vai"
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Spiacenti, ma la pagina richiesta non è stata trovata."
 
+#: contrib/admin/templates/admin/change_form.html:15
+#: contrib/admin/templates/admin/index.html:28
+msgid "Add"
+msgstr "Aggiungi"
+
 #: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Storia"
+
+#: contrib/admin/templates/admin/change_form.html:22
 msgid "View on site"
 msgstr "Vedi sul sito"
 
-#: contrib/admin/templates/admin/change_form.html:30
+#: 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] "Correggere l'errore qui sotto."
 msgstr[1] "Correggere gli errori qui sotto."
 
-#: contrib/admin/templates/admin/change_form.html:48
+#: contrib/admin/templates/admin/change_form.html:50
 msgid "Ordering"
 msgstr "Ordinamento"
 
-#: contrib/admin/templates/admin/change_form.html:51
+#: contrib/admin/templates/admin/change_form.html:53
 msgid "Order:"
-msgstr "Ordinamento:"
+msgstr "Ordine:"
 
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " Per %(filter_title)s "
+
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
 msgstr "Salva come nuovo"
 
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save and add another"
-msgstr "Salva e crea nuovo"
+msgstr "Salva e aggiungi un altro"
 
 #: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and continue editing"
-msgstr "Salva e continua"
+msgstr "Salva e continua le modifiche"
 
 #: contrib/admin/templates/admin/submit_line.html:7
 msgid "Save"
 msgstr "Salva"
 
-#: 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 "Modifica la password"
+#: contrib/admin/templates/admin/change_list.html:12
+#, python-format
+msgid "Add %(name)s"
+msgstr "Aggiungi %(name)s"
 
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
-msgid "Password change successful"
-msgstr "La password è stata cambiata"
+#: contrib/admin/templates/admin/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Modelli disponibili nell'applicazione %(name)s."
 
-#: contrib/admin/templates/registration/password_change_done.html:12
-msgid "Your password was changed."
-msgstr "La tua password è stata modificata."
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
 
-#: 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 "Resetta la password"
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
+msgstr "Modifica"
 
-#: 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 ""
-"Hai dimenticato la tua password? Inserisci il tuo indirizzo e-mail qui "
-"sotto, la tua password sarà resettata e te ne verrà spedita una nuova."
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
+msgstr "Non hai i privilegi per modificare alcunché."
 
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "E-mail address:"
-msgstr "Indirizzo e-mail:"
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
+msgstr "Azioni Recenti"
 
-#: contrib/admin/templates/registration/password_reset_form.html:16
-msgid "Reset my password"
-msgstr "Resetta la mia password"
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
+msgstr "Azioni Proprie"
 
-#: contrib/admin/templates/registration/logged_out.html:8
-msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Grazie per aver speso il tuo tempo prezioso con questo sito."
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
+msgstr "Nessuno disponibile"
 
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "Accedi di nuovo"
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Amministrazione sito Django"
 
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
-msgid "Password reset successful"
-msgstr "Password resettata"
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Amministrazione Django"
 
-#: 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 ""
-"Ti abbiamo inviato la nuova password all'indirizzo e-mail da te selezionato. "
-"Dovresti riceverla a breve."
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Data/orario"
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "User"
+msgstr "Utente"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Azione"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j F Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
 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 ""
-"Inserisci la tua vecchia password, per ragioni di sicurezza, e poi la tua "
-"nuova password due volte per verificare che tu l'abbia scritta correttamente."
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr "Questo oggetto non ha cambiamenti registrati. Probabilmente non è stato creato con questo sito di amministrazione."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Vecchia password:"
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Errore del server"
 
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "Nuova password:"
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Errore del server (500)"
 
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "Conferma password:"
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Errore del server <em>(500)</em>"
 
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "Modifica la mia password"
+#: 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 "Si è verificato un errore. È stato riportato agli amministratori del sito via e-mail e verrà corretto a breve. Grazie per la tua pazienza."
 
-#: contrib/admin/templates/registration/password_reset_email.html:2
-msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Hai ricevuto questa e-mail perché hai chiesto di resettare la password"
+#: 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 "Ci sono problemi nell'installazione del database. Assicurarsi che le tabelle appropriate del database siano state create, e che il database sia leggibile dall'utente appropriato."
 
-#: contrib/admin/templates/registration/password_reset_email.html:3
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Vai"
+
+#: contrib/admin/templates/admin/search_form.html:10
 #, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "per il tuo account utente su %(site_name)s"
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 risultato"
+msgstr[1] "%(counter)s risultati"
 
-#: contrib/admin/templates/registration/password_reset_email.html:5
+#: contrib/admin/templates/admin/search_form.html:10
 #, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "La tua nuova password è: %(new_password)s"
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s totali"
 
-#: contrib/admin/templates/registration/password_reset_email.html:7
-msgid "Feel free to change this password by going to this page:"
-msgstr "Puoi modificare la tua password su questa pagina:"
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filtro"
 
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "Il tuo nome utente, in caso tu l'abbia dimenticato:"
+#: contrib/admin/templates/admin/login.html:17
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+msgid "Username:"
+msgstr "Nome utente:"
 
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "Ti ringraziamo per l'utilizzo del nostro sito!"
+#: contrib/admin/templates/admin/login.html:20
+#: contrib/comments/templates/comments/form.html:8
+msgid "Password:"
+msgstr "Password:"
 
-#: contrib/admin/templates/registration/password_reset_email.html:15
+#: contrib/admin/templates/admin/login.html:22
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Hai <a href=\"/password_reset/\">dimenticato la password</a>?"
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "Benvenuto,"
+
+#: 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 "Inserire innanzitutto nome utente e password. Si potrà quindi modificare le altre impostazioni dell'utente."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Nome utente"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+msgid "Password"
+msgstr "Password"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+msgid "Password (again)"
+msgstr "Password (di nuovo)"
+
+#: 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 "Inserire la stessa password inserita sopra, come verifica."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
-msgid "The %(site_name)s team"
-msgstr "Il team di %(site_name)s"
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Inserire una nuova password per l'utente <strong>%(username)s</strong>."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
@@ -1000,12 +1394,12 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Per installare i bookmarklet, trascinare il link nella barra \n"
-"dei bookmark, o cliccare il link con il tasto destro e selezionare aggiungi ai \n"
-"bookmark. È possibile selezionare il bookmarklet da qualsiasi pagina del sito. \n"
-"Alcuni di questi bookmarklet richiedono l'utilizzo di un computer \"interno\" \n"
-"(chiedi al tuo amministratore di sistema se non sei sicuro che il tuo computer \n"
-"sia \"interno\").</p>\n"
+"<p class=\"help\">Per installare i bookmarklet, trascinare il link sulla barra \n"
+"dei bookmark, o cliccare il link con il tasto destro e aggiungerlo ai bookmark.\n"
+"Sarà quindi possibile selezionare un bookmarklet in qualsiasi pagina del sito.\n"
+"Si noti che alcuni di questi bookmarklet richiedono l'accesso al sito tramite un\n"
+"computer designato come \"interno\" (chiedere al proprio amministratore di \n"
+"sistema se non si è sicuri che il proprio computer sia \"interno\").</p>\n"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:19
 msgid "Documentation for this page"
@@ -1016,7 +1410,8 @@
 "Jumps you from any page to the documentation for the view that generates "
 "that page."
 msgstr ""
-"Ti porta da qualsiasi pagina alla documentazione della view che genera quella pagina."
+"Porta da qualsiasi pagina alla documentazione della view che genera "
+"quella pagina."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
 msgid "Show object ID"
@@ -1026,8 +1421,7 @@
 msgid ""
 "Shows the content-type and unique ID for pages that represent a single "
 "object."
-msgstr ""
-"Mostra il tipo di contenuto e l'ID univoco per pagine che rappresentano un singolo oggetto."
+msgstr "Mostra il content-type e l'ID univoco di pagine che rappresentano un singolo oggetto."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
@@ -1035,7 +1429,7 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Ti porta alla pagina amministrativa per pagine che rappresentano un oggetto singolo."
+msgstr "Porta alla pagina amministrativa di pagine che rappresentano un oggetto singolo."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
@@ -1051,7 +1445,7 @@
 
 #: contrib/admin/templates/widget/date_time.html:4
 msgid "Time:"
-msgstr "Ora:"
+msgstr "Orario:"
 
 #: contrib/admin/templates/widget/file.html:2
 msgid "Currently:"
@@ -1061,41 +1455,134 @@
 msgid "Change:"
 msgstr "Modifica:"
 
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "redirigi da"
+#: 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 "Reimposta la password"
 
-#: contrib/redirects/models.py:8
+#: contrib/admin/templates/registration/password_reset_form.html:12
 msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Un percorso assoluto, senza nome a dominio. Esempio: '/events/search/'."
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr "Dimenticata la password? Inserire il proprio indirizzo e-mail qui sotto: la password sarà reimpostata, e la nuova ti verrà inviata per e-mail."
 
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "redirigi verso"
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Indirizzo e-mail:"
 
-#: contrib/redirects/models.py:10
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Reimposta la mia password"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Hai ricevuto questa e-mail perché hai chiesto di reimpostare la password"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "per il tuo account utente su %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "La tua nuova password è: %(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 "Puoi liberamente cambiare la tua password tramite questa pagina:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Il tuo nome utente, in caso l'abbia dimenticato:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Grazie per aver usato il nostro sito!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Il team di %(site_name)s"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Grazie per aver speso il tuo tempo prezioso su questo sito oggi."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Accedi di nuovo"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Password reimpostata correttamente"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
 msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Un percorso assoluto (come sopra) o un URL completo iniziante con 'http://'."
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr "La nuova password è stata inviata all'indirizzo e-mail inserito. Arriverà a breve."
 
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "redirigi"
+#: 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 "Cambio password"
 
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "redirezioni"
+#: 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 "Inserire l'attuale password, per ragioni di sicurezza, e poi la nuova password due volte, per verificare di averla scritta correttamente."
 
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Password attuale:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nuova password:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confermare la password:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Modifica la mia password"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Cambio di password avvenuto correttamente"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "La password è stata cambiata."
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "nome di dominio"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "nome visualizzato"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "sito"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "siti"
+
 #: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Esempio: '/about/contact/'. Attenzione alla barra ('/') iniziale e finale."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Esempio: '/about/contact/'. Assicurarsi di inserire le barre diagonali iniziali e finali."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
@@ -1115,11 +1602,9 @@
 
 #: contrib/flatpages/models.py:13
 msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Esempio: 'flatpages/contact_page'. Se non specificato, il sistema userà "
-"'flatpages/default'."
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr "Esempio: 'flatpages/contact_page.html'. Se non specificato, il sistema userà 'flatpages/default.html'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1127,7 +1612,7 @@
 
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "Se selezionata, solo gli utenti registrati potranno vedere la pagina."
+msgstr "Se selezionato, solo gli utenti che hanno effettuato l'accesso potranno vedere la pagina."
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
@@ -1137,185 +1622,410 @@
 msgid "flat pages"
 msgstr "pagine statiche"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
-msgid "name"
-msgstr "nome"
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "redirigi da"
 
-#: contrib/auth/models.py:15
-msgid "codename"
-msgstr "nome in codice"
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr "Deve essere un percorso assoluto, senza nome di dominio. Esempio: '/events/search/'."
 
-#: contrib/auth/models.py:17
-msgid "permission"
-msgstr "permesso"
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "redirigi verso"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-msgid "permissions"
-msgstr "permessi"
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr "Può essere un percorso assoluto (come sopra) o una URL completa che inizia con 'http://'."
 
-#: contrib/auth/models.py:29
-msgid "group"
-msgstr "gruppo"
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "redirezione"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-msgid "groups"
-msgstr "gruppi"
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "redirezioni"
 
-#: contrib/auth/models.py:55
-msgid "username"
-msgstr "nome utente"
+#: contrib/comments/models.py:67 contrib/comments/models.py:166
+msgid "object ID"
+msgstr "ID dell'oggetto"
 
-#: contrib/auth/models.py:56
-msgid "first name"
-msgstr "nome"
+#: contrib/comments/models.py:68
+msgid "headline"
+msgstr "intestazione"
 
-#: contrib/auth/models.py:57
-msgid "last name"
-msgstr "cognome"
+#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:167
+msgid "comment"
+msgstr "commento"
 
-#: contrib/auth/models.py:58
-msgid "e-mail address"
-msgstr "indirizzo e-mail"
+#: contrib/comments/models.py:70
+msgid "rating #1"
+msgstr "valutazione #1"
 
-#: contrib/auth/models.py:59
-msgid "password"
-msgstr "password"
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "valutazione #2"
 
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Usare '[algo]$[salt]$[hexdigest]'"
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "valutazione #3"
 
-#: contrib/auth/models.py:60
-msgid "staff status"
-msgstr "staff"
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "valutazione #4"
 
-#: contrib/auth/models.py:60
-msgid "Designates whether the user can log into this admin site."
-msgstr "Autorizza l'utente ad accedere a questo sito di amministrazione."
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "valutazione #5"
 
-#: contrib/auth/models.py:61
-msgid "active"
-msgstr "attivo"
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "valutazione #6"
 
-#: contrib/auth/models.py:62
-msgid "superuser status"
-msgstr "superuser"
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "valutazione #7"
 
-#: contrib/auth/models.py:63
-msgid "last login"
-msgstr "ultimo accesso"
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "valutazione #8"
 
-#: contrib/auth/models.py:64
-msgid "date joined"
-msgstr "iscritto da"
+#: contrib/comments/models.py:82
+msgid "is valid rating"
+msgstr "è una valutazione valida"
 
-#: contrib/auth/models.py:66
+#: contrib/comments/models.py:83 contrib/comments/models.py:169
+msgid "date/time submitted"
+msgstr "data/orario di inserimento"
+
+#: contrib/comments/models.py:84 contrib/comments/models.py:170
+msgid "is public"
+msgstr "è pubblico"
+
+#: contrib/comments/models.py:86
+msgid "is removed"
+msgstr "è rimosso"
+
+#: contrib/comments/models.py:86
 msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr "Spuntare la casella se il commento è inappropriato. Verrà sostituito dal messaggio \"Questo commento è stato rimosso\"."
+
+#: contrib/comments/models.py:91
+msgid "comments"
+msgstr "commenti"
+
+#: contrib/comments/models.py:131 contrib/comments/models.py:207
+msgid "Content object"
+msgstr "Oggetto con contenuto"
+
+#: 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 ""
-"In aggiunta ai permessi assegnati manualmente, l'utente riceverà anche tutti "
-"i permessi assegnati ad ogni gruppo cui appartiene."
+"Inserito da %(user)s il %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
 
-#: contrib/auth/models.py:67
-msgid "user permissions"
-msgstr "permessi utente"
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "nome della persona"
 
-#: contrib/auth/models.py:70
-msgid "user"
-msgstr "utente"
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "indirizzo IP"
 
-#: contrib/auth/models.py:71
-msgid "users"
-msgstr "utenti"
+#: contrib/comments/models.py:173
+msgid "approved by staff"
+msgstr "approvato dallo staff"
 
-#: contrib/auth/models.py:76
-msgid "Personal info"
-msgstr "Informazioni personali"
+#: contrib/comments/models.py:176
+msgid "free comment"
+msgstr "commento libero"
 
-#: contrib/auth/models.py:77
-msgid "Permissions"
-msgstr "Permessi"
+#: contrib/comments/models.py:177
+msgid "free comments"
+msgstr "commenti liberi"
 
-#: contrib/auth/models.py:78
-msgid "Important dates"
-msgstr "Date importanti"
+#: contrib/comments/models.py:233
+msgid "score"
+msgstr "punteggio"
 
-#: contrib/auth/models.py:79
-msgid "Groups"
-msgstr "Gruppi"
+#: contrib/comments/models.py:234
+msgid "score date"
+msgstr "data punteggio"
 
-#: contrib/auth/models.py:219
-msgid "message"
-msgstr "messaggio"
+#: contrib/comments/models.py:237
+msgid "karma score"
+msgstr "livello karma"
 
-#: contrib/auth/forms.py:30
+#: contrib/comments/models.py:238
+msgid "karma scores"
+msgstr "livelli karma"
+
+#: contrib/comments/models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "valutazione: %(score)d da %(user)s"
+
+#: contrib/comments/models.py:258
+#, python-format
 msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
 msgstr ""
-"Il browser non ha i cookie abilitati. Per accedere, è necessario abilitarli."
+"A questo commento è stato apposto un flag da %(user)s:\n"
+"\n"
+"%(text)s"
 
-#: contrib/contenttypes/models.py:25
-msgid "python model class name"
-msgstr "nome della classe modello in python"
+#: contrib/comments/models.py:265
+msgid "flag date"
+msgstr "data flag"
 
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "tipo di contenuto"
+#: contrib/comments/models.py:268
+msgid "user flag"
+msgstr "flag utente"
 
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "tipo di contenuti"
+#: contrib/comments/models.py:269
+msgid "user flags"
+msgstr "flag utente"
 
-#: contrib/sessions/models.py:35
+#: contrib/comments/models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "Flag da %r"
+
+#: contrib/comments/models.py:278
+msgid "deletion date"
+msgstr "data cancellazione"
+
+#: contrib/comments/models.py:280
+msgid "moderator deletion"
+msgstr "cancellazione da moderatore"
+
+#: contrib/comments/models.py:281
+msgid "moderator deletions"
+msgstr "cancellazioni da moderatore"
+
+#: contrib/comments/models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "Cancellazione da moderatore %r"
+
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Gli utenti anonimi non possono votare"
+
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "ID commento non valido"
+
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "Impossibile votare per se stessi"
+
+#: contrib/comments/views/comments.py:27
+msgid "This rating is required because you've entered at least one other rating."
+msgstr "Questa valutazione è obbligatoria perché hai inserito almeno un'altra valutazione."
+
+#: 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] ""
+"Questo commento è stato inserito da un utente autore di meno di %(count)s commento:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Questo commento è stato inserito da un utente autore di meno di %(count)s commenti:\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 ""
+"Questo commento è stato inserito da un utente non confermato:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Sono ammessi solo POST"
+
+#: contrib/comments/views/comments.py:192
+#: contrib/comments/views/comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Uno o più campi richiesti non sono stati inseriti"
+
+#: contrib/comments/views/comments.py:196
+#: contrib/comments/views/comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr "Qualcuno ha alterato il modulo di commento (violazione di sicurezza)"
+
+#: 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 ""
+"Il modulo di commento ha un parametro 'target' non valido -- l'ID "
+"dell'oggetto non e` valido"
+
+#: contrib/comments/views/comments.py:257
+#: contrib/comments/views/comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr "Il modulo di commento non fornisce né 'anteprima' né 'invia'"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Hai dimenticato la password?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Valutazioni"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Obbligatorio"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Facoltativo"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Invia una foto"
+
+#: contrib/comments/templates/comments/form.html:28
+#: contrib/comments/templates/comments/freeform.html:5
+msgid "Comment:"
+msgstr "Commento:"
+
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
+msgid "Preview comment"
+msgstr "Anteprima commento"
+
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Il suo nome:"
+
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
+msgstr "Inserire un codice postale. È obbligatorio uno spazio tra le due parti del codice postale."
+
+#: contrib/localflavor/usa/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Inserire un codice postale nel formato XXXXX o XXXXX-XXXX."
+
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "chiave di sessione"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "dati di sessione"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "data di scadenza"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "sessione"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "sessioni"
 
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "nome a dominio"
+#: contrib/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "nome della classe modello in Python"
 
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "nome visualizzato"
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr "content type"
 
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "sito"
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "content type"
 
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "siti"
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Assicurarsi che il testo sia più corto di %s carattere."
+msgstr[1] "Assicurarsi che il testo sia più corto di %s caratteri."
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "j F Y"
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "Non sono ammessi a capo manuali."
 
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, H:i"
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Selezionare un'opzione valida; '%(data)s' non presente in %(choices)s."
 
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "H:i"
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "Il file inviato è vuoto."
 
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Inserire un numero intero compreso tra -32.768 e 32.767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Inserire un numero positivo."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Inserire un numero intero compreso tra 0 e 32.767."
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s è stato creato correttamente."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s è stato aggiornato correttamente."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s è stato cancellato."
+
 #: utils/dates.py:6
 msgid "Monday"
 msgstr "Lunedì"
@@ -1504,467 +2214,84 @@
 msgstr[0] "minuto"
 msgstr[1] "minuti"
 
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "Bengali"
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j F Y"
 
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "Ceco"
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j F Y, H:i"
 
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "Gallese"
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "H:i"
 
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "Danese"
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "Y F"
 
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "Tedesco"
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
 
-#: conf/global_settings.py:42
-msgid "Greek"
-msgstr "Greco"
+#: template/defaultfilters.py:490
+msgid "yes,no,maybe"
+msgstr "sì,no,forse"
 
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "Inglese"
-
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "Spagnolo"
-
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "Francese"
-
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "Galiziano"
-
-#: conf/global_settings.py:47
-msgid "Hungarian"
-msgstr "Ungherese"
-
-#: conf/global_settings.py:48
-msgid "Hebrew"
-msgstr "Ebreo"
-
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "Islandese"
-
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "Italiano"
-
-#: conf/global_settings.py:51
-msgid "Japanese"
-msgstr "Giapponese"
-
-#: conf/global_settings.py:52
-msgid "Dutch"
-msgstr "Olandese"
-
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "Norvegese"
-
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "Brasiliano"
-
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "Rumeno"
-
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "Russo"
-
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "Slovacco"
-
-#: conf/global_settings.py:58
-msgid "Slovenian"
-msgstr "Sloveno"
-
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "Serbo"
-
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "Svedese"
-
-#: conf/global_settings.py:61
-msgid "Ukrainian"
-msgstr "Ucraino"
-
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "Cinese semplificato"
-
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr "Cinese tradizionale"
-
-#: core/validators.py:60
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Sono ammesse solo lettere, numeri e sottolineature ('_')."
-
-#: core/validators.py:64
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "Sono ammesse solo lettere, numeri, sottolineature ('_'), trattini"
-"('-') e barre ('/')."
-
-#: core/validators.py:72
-msgid "Uppercase letters are not allowed here."
-msgstr "Non sono ammesse lettere maiuscole."
-
-#: core/validators.py:76
-msgid "Lowercase letters are not allowed here."
-msgstr "Non sono ammesse lettere minuscole."
-
-#: core/validators.py:83
-msgid "Enter only digits separated by commas."
-msgstr "Inserire solo numeri separati da virgole."
-
-#: core/validators.py:95
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Inserire indirizzi e-mail validi separati da virgole."
-
-#: core/validators.py:99
-msgid "Please enter a valid IP address."
-msgstr "Inserire un indirizzo IP valido."
-
-#: core/validators.py:103
-msgid "Empty values are not allowed here."
-msgstr "E' necessario inserire un valore."
-
-#: core/validators.py:107
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Sono ammessi soltanto caratteri numerici."
-
-#: core/validators.py:111
-msgid "This value can't be comprised solely of digits."
-msgstr "Il valore non può essere composto solo da cifre."
-
-#: core/validators.py:116
-msgid "Enter a whole number."
-msgstr "Inserire un numero."
-
-#: core/validators.py:120
-msgid "Only alphabetical characters are allowed here."
-msgstr "Sono ammessi solo caratteri alfabetici."
-
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Inserire un data valida in formato AAAA-MM-GG."
-
-#: core/validators.py:128
-msgid "Enter a valid time in HH:MM format."
-msgstr "Inserire un orario valido in formato OO:MM."
-
-#: core/validators.py:132 db/models/fields/__init__.py:468
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Inserire una data/ora in formato AAAA-MM-GG OO:MM."
-
-#: core/validators.py:136
-msgid "Enter a valid e-mail address."
-msgstr "Inserire un indirizzo e-mail valido."
-
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Caricare un'immagine valida. Il file inserito non è un'immagine o è corrotto."
-
-#: core/validators.py:155
+#: newforms/fields.py:101 newforms/fields.py:254
 #, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "L'URL %s non punta ad un'immagine valida."
+msgid "Ensure this value has at most %d characters."
+msgstr "Assicurarsi che questo valore non contenga più di %d caratteri."
 
-#: core/validators.py:159
+#: newforms/fields.py:103 newforms/fields.py:256
 #, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"I numeri di telefono devono essere in formato XXX-XXX-XXXX. \"%s\" non è "
-"valido."
+msgid "Ensure this value has at least %d characters."
+msgstr "Assicurarsi che questo valore contenga almeno %d caratteri."
 
-#: core/validators.py:167
+#: newforms/fields.py:128
 #, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "L'URL %s non punta ad un video QuickTime valido."
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Assicurarsi che questo valore sia minore o uguale a %s."
 
-#: core/validators.py:171
-msgid "A valid URL is required."
-msgstr "Inserire un URL valido."
-
-#: core/validators.py:185
+#: newforms/fields.py:130
 #, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"E' richiesto HTML valido. Gli errori sono i seguenti:\n"
-"%s"
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Assicurarsi che questo valore sia maggiore o uguale a %s."
 
-#: core/validators.py:192
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "XML malformato: %s"
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Inserire una data valida."
 
-#: core/validators.py:202
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL non valida: %s"
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "Inserire un orario valido."
 
-#: core/validators.py:206 core/validators.py:208
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "L'URL %s è un link rotto."
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Inserire una coppia data/orario valida."
 
-#: core/validators.py:214
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Inserire un nome di stato americano abbreviato valido."
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Inserire un valore valido."
 
-#: core/validators.py:229
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Attenzione! La parola %s non è ammessa."
-msgstr[1] "Attenzione! Le parole %s non sono ammesse."
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Inserire una URL valida."
 
-#: core/validators.py:236
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Questo campo deve corrispondere al campo '%s'."
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "Questa URL non sembra funzionare."
 
-#: core/validators.py:255
-msgid "Please enter something for at least one field."
-msgstr "Inserire qualcosa in almeno un campo."
+#: newforms/fields.py:360 newforms/models.py:164
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Selezionare un'opzione valida. La scelta effettuata non compare tra quelle disponibili."
 
-#: core/validators.py:264 core/validators.py:275
-msgid "Please enter both fields or leave them both empty."
-msgstr "Inserire entrambi i campi o lasciarli entrambi vuoti."
+#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181
+msgid "Enter a list of values."
+msgstr "Inserire una lista di valori."
 
-#: core/validators.py:282
+#: newforms/fields.py:387 newforms/models.py:187
 #, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Il campo è obbligatorio se %(field)s è %(value)s"
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Selezionare un'opzione valida;'%s non compare tra quelle disponibili."
 
-#: core/validators.py:294
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Il campo è obbligatorio se %(field)s non è %(value)s"
-
-#: core/validators.py:313
-msgid "Duplicate values are not allowed."
-msgstr "Non sono ammessi valori duplicati."
-
-#: core/validators.py:336
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Il valore deve essere una potenza di %s."
-
-#: core/validators.py:347
-msgid "Please enter a valid decimal number."
-msgstr "Inserire un numero decimale valido."
-
-#: core/validators.py:349
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Inserire un numero decimale con non più di %s cifra."
-msgstr[1] "Inserire un numero decimale con non più di %s cifre totali."
-
-#: core/validators.py:352
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Inserire un decimale con non più di %s cifra decimale."
-msgstr[1] "Inserire un decimale con non più di %s cifre decimali."
-
-#: core/validators.py:362
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Verifica che il file inserito sia almeno di %s byte."
-
-#: core/validators.py:363
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Verifica che il file inserito sia al massimo %s byte."
-
-#: core/validators.py:376
-msgid "The format for this field is wrong."
-msgstr "Formato del file non valido."
-
-#: core/validators.py:391
-msgid "This field is invalid."
-msgstr "Il campo non è valido."
-
-#: core/validators.py:426
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Impossibile recuperare alcunché da %s."
-
-#: core/validators.py:429
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"L'URL %(url)s restituisce un Content-Type header non valido '%(contenttype)s'."
-
-#: core/validators.py:462
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Il tag %(tag)s alla linea %(line)s non è chiuso. (La linea comincia con \"%(start)s\".)"
-
-#: core/validators.py:466
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Il testo che comincia a linea %(line)s non e' ammesso in questo contesto. "
-"(La linea comincia con \"%(start)s\".)"
-
-#: core/validators.py:471
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"%(attr)s\" alla linea %(line)s è un attributo invalido. (La linea comincia "
-"con \"%(start)s\".)"
-
-#: core/validators.py:476
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" alla linea %(line)s: tag non valido. (La linea comincia con \"%"
-"(start)s\".)"
-
-#: core/validators.py:480
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Un tag alla linea %(line)s manca di uno o più attributi richiesti. (La linea "
-"comincia con \"%(start)s\".)"
-
-#: core/validators.py:485
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"L'attributo \"%(attr)s\" alla linea %(line)s ha un valore non valido. (La "
-"linea comincia con \"%(start)s\".)"
-
-#: db/models/manipulators.py:302
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s·con questo·%(type)s·esistono già per questo·%(field)s."
-
-#: core/meta/fields.py:60
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s·con questo·%(fieldname)s·esiste già."
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "Il campo è obbligatorio."
-
-#: db/models/fields/__init__.py:337
-msgid "This value must be an integer."
-msgstr "Il valore deve essere un intero."
-
-#: db/models/fields/__init__.py:369
-msgid "This value must be either True or False."
-msgstr "Il valore deve essere True o False."
-
-#: db/models/fields/__init__.py:385
-msgid "This field cannot be null."
-msgstr "Il campo non può essere nullo."
-
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "Inserire un nome file valido."
-
-#: db/models/fields/related.py:43
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Inserire un %s valido."
-
-#: db/models/fields/related.py:579
-msgid "Separate multiple IDs with commas."
-msgstr "Separa ID multipli con virgole."
-
-#: db/models/fields/related.py:581
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr " Premi \"Control\", o \"Command\" su Mac, per selezionarne più di uno."
-
-#: db/models/fields/related.py:625
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Inserire un ID valido per %(self)s. Il valore %(value)r non è valido."
-msgstr[1] "Inserire un ID valido per %(self)s. I valori %(value)r non sono validi."
-
-#: forms/__init__.py:380
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Assicurati che il testo sia più corto di %s carattere."
-msgstr[1] "Assicurati che il testo sia più corto di %s caratteri."
-
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-msgstr "Non è ammesso andare a capo."
-
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Selezionare un'opzione valida; '%(data)s' non presente in %(choices)s."
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "Il file sottomesso è vuoto."
-
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Inserire un numero tra -32768 e 32767."
-
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "Inserire un numero positivo."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Inserire un numero compreso tra 0 e 32767."
-
-#: template/defaultfilters.py:379
-msgid "yes,no,maybe"
-msgstr "sì,no,forse"
-

Modified: vendor/django/current/django/conf/locale/it/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/it/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/it/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/it/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,21 +1,40 @@
+# translation of djangojs.po to Italiano
 # Italian translation for the django-admin JS files
 # Copyright (C) 2006 the Lawrence Journal-World
 # This file is distributed under the same license as the Django package.
+#
 # Carlo C8E Miron <carlo.miron AT gmail.com>, 2006.
-#
+# Nicola 'tekNico' Larosa <nico at tekNico.net>, 2007.
 msgid ""
 msgstr ""
-"Project-Id-Version: Django JavaScript 1.0\n"
+"Project-Id-Version: djangojs\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2005-12-04 21:47+0100\n"
-"Last-Translator: Carlo C8E Miron <carlo.miron AT gmail.com>\n"
-"Language-Team: Italian <Django-I18N at googlegroups.com>\n"
+"POT-Creation-Date: 2007-02-26 20:46+0100\n"
+"PO-Revision-Date: 2007-02-26 20:55+0100\n"
+"Last-Translator: Nicola Larosa <nico at tekNico.net>\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"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.2\n"
 
+#: 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 ""
+"Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre "
+"Novembre Dicembre"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "D L M M G V S"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Domenica Lunedì Martedì Mercoledì Giovedì Venerdì Sabato"
+
 #: contrib/admin/media/js/SelectFilter2.js:33
 #, perl-format
 msgid "Available %s"
@@ -23,7 +42,7 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:41
 msgid "Choose all"
-msgstr "Seleziona tutto"
+msgstr "Scegli tutto"
 
 #: contrib/admin/media/js/SelectFilter2.js:46
 msgid "Add"
@@ -36,7 +55,7 @@
 #: contrib/admin/media/js/SelectFilter2.js:53
 #, perl-format
 msgid "Chosen %s"
-msgstr "Selezionato %s"
+msgstr "Scelto %s"
 
 #: contrib/admin/media/js/SelectFilter2.js:54
 msgid "Select your choice(s) and click "
@@ -46,66 +65,59 @@
 msgid "Clear all"
 msgstr "Cancella tutto"
 
-#: contrib/admin/media/js/dateparse.js:26
-#: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre "
-"Novembre Dicembre"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domenica Lunedì Martedì Mercoledì Giovedì Venerdì Sabato"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M M G V S"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Now"
 msgstr "Adesso"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
 msgid "Clock"
 msgstr "Orologio"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
 msgid "Choose a time"
-msgstr "Seleziona un orario"
+msgstr "Scegli un orario"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
 msgid "Midnight"
 msgstr "Mezzanotte"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
 msgid "6 a.m."
 msgstr "6 del mattino"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Noon"
 msgstr "Mezzogiorno"
 
-#: 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 "Annulla"
 
-#: 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 "Oggi"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
 msgid "Calendar"
 msgstr "Calendario"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
 msgid "Yesterday"
 msgstr "Ieri"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
 msgid "Tomorrow"
 msgstr "Domani"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr "Mostra"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr "Nascondi"
+

Modified: vendor/django/current/django/conf/locale/ja/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/ja/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/ja/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ja/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,14 +1,13 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# Translation of django.po to japanese.
+# Copyright (C) 2005,2006 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# makoto tsuyuki <mtsuyuki at gmail.com>, 2005,2006,2007.
 # 
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: Django 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-18 00:21+0900\n"
+"POT-Creation-Date: 2007-02-15 23:43+0900\n"
 "PO-Revision-Date: 2006-05-18 00:28+0900\n"
 "Last-Translator: makoto tsuyuki <mtsuyuki at gmail.com>\n"
 "Language-Team: Japanese <django-ja at googlegroups.com>\n"
@@ -16,113 +15,147 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: conf/global_settings.py:37
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "アラビア語"
+
+#: conf/global_settings.py:40
 msgid "Bengali"
 msgstr "ベンガル語"
 
-#: conf/global_settings.py:38
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr "カタロニア語"
+
+#: conf/global_settings.py:42
 msgid "Czech"
 msgstr "チェコ語"
 
-#: conf/global_settings.py:39
+#: conf/global_settings.py:43
 msgid "Welsh"
 msgstr "ウェールズ語"
 
-#: conf/global_settings.py:40
+#: conf/global_settings.py:44
 msgid "Danish"
 msgstr "デンマーク語"
 
-#: conf/global_settings.py:41
+#: conf/global_settings.py:45
 msgid "German"
 msgstr "ドイツ語"
 
-#: conf/global_settings.py:42
+#: conf/global_settings.py:46
 msgid "Greek"
 msgstr "ギリシャ語"
 
-#: conf/global_settings.py:43
+#: conf/global_settings.py:47
 msgid "English"
 msgstr "英語"
 
-#: conf/global_settings.py:44
+#: conf/global_settings.py:48
 msgid "Spanish"
 msgstr "スペイン語"
 
-#: conf/global_settings.py:45
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr "アルゼンチンスペイン語"
+
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "フィンランド語"
+
+#: conf/global_settings.py:51
 msgid "French"
 msgstr "フランス語"
 
-#: conf/global_settings.py:46
+#: conf/global_settings.py:52
 msgid "Galician"
 msgstr "ガリシア語"
 
-#: conf/global_settings.py:47
+#: conf/global_settings.py:53
 msgid "Hungarian"
 msgstr "ハンガリー語"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:54
 msgid "Hebrew"
 msgstr "ヘブライ語"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:55
 msgid "Icelandic"
 msgstr "アイスランド語"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:56
 msgid "Italian"
 msgstr "イタリア語"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:57
 msgid "Japanese"
 msgstr "日本語"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:58
+msgid "Latvian"
+msgstr "ラトビア語"
+
+#: conf/global_settings.py:59
+msgid "Macedonian"
+msgstr "マケドニア語"
+
+#: conf/global_settings.py:60
 msgid "Dutch"
 msgstr "オランダ語"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:61
 msgid "Norwegian"
 msgstr "ノルウェー語"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:62
+msgid "Polish"
+msgstr "ポーランド語"
+
+#: conf/global_settings.py:63
 msgid "Brazilian"
 msgstr "ブラジル語"
 
-#: conf/global_settings.py:55
+#: conf/global_settings.py:64
 msgid "Romanian"
 msgstr "ルーマニア語"
 
-#: conf/global_settings.py:56
+#: conf/global_settings.py:65
 msgid "Russian"
 msgstr "ロシア語"
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:66
 msgid "Slovak"
 msgstr "スロバキア語"
 
-#: conf/global_settings.py:58
-#, fuzzy
+#: conf/global_settings.py:67
 msgid "Slovenian"
 msgstr "スロヴェニア語"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:68
 msgid "Serbian"
 msgstr "セルビア語"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:69
 msgid "Swedish"
 msgstr "スウェーデン語"
 
-#: conf/global_settings.py:61
-#, fuzzy
+#: conf/global_settings.py:70
+msgid "Tamil"
+msgstr "タミル語"
+
+#: conf/global_settings.py:71
+msgid "Turkish"
+msgstr "トルコ語"
+
+#: conf/global_settings.py:72
 msgid "Ukrainian"
 msgstr "ウクライナ語"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:73
 msgid "Simplified Chinese"
 msgstr "簡体字中国語"
 
-#: conf/global_settings.py:63
+#: conf/global_settings.py:74
 msgid "Traditional Chinese"
 msgstr "繁体字中国語"
 
@@ -136,7 +169,7 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "全て"
 
@@ -160,15 +193,18 @@
 msgid "This year"
 msgstr "今年"
 
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
+#: oldforms/__init__.py:572
 msgid "Yes"
 msgstr "はい"
 
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
+#: oldforms/__init__.py:572
 msgid "No"
 msgstr "いいえ"
 
-#: contrib/admin/filterspecs.py:150
+#: contrib/admin/filterspecs.py:150 newforms/widgets.py:170
+#: oldforms/__init__.py:572
 msgid "Unknown"
 msgstr "不明"
 
@@ -210,11 +246,13 @@
 msgstr "申し訳ありませんが、お探しのページは見つかりませんでした。"
 
 #: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/change_form.html:13
 #: contrib/admin/templates/admin/change_list.html:6
 #: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/auth/user/change_password.html:12
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
@@ -244,26 +282,30 @@
 "エラーが発生しました。エラーをサイトの管理者にメールで報告しましたので、近い"
 "うちに修正されるはずです。しばらくお待ちください。"
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "ようこそ"
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/auth/user/change_password.html:9
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 msgid "Documentation"
 msgstr "ドキュメント"
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/object_history.html:3
+#: 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/admin_doc/bookmarklets.html:4
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/missing_docutils.html:4
@@ -279,11 +321,12 @@
 msgid "Change password"
 msgstr "パスワードの変更"
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/auth/user/change_password.html:9
 #: contrib/admin/templates/admin_doc/bookmarklets.html:4
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/missing_docutils.html:4
@@ -296,7 +339,7 @@
 #: contrib/admin/templates/admin_doc/view_index.html:5
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/comments/templates/comments/form.html:8
+#: contrib/comments/templates/comments/form.html:6
 msgid "Log out"
 msgstr "ログアウト"
 
@@ -306,37 +349,38 @@
 
 #: contrib/admin/templates/admin/base_site.html:7
 msgid "Django administration"
-msgstr "Django の管理"
+msgstr "Django 管理サイト"
 
 #: 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:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/object_history.html:5
 msgid "History"
 msgstr "履歴"
 
-#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/change_form.html:22
 msgid "View on site"
 msgstr "サイト上で表示"
 
-#: contrib/admin/templates/admin/change_form.html:30
+#: 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:48
+#: contrib/admin/templates/admin/change_form.html:50
 msgid "Ordering"
 msgstr "順序"
 
-#: contrib/admin/templates/admin/change_form.html:51
+#: contrib/admin/templates/admin/change_form.html:53
 msgid "Order:"
 msgstr "並び変え:"
 
-#: contrib/admin/templates/admin/change_list.html:11
+#: contrib/admin/templates/admin/change_list.html:12
 #, python-format
 msgid "Add %(name)s"
 msgstr "%(name)s を追加"
@@ -349,22 +393,22 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
-"%(object_name)s '%(object)s' の削除時に関連づけられたオブジェクトも削除しよう"
-"としましたが、あなたのアカウントには以下のタイプのオブジェクトを削除するパー"
-"ミッションがありません:"
+"%(object_name)s '%(escaped_object)s' の削除時に関連づけられたオブジェクトも削"
+"除しようとしましたが、あなたのアカウントには以下のタイプのオブジェクトを削除"
+"するパーミッションがありません:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"%(object_name)s \"%(object)s\"を削除しますか? 関連づけられている以下のオブ"
-"ジェクトも全て削除されます:"
+"%(object_name)s \"%(escaped_object)s\"を削除しますか? 関連づけられている以下"
+"のオブジェクトも全て削除されます:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -372,14 +416,23 @@
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
-msgid " By %(title)s "
-msgstr "%(title)s で絞り込む"
+msgid " By %(filter_title)s "
+msgstr "%(filter_title)s で絞り込む"
 
+#: 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 "%(name)s アプリケーションで利用可能なモデル"
 
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
 #: contrib/admin/templates/admin/index.html:34
 msgid "Change"
 msgstr "変更"
@@ -400,6 +453,15 @@
 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
@@ -407,16 +469,12 @@
 msgstr "ユーザ名:"
 
 #: contrib/admin/templates/admin/login.html:20
-#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
 msgid "Password:"
 msgstr "パスワード:"
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "<a href=\"/password_reset/\">パスワードをお忘れですか</a>?"
-
 #: contrib/admin/templates/admin/login.html:25
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 msgid "Log in"
 msgstr "ログイン"
 
@@ -444,10 +502,26 @@
 "このオブジェクトには変更履歴がありません。おそらくこの管理サイトで追加したも"
 "のではありません。"
 
+#: 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] "1 件"
+msgstr[1] "%(counter)s 件"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "全 %(full_result_count)s 件"
+
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
 msgstr "新規保存"
@@ -464,6 +538,38 @@
 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: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 <strong>%(username)s</strong>."
+msgstr "<strong>%(username)s</strong>さんの新しいパスワードを入力してください。"
+
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
 msgstr "ブックマークレット"
@@ -572,7 +678,7 @@
 
 #: contrib/admin/templates/registration/password_change_form.html:21
 msgid "Confirm password:"
-msgstr "新しいパスワード (もう一度) :"
+msgstr "新しいパスワード (確認用) :"
 
 #: contrib/admin/templates/registration/password_change_form.html:23
 msgid "Change my password"
@@ -663,19 +769,41 @@
 msgid "Change:"
 msgstr "変更:"
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/templatetags/admin_list.py:238
 msgid "All dates"
 msgstr "いつでも"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
+#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" を追加しました。"
+
+#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
+#: contrib/admin/views/main.py:347
+msgid "You may edit it again below."
+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 "パスワードの変更: %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 ""
 "正しいユーザ名とパスワードを入力してください (大文字小文字は区別します) 。"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
@@ -683,7 +811,7 @@
 "再ログインしてください。ログインセッションが有効期間切れしてしまいました。入"
 "力データは失われておりませんのでご安心ください。"
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -691,188 +819,252 @@
 "ブラウザがクッキーの使用を許可していないようです。クッキーの使用を許可して、"
 "もう一度このページを表示してください。"
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "ユーザ名には '@' を含められません。"
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "メールアドレスはユーザ名ではありません。 '%s' を試してみてください。"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: 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 "アプリケーション %r が見つかりません"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "モデル %r が %r アプリケーションに見つかりません"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "`%s.%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 "モデル :"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "`%s.%s` (関連オブジェクト)"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "全ての %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "%s の数"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "%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 "æ•´æ•°"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "ブール値 (真: True または偽: False)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "文字列 ( %(maxlength)s 字まで )"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "カンマ区切りの整数"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "日付"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "日時"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "メールアドレス"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "ファイルの場所"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr "10 進数 (小数可)"
 
-#: contrib/admin/views/doc.py:289 contrib/comments/models.py:85
+#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85
 msgid "IP address"
 msgstr "IP アドレス"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "ブール値 (真: True 、偽: False または None)"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr "親モデルへのリレーション"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "電話番号"
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "テキスト"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "時刻"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
 msgstr "アメリカの州 (大文字二文字で)"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "XMLテキスト"
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s はurlpatternオブジェクトでは無いようです"
+
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
 msgstr "サイト管理"
 
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" を追加しました。"
-
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
-msgid "You may edit it again below."
-msgstr "続けて編集できます。"
-
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
-#, python-format
 msgid "You may add another %s below."
 msgstr "続けて別の %s を追加できます。"
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr "%s を追加"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "%s を追加しました。"
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339 db/models/manipulators.py:306
 msgid "and"
 msgstr "と"
 
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "%s を変更しました。"
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "%s を削除しました。"
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "変更はありませんでした。"
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" を変更しました。"
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "%(name)s \"%(obj)s\" を追加しました。続けて編集できます。"
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "%s を変更"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:473
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "%(name)s に %(fieldname)s が一つ以上あります: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:478
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "%(name)s に %(fieldname)s が一つ以上あります:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:511
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" を削除しました。"
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:514
 msgid "Are you sure?"
 msgstr "よろしいですか?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:536
 #, python-format
 msgid "Change history: %s"
 msgstr "変更履歴: %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s"
 msgstr "%s を選択"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s to change"
 msgstr "変更する %s を選択"
 
-#: contrib/auth/forms.py:30
+#: contrib/admin/views/main.py:758
+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."
@@ -880,83 +1072,121 @@
 "お使いのブラウザはクッキーを有効にしていないようです。ログインにはクッキーが"
 "必要です。"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: 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/models.py:38 contrib/auth/models.py:57
 msgid "name"
 msgstr "名前"
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr "コード名"
 
-#: contrib/auth/models.py:17
-#, fuzzy
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr "パーミッション"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
 msgid "permissions"
 msgstr "パーミッション"
 
-#: contrib/auth/models.py:29
-#, fuzzy
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr "グループ"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
 msgid "groups"
 msgstr "グループ"
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr "ユーザ名"
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"この項目は必須です。半角アルファベット、半角数字、半角アンダーバーで30文字以"
+"下にしてください。"
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr "名"
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr "姓"
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr "メールアドレス"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr "パスワード"
 
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "'[アルゴリズム]$[ソルト]$[ダイジェスト(hex)]' 形式を使って下さい"
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"'[algo]$[salt]$[hexdigest]'形式か、"
+"<a href=\"password/\">パスワード変更フォーム</a>を使ってください。"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr "スタッフ権限"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
 msgstr "ユーザが管理サイトにログイン可能かどうかを示します。"
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr "有効"
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr "ユーザが管理サイトにログイン可能かどうかを示します。"
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr "スーパーユーザ権限"
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "全ての権限を持っているとみなされます。"
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr "最終ログイン"
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr "登録日"
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -964,42 +1194,42 @@
 "手動で付与したパーミッションに加え、所属しているグループに付与された全ての"
 "パーミッションを獲得します。"
 
-#: contrib/auth/models.py:67
-#, fuzzy
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr "ユーザパーミッション"
 
-#: contrib/auth/models.py:70
-#, fuzzy
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr "ユーザ"
 
-#: contrib/auth/models.py:71
-#, fuzzy
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr "ユーザ"
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr "個人情報"
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr "パーミッション"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr "重要な日程"
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr "グループ"
 
-#: contrib/auth/models.py:219
-#, fuzzy
+#: contrib/auth/models.py:258
 msgid "message"
 msgstr "メッセージ"
 
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "ログアウト"
+
 #: contrib/comments/models.py:67 contrib/comments/models.py:166
 msgid "object ID"
 msgstr "オブジェクト ID"
@@ -1070,7 +1300,6 @@
 "た」と表示されるようになります。"
 
 #: contrib/comments/models.py:91
-#, fuzzy
 msgid "comments"
 msgstr "コメント"
 
@@ -1106,12 +1335,10 @@
 msgstr "スタッフの承認済み"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
 msgstr "フリーコメント"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
 msgstr "フリーコメント"
 
@@ -1124,12 +1351,10 @@
 msgstr "スコアされた日"
 
 #: contrib/comments/models.py:237
-#, fuzzy
 msgid "karma score"
 msgstr "カルマスコア"
 
 #: contrib/comments/models.py:238
-#, fuzzy
 msgid "karma scores"
 msgstr "カルマスコア"
 
@@ -1154,12 +1379,10 @@
 msgstr "フラグ日"
 
 #: contrib/comments/models.py:268
-#, fuzzy
 msgid "user flag"
 msgstr "ユーザフラグ"
 
 #: contrib/comments/models.py:269
-#, fuzzy
 msgid "user flags"
 msgstr "ユーザフラグ"
 
@@ -1173,12 +1396,10 @@
 msgstr "削除日"
 
 #: contrib/comments/models.py:280
-#, fuzzy
 msgid "moderator deletion"
 msgstr "モデレータ削除"
 
 #: contrib/comments/models.py:281
-#, fuzzy
 msgid "moderator deletions"
 msgstr "モデレータ削除"
 
@@ -1187,13 +1408,11 @@
 msgid "Moderator deletion by %r"
 msgstr "%r によるモデレータ削除"
 
-#: contrib/comments/templates/comments/form.html:6
-#, fuzzy
+#: contrib/comments/templates/comments/form.html:8
 msgid "Forgotten your password?"
 msgstr "パスワードをお忘れですか?"
 
 #: contrib/comments/templates/comments/form.html:12
-#, fuzzy
 msgid "Ratings"
 msgstr "レーティング"
 
@@ -1211,30 +1430,27 @@
 msgid "Post a photo"
 msgstr "写真を登録"
 
-#: contrib/comments/templates/comments/form.html:27
+#: contrib/comments/templates/comments/form.html:28
 #: contrib/comments/templates/comments/freeform.html:5
-#, fuzzy
 msgid "Comment:"
 msgstr "コメント:"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-#, fuzzy
+#: 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
-#, fuzzy
 msgid "Your name:"
 msgstr "ユーザ名:"
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid ""
 "This rating is required because you've entered at least one other rating."
 msgstr ""
 "他のレーティングを入力した場合は、このレーティングは必ず入力してください。"
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -1249,7 +1465,7 @@
 msgstr[0] "このコメントを投稿したユーザのコメント数は %(count)s 未満です。"
 msgstr[1] "このコメントを投稿したユーザのコメント数は %(count)s 未満です。"
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
@@ -1260,22 +1476,22 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "POST メソッドのみ有効です。"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "必須項目がいくつか入力されていません。"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr "だれかがコメントフォームを改竄しています (セキュリティ侵害です)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
@@ -1301,16 +1517,15 @@
 msgid "No voting for yourself"
 msgstr "自分には投票できません。"
 
-#: contrib/contenttypes/models.py:25
-#, fuzzy
+#: contrib/contenttypes/models.py:26
 msgid "python model class name"
 msgstr "Python モデルクラス名"
 
-#: contrib/contenttypes/models.py:28
+#: contrib/contenttypes/models.py:29
 msgid "content type"
 msgstr "コンテンツタイプ"
 
-#: contrib/contenttypes/models.py:29
+#: contrib/contenttypes/models.py:30
 msgid "content types"
 msgstr "コンテンツタイプ"
 
@@ -1338,11 +1553,11 @@
 
 #: contrib/flatpages/models.py:13
 msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
 msgstr ""
-"例: 'flatpages/contact_page'. 指定しなければ、デフォルト設定の'flatpages/"
-"default' を使います。"
+"例: 'flatpages/contact_page.html'. 指定しなければ、デフォルト設定"
+"の'flatpages/default.html' を使います。"
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1360,6 +1575,10 @@
 msgid "flat pages"
 msgstr "フラットページ"
 
+#: contrib/localflavor/usa/forms.py:13
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "リダイレクト元"
@@ -1380,31 +1599,31 @@
 "'http://'."
 msgstr "上記のような絶対パスか、 'http://' で始まる完全な URL にします。"
 
-#: contrib/redirects/models.py:12
+#: contrib/redirects/models.py:13
 msgid "redirect"
 msgstr "リダイレクト"
 
-#: contrib/redirects/models.py:13
+#: contrib/redirects/models.py:14
 msgid "redirects"
 msgstr "リダイレクト"
 
-#: contrib/sessions/models.py:35
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "セッションキー"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "セッションデータ"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "有効期限"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "セッション"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "セッション"
 
@@ -1424,74 +1643,92 @@
 msgid "sites"
 msgstr "サイト"
 
-#: core/validators.py:60
+#: core/validators.py:64
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "半角の英数字およびアンダースコア以外は使用できません。"
 
-#: core/validators.py:64
-#, fuzzy
+#: core/validators.py:68
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
-msgstr "半角の英数字、アンダースコア、ダッシュ、ラッシュ以外は使用できません。"
+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:76
+#: core/validators.py:80
 msgid "Lowercase letters are not allowed here."
 msgstr "小文字はここでは使用できません。"
 
-#: core/validators.py:83
+#: core/validators.py:87
 msgid "Enter only digits separated by commas."
 msgstr "カンマ区切りの数字だけを入力してください。"
 
-#: core/validators.py:95
+#: core/validators.py:99
 msgid "Enter valid e-mail addresses separated by commas."
 msgstr "カンマ区切りの有効なメールアドレスを入力してください。"
 
-#: core/validators.py:99
+#: core/validators.py:103
 msgid "Please enter a valid IP address."
 msgstr "有効な IP アドレスを入力してください。"
 
-#: core/validators.py:103
+#: core/validators.py:107
 msgid "Empty values are not allowed here."
 msgstr "入力は必須です。"
 
-#: core/validators.py:107
+#: core/validators.py:111
 msgid "Non-numeric characters aren't allowed here."
 msgstr "数値以外は使用できません。"
 
-#: core/validators.py:111
+#: core/validators.py:115
 msgid "This value can't be comprised solely of digits."
 msgstr "数値だけの値にはできません。"
 
-#: core/validators.py:116
+#: core/validators.py:120 newforms/fields.py:126
 msgid "Enter a whole number."
 msgstr "整数を入力してください。"
 
-#: core/validators.py:120
+#: core/validators.py:124
 msgid "Only alphabetical characters are allowed here."
 msgstr "半角アルファベット以外使用できません。"
 
-#: core/validators.py:124
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "1900年以降を指定してください。"
+
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "無効な日付: %s"
+
+#: core/validators.py:147 db/models/fields/__init__.py:454
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "YYYY-MM-DD形式で日付を入力してください。"
 
-#: core/validators.py:128
+#: core/validators.py:152
 msgid "Enter a valid time in HH:MM format."
 msgstr "HH:MM形式で時刻を入力してください。"
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: core/validators.py:156 db/models/fields/__init__.py:521
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr "YYYY-MM-DD HH:MM形式で日時を入力してください。"
 
-#: core/validators.py:136
+#: core/validators.py:161 newforms/fields.py:269
 msgid "Enter a valid e-mail address."
 msgstr "有効なメールアドレスを入力してください。"
 
-#: core/validators.py:148
+#: core/validators.py:173 core/validators.py:442 oldforms/__init__.py:667
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+"ファイルが取得できませんでした。formのencoding typeを確認してください。"
+
+#: core/validators.py:177
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -1499,26 +1736,26 @@
 "画像をアップロードしてください。アップロードした画像は画像でないか、または壊"
 "れています。"
 
-#: core/validators.py:155
+#: core/validators.py:184
 #, python-format
 msgid "The URL %s does not point to a valid image."
 msgstr "URL ( %s )  は画像ではありません。"
 
-#: core/validators.py:159
+#: core/validators.py:188
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr "電話番号は XXX-XXX-XXXX 形式で入力してください。\"%s\" は無効です。"
 
-#: core/validators.py:167
+#: core/validators.py:196
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
 msgstr "URL ( %s ) は QuickTime ビデオではありません。"
 
-#: core/validators.py:171
+#: core/validators.py:200
 msgid "A valid URL is required."
 msgstr "正しい URL を入力してください。"
 
-#: core/validators.py:185
+#: core/validators.py:214
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
@@ -1527,117 +1764,141 @@
 "有効な HTML を入力してください。エラー:\n"
 "%s"
 
-#: core/validators.py:192
+#: core/validators.py:221
 #, python-format
 msgid "Badly formed XML: %s"
 msgstr "不正な XML です: %s"
 
-#: core/validators.py:202
+#: core/validators.py:238
 #, python-format
 msgid "Invalid URL: %s"
 msgstr "無効なURL: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:243 core/validators.py:245
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr "URL ( %s ) はリンクが壊れています。"
 
-#: core/validators.py:214
+#: core/validators.py:251
 msgid "Enter a valid U.S. state abbreviation."
 msgstr "正しい米州略称を入力してください。"
 
-#: core/validators.py:229
+#: core/validators.py:265
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "言葉使いに気を付けて! %s という言葉は使えません。"
 msgstr[1] "言葉使いに気を付けて! %s という言葉は使えません。"
 
-#: core/validators.py:236
+#: core/validators.py:272
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr "このフィールドは '%s' フィールドと一致せねばなりません。"
 
-#: core/validators.py:255
+#: core/validators.py:291
 msgid "Please enter something for at least one field."
 msgstr "少なくとも一つのフィールドに何か入力してください。"
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:300 core/validators.py:311
 msgid "Please enter both fields or leave them both empty."
 msgstr "両方のフィールドに入力するか、両方とも未入力にしてください。"
 
-#: core/validators.py:282
+#: core/validators.py:318
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
 msgstr ""
 "%(field)s を %(value)s にするのなら、このフィールドに必ず入力してください。"
 
-#: core/validators.py:294
+#: core/validators.py:330
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
 msgstr ""
 "%(field)s を %(value)s にしないのなら、このフィールドに必ず入力してください。"
 
-#: core/validators.py:313
+#: core/validators.py:349
 msgid "Duplicate values are not allowed."
 msgstr "重複する値は認められません。"
 
-#: core/validators.py:336
+#: core/validators.py:364
 #, python-format
+msgid "This value must be between %s and %s."
+msgstr "この値は %s から %s の間でなければなりません。"
+
+#: core/validators.py:366
+#, python-format
+msgid "This value must be at least %s."
+msgstr "この値は %s 以上でなければなりません。"
+
+#: core/validators.py:368
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "この値は %s より小さくなければなりません。"
+
+#: core/validators.py:404
+#, python-format
 msgid "This value must be a power of %s."
 msgstr "この値は %s の累乗でなければなりません。"
 
-#: core/validators.py:347
+#: core/validators.py:415
 msgid "Please enter a valid decimal number."
 msgstr "有効な 10 進数を入力してください。"
 
-#: core/validators.py:349
+#: core/validators.py:419
 #, 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] "最大桁数 %s 桁以下の有効な 10 進数を入力してください。"
-msgstr[1] "最大桁数 %s 桁以下の有効な 10 進数を入力してください。"
+msgstr[0] "全体で %s 文字以下の数字を入力してください。"
+msgstr[1] "全体で %s 文字以下の数字を入力してください。"
 
-#: core/validators.py:352
+#: core/validators.py:422
 #, 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] "整数部は %s 文字以下の数字を入力してください。"
+msgstr[1] "整数部は %s 文字以下の数字を入力してください。"
+
+#: core/validators.py:425
+#, 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] "小数点以下が %s 桁までの有効な 10 進数を入力してください。"
-msgstr[1] "小数点以下が %s 桁までの有効な 10 進数を入力してください。"
+msgstr[0] "小数部は %s 文字以下の数字を入力してください。"
+msgstr[1] "小数部は %s 文字以下の数字を入力してください。"
 
-#: core/validators.py:362
+#: core/validators.py:435
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr "アップロードするファイルの大きさは %s バイト以上にしてください。"
 
-#: core/validators.py:363
+#: core/validators.py:436
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr "アップロードするファイルの大きさは %s 最大バイトまでです。"
 
-#: core/validators.py:376
+#: core/validators.py:453
 msgid "The format for this field is wrong."
 msgstr "フィールドの形式が正しくありません。"
 
-#: core/validators.py:391
+#: core/validators.py:468
 msgid "This field is invalid."
 msgstr "このフィールドは無効です。"
 
-#: core/validators.py:426
+#: core/validators.py:504
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr "%s から何も検索できませんでした。"
 
-#: core/validators.py:429
+#: core/validators.py:507
 #, python-format
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr ""
 "URL %(url)s は無効なコンテンツタイプヘッダ '%(contenttype)s' を返しました。"
 
-#: core/validators.py:462
+#: core/validators.py:540
 #, python-format
 msgid ""
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@@ -1646,7 +1907,7 @@
 "%(line)s 行目から始まる %(tag)s タグを閉じてください (\"%(start)s\" で始まる"
 "行です)。"
 
-#: core/validators.py:466
+#: core/validators.py:544
 #, python-format
 msgid ""
 "Some text starting on line %(line)s is not allowed in that context. (Line "
@@ -1655,7 +1916,7 @@
 "%(line)s 行目から始まるテキストはこのコンテキストでは使えません。 (\"%(start)"
 "s\" で始まる行です)。"
 
-#: core/validators.py:471
+#: core/validators.py:549
 #, python-format
 msgid ""
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@@ -1664,7 +1925,7 @@
 "%(line)s 行目の \"%(attr)s\" は無効なアトリビュートです (\"%(start)s\" で始ま"
 "る行です)。"
 
-#: core/validators.py:476
+#: core/validators.py:554
 #, python-format
 msgid ""
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@@ -1673,7 +1934,7 @@
 "%(line)s 行目の \"<%(tag)s>\" は無効なタグです( \"%(start)s\" で始まる行で"
 "す)。"
 
-#: core/validators.py:480
+#: core/validators.py:558
 #, python-format
 msgid ""
 "A tag on line %(line)s is missing one or more required attributes. (Line "
@@ -1682,7 +1943,7 @@
 "%(line)s 行目のタグは必須アトリビュートが未入力です( \"%(start)s\" で始まる行"
 "です)。"
 
-#: core/validators.py:485
+#: core/validators.py:563
 #, python-format
 msgid ""
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@@ -1691,61 +1952,57 @@
 "%(line)s 行目の \"%(attr)s\" アトリビュートの値が正しくありません (\"%(start)"
 "s\" で始まる行です) 。"
 
-#: db/models/manipulators.py:302
+#: db/models/manipulators.py:305
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
 msgstr ""
 "%(field)s に入力されたものは、この %(type)s の %(object)s に既に存在します。"
 
-#: db/models/fields/__init__.py:40
+#: db/models/fields/__init__.py:42
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
 msgstr "%(fieldname)s に %(optname)s は既に存在します。"
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
+#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
+#: newforms/fields.py:78 newforms/fields.py:373 newforms/fields.py:449
+#: newforms/fields.py:460 oldforms/__init__.py:352
 msgid "This field is required."
 msgstr "このフィールドは必須です。"
 
-#: db/models/fields/__init__.py:337
-#, fuzzy
+#: db/models/fields/__init__.py:366
 msgid "This value must be an integer."
 msgstr "値は整数でなければなりません。"
 
-#: db/models/fields/__init__.py:369
-#, fuzzy
+#: db/models/fields/__init__.py:401
 msgid "This value must be either True or False."
 msgstr "値は真: True または偽: False でなければなりません。"
 
-#: db/models/fields/__init__.py:385
-#, fuzzy
+#: db/models/fields/__init__.py:422
 msgid "This field cannot be null."
 msgstr "このフィールドには NULL を指定できません。"
 
-#: db/models/fields/__init__.py:562
+#: db/models/fields/__init__.py:625
 msgid "Enter a valid filename."
 msgstr "正しいファイル名を入力してください。"
 
-#: db/models/fields/related.py:43
+#: db/models/fields/related.py:53
 #, python-format
 msgid "Please enter a valid %s."
 msgstr "正しい %s を入力してください。"
 
-#: db/models/fields/related.py:579
-#, fuzzy
+#: db/models/fields/related.py:642
 msgid "Separate multiple IDs with commas."
 msgstr "複数の ID はカンマで区切ってください。"
 
-#: db/models/fields/related.py:581
-#, fuzzy
+#: db/models/fields/related.py:644
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
-"複数選択するときには \"Control\"キーを押したまま選択してください。Mac では "
-"\"Command\" キーを使ってください。"
+"複数選択するときには Control キーを押したまま選択してください。Mac は "
+"Command キーを使ってください"
 
-#: db/models/fields/related.py:625
+#: db/models/fields/related.py:691
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -1753,39 +2010,96 @@
 msgstr[0] "正しい %(self)s IDを入力してください。 %(value)r は無効です。"
 msgstr[1] "正しい %(self)s IDを入力してください。 %(value)r は無効です。"
 
-#: forms/__init__.py:380
+#: newforms/fields.py:101 newforms/fields.py:254
 #, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "%d 字以下で入力してください。"
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "%d 字以上で入力してください。"
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "この値は %s 以下でなければなりません。"
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "この値は %s 以上でなければなりません。"
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "日付を正しく入力してください。"
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "時間を正しく入力してください。"
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "日付/時間を正しく入力してください。"
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "値を正しく入力してください。"
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "URLを正しく入力してください。"
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "このURLはリンクが壊れています。"
+
+#: newforms/fields.py:359
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "正しく選択してください。選択したものは候補にありません。"
+
+#: newforms/fields.py:377 newforms/fields.py:453
+msgid "Enter a list of values."
+msgstr "リストを入力してください。"
+
+#: newforms/fields.py:386
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "正しく選択してください。 %s は候補にありません。"
+
+#: oldforms/__init__.py:387
+#, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
 msgstr[0] "%s 字以下で入力してください。"
 msgstr[1] "%s 字以下で入力してください。"
 
-#: forms/__init__.py:385
+#: oldforms/__init__.py:392
 msgid "Line breaks are not allowed here."
 msgstr "改行はできません。"
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
 msgstr "正しく選択してください。; '%(data)s' は %(choices)s にありません。"
 
-#: forms/__init__.py:645
+#: oldforms/__init__.py:669
 msgid "The submitted file is empty."
 msgstr "入力されたファイルは空です。"
 
-#: forms/__init__.py:699
+#: oldforms/__init__.py:725
 msgid "Enter a whole number between -32,768 and 32,767."
 msgstr "-32,768 から 32,767 までの整数を入力してください。"
 
-#: forms/__init__.py:708
+#: oldforms/__init__.py:735
 msgid "Enter a positive number."
 msgstr "正の数を入力してください。"
 
-#: forms/__init__.py:717
+#: oldforms/__init__.py:745
 msgid "Enter a whole number between 0 and 32,767."
 msgstr "0 から 32,767 までの整数を入力してください。"
 
-#: template/defaultfilters.py:383
+#: template/defaultfilters.py:436
 msgid "yes,no,maybe"
 msgstr "はい,いいえ,たぶん"
 
@@ -1866,7 +2180,6 @@
 msgstr "12月"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "jan"
 msgstr "1月"
 
@@ -1883,7 +2196,6 @@
 msgstr "4月"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "may"
 msgstr "5月"
 
@@ -1979,32 +2291,37 @@
 msgstr[0] "分"
 msgstr[1] "分"
 
-#: utils/translation.py:363
+#: utils/translation/trans_real.py:362
 msgid "DATE_FORMAT"
 msgstr "Y/m/d"
 
-#: utils/translation.py:364
+#: utils/translation/trans_real.py:363
 msgid "DATETIME_FORMAT"
 msgstr "Y/m/d H:i"
 
-#: utils/translation.py:365
+#: utils/translation/trans_real.py:364
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#~ msgid "String (up to 50)"
-#~ msgstr "文字列 (50 字まで)"
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "Y/m/d"
 
-#~ msgid "Comment"
-#~ msgstr "コメント"
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "m/d"
 
-#~ msgid "Comments"
-#~ msgstr "コメント"
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s を作成しました。"
 
-#~ msgid "label"
-#~ msgstr "ラベル"
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s を更新しました。"
 
-#~ msgid "package"
-#~ msgstr "パッケージ"
-
-#~ msgid "packages"
-#~ msgstr "パッケージ"
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr " %(verbose_name)s を削除しました。"

Modified: vendor/django/current/django/conf/locale/ja/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/ja/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/ja/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ja/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,13 +2,13 @@
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
+# 
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: Django 1.0\n"
-"Report-Msgid-Bugs-To: Django-users Japan <django-ja at googlegroups.com>\n"
-"POT-Creation-Date: 2006-05-02 23:06+0900\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-10-06 00:30+0900\n"
 "PO-Revision-Date: 2006-05-08 13:39+0900\n"
 "Last-Translator: makoto tsuyuki <mtsuyuki at gmail.com>\n"
 "Language-Team: Japanese <django-ja at googlegroups.com>\n"
@@ -61,50 +61,58 @@
 msgid "Clear all"
 msgstr "全てクリア"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+#: 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 "午前 6 時"
 
-#: 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 "明日"
-

Added: vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/kn/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2533 @@
+# Kannada translation of Django.
+# Copyright (C) 2007 Translation Team <translation at sampada.info>
+# This file is distributed under the same license as the Django package.
+# Kannada Localization Team <translation at sampada.info>, 2007.
+# 
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Django-kn 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-09-25 15:43+0200\n"
+"PO-Revision-Date: 2007-01-08 20:22+0530\n"
+"Last-Translator: Kannada Localization Team <translation at sampada.info>\n"
+"Language-Team: Kannada <translation at sampada.info>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#: 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 "IP ವಿಳಾಸ"
+
+#: 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 ""
+"ಸಲ್ಲಿಸಿದವರು %(user)s ರವರು  %(date)s\n"
+"\n"
+"  ದಿನ/ಸಮಯಕ್ಕೆ %(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s  ಸಲ್ಲಿಸಿದ್ದು"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "ವ್ಯಕ್ತಿಯ ಹೆಸರು"
+
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "IP ವಿಳಾಸ"
+
+#: 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 " %(user)s ಇಂದ  %(score)d ಕ್ರಮಾಂಕ"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"ಈ ಟಿಪ್ಪಣಿಯನ್ನು %(user)s ರವರು "
+"ಪತಾಕೆಯಿಂದ ಗುರುತು "
+"ಮಾಡಿದ್ದಾರೆ:\n"
+"\n"
+"%(text)s"
+
+#: 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 "%r ಇಂದ ಪತಾಕೆ"
+
+#: 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 " %r ಇಂದ ನಿಯಂತ್ರಕರ ಅಳಿಸುವಿಕೆ "
+
+#: 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"
+"This comment was posted by a user who has posted fewer than %(count)s "
+"comments:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"%(count)s ಕ್ಕಿಂತಲೂ ಕಡಿಮೆ "
+"ಟಿಪ್ಪಣಿಗಳನ್ನು ಬರೆದಿರುವ "
+"ಸದಸ್ಯರಿಂದ ಈ ಟಿಪ್ಪಣಿ "
+"ಬರೆಯಲ್ಪಟ್ಟಿದೆ:\n"
+"\n"
+"%(text)s"
+"%(count)sಕ್ಕಿಂತಲೂ ಕಡಿಮೆ "
+"ಟಿಪ್ಪಣಿಗಳನ್ನು ಬರೆದಿರುವ "
+"ಸದಸ್ಯರಿಂದ ಈ ಟಿಪ್ಪಣಿ "
+"ಬರೆಯಲ್ಪಟ್ಟಿದೆ:\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 ""
+"ಈ ಟಿಪ್ಪಣಿಯನ್ನು ಅಪೂರ್ಣ "
+"ಮಾಹಿತಿಯುಳ್ಳ ಬಳಕೆದಾರ :\n"
+"\n"
+" %(text)s ರು ಸಲ್ಲಿಸಿದ್ದಾರೆ"
+
+#: 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/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/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_index.html:5
+msgid "Log out"
+msgstr "ಹೊರಕ್ಕೆ ಹೋಗಿ"
+
+#: 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/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>%s ಇಂದ :</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "ಎಲ್ಲಾ"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "ಯಾವುದೇ ದಿನಾಂಕ"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "ಈದಿನ"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "ಕಳೆದ ೭ ದಿನಗಳು"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "ಈ ತಿಂಗಳು"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "ಈ ವರ್ಷ"
+
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "ಹೌದು"
+
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "ಇಲ್ಲ"
+
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "ಗೊತ್ತಿಲ್ಲ(ದ/ದ್ದು)"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "ಕ್ರಮದ(ಕ್ರಿಯೆಯ) ಸಮಯ"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "ವಸ್ತುವಿನ ಐಡಿ"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+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:230
+msgid "All dates"
+msgstr "ಎಲ್ಲಾ ದಿನಾಂಕಗಳು"
+
+#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
+msgid ""
+"Please enter a correct username and password. Note that both fields are "
+"case-sensitive."
+msgstr ""
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ಬಳಕೆದಾರ-ಪದ "
+"ಮತ್ತು  ಪ್ರವೇಶಪದ ಬರೆಯಿರಿ "
+".ಎರಡೂ ಇಂಗ್ಲೀಷಿನ  ಸಣ್ಣ ಮತ್ತು "
+"ದೊಡ್ಡ ಅಕ್ಷರ ಸಂವೇದಿ  "
+"ಎಂಬುದನ್ನು ಗಮನದಲ್ಲಿಡಿ"
+
+#: contrib/admin/views/decorators.py:24
+#: contrib/admin/templates/admin/login.html:25
+msgid "Log in"
+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 ""
+"ನಿಮ್ಮ ವಿ-ಅಂಚೆ ವಿಳಾಸವು ನಿಮ್ಮ "
+"ಬಳಕೆದಾರ-ಹೆಸರಲ್ಲ; ಬದಲಾಗಿ '%s'  "
+"ಪ್ರಯತ್ನಿಸಿ."
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "ತಾಣ ನಿರ್ವಹಣೆ"
+
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr ""
+" %(name)s \"%(obj)s\" ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
+"ಸೇರಿಸಲಾಯಿತು."
+
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:22
+msgid "You may edit it again below."
+msgstr ""
+"ನೀವು ಅದನ್ನು ಕೆಳಗೆ ಮತ್ತೆ "
+"ಬದಲಾಯಿಸಬಹುದು."
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr ""
+"ನೀವು ಕೆಳಗೆ ಇನ್ನೊಂದು %s "
+"ಸೇರಿಸಬಹುದು."
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "%s ಸೇರಿಸಿ"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "%s ಸೇರಿಸಲಾಯಿತು."
+
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339
+msgid "and"
+msgstr "ಮತ್ತು"
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "%s ಬದಲಾಯಿಸಲಾಯಿತು."
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "%s ತೆಗೆದುಹಾಕಲಾಯಿತು."
+
+#: 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 ""
+"%(name)s \"%(obj)s\" ಸಫಲವಾಗಿ "
+"ಬದಲಾಯಿಸಲಾಯಿತು."
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"%(name)s \"%(obj)s\" ಅನ್ನು  ಯಶಸ್ವಿಯಾಗಿ "
+"ಸೇರಿಸಲಾಯಿತು. ನೀವು ಕೆಳಗೆ "
+"ಅದನ್ನು ಮತ್ತೆ ಬದಲಾಯಿಸಬಹುದು."
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "%s ಅನ್ನು ಬದಲಿಸು"
+
+#: contrib/admin/views/main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr ""
+"%(name)s ನಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು "
+"%(fieldname)s :%(obj)s"
+
+#: contrib/admin/views/main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr ""
+"%(name)s ನಲ್ಲಿ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು "
+"%(fieldname)s :"
+
+#: contrib/admin/views/main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr ""
+"%(name)s \"%(obj)s\" ಯಶಸ್ವಿಯಾಗಿ "
+"ಅಳಿಸಲಾಯಿತು."
+
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "ಖಚಿತಪಡಿಸುವಿರಾ? "
+
+#: contrib/admin/views/main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ: %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "%s ಆಯ್ದುಕೊಳ್ಳಿ"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "ಬದಲಾಯಿಸಲು %s ಆಯ್ದುಕೊಳ್ಳಿ"
+
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "ದತ್ತಸಂಚಯದ ದೋಷ"
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "ಟ್ಯಾಗ್:"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "ಸೋಸಕ:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "ನೋಟ:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "%r ಅನ್ವಯಾಂಶ ಸಿಗಲಿಲ್ಲ"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr ""
+"%r ಅನ್ವಯಾಂಶದಲ್ಲಿ %r  ಮಾಡೆಲ್ಲು "
+"ಸಿಗಲಿಲ್ಲ"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "ಸಂಬಂಧಿಸಿದ `%s.%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 "ಮಾಡೆಲ್:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "ಸಂಬಂಧಿಸಿದ `%s.%s` ವಸ್ತುಗಳು"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "ಎಲ್ಲಾ %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "%s ಗಳ ಸಂಖ್ಯೆ"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "%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 "ಸಂಖ್ಯೆ"
+
+#: 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 "(%(maxlength)s ವರೆಗಿನ  ) ಅಕ್ಷರಪುಂಜ"
+
+#: 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:315 contrib/flatpages/models.py:7
+msgid "URL"
+msgstr "URL"
+
+#: contrib/admin/views/doc.py:316
+msgid "U.S. state (two uppercase letters)"
+msgstr ""
+"ಅಮೇರಿಕಾ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನದ "
+"ರಾಜ್ಯ ( ಎರಡು ಇಂಗ್ಲೀಷ್ "
+"ದೊಡ್ಡಕ್ಷರಗಳು)"
+
+#: contrib/admin/views/doc.py:317
+msgid "XML text"
+msgstr "XML ಪಠ್ಯ"
+
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr ""
+"%s  URL ಸ್ವರೂಪದ್ದಾಗಿ ತೋರುವದಿಲ್ಲ."
+
+#: contrib/admin/views/auth.py:28
+msgid "Add user"
+msgstr "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಿ"
+
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr "ವಿವರಮಾಹಿತಿ"
+
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_index.html:5
+msgid "Change password"
+msgstr "ಪ್ರವೇಶಪದ ಬದಲಿಸಿ"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/change_list.html:6
+#: contrib/admin/templates/admin/base.html:30
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: 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 "ಪ್ರಾರಂಭಸ್ಥಳ(ಮನೆ)"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_form.html:20
+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/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/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 <em>(500)</em>"
+msgstr "ಸರ್ವರ್ ದೋಷ<em>(೫೦೦)</em>"
+
+#: 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/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/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr ""
+"%(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 "ಸೇರಿಸಿ"
+
+#: 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/change_list.html:11
+#, python-format
+msgid "Add %(name)s"
+msgstr "%(name)s ಸೇರಿಸಿ"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr ""
+"ನೀವು <a "
+"href=\"/password_reset/\">ಪ್ರವೇಶಪದವನ್ನು "
+"ಮರೆತಿದ್ದೀರಾ</a>?"
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "ಸುಸ್ವಾಗತ."
+
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
+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 ""
+"'%(escaped_object)s'  %(object_name)s ಅನ್ನು "
+"ತೆಗೆದುಹಾಕುವುದರಿಂದ ಸಂಬಂಧಿತ "
+"ವಸ್ತುಗಳೂ ಕಳೆದುಹೋಗುತ್ತವೆ. "
+"ಆದರೆ ನಿಮ್ಮ ಖಾತೆಗೆ ಕೆಳಕಂಡ "
+"ಬಗೆಗಳ ವಸ್ತುಗಳನ್ನು "
+"ತೆಗೆದುಹಾಕಲು ಅನುಮತಿಯಿಲ್ಲ."
+
+#: 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 ""
+"ದಿಟವಾಗಿಯೂ, ನೀವು %(object_name)s  "
+"\"%(escaped_object)ಗಳನ್ನು\"? "
+"ತೆಗೆದುಹಾಕಬಯಸಿದ್ದೀರಾ? "
+"ಸಂಬಂಧಪಟ್ಟ ಕೆಳಕಂಡ ಎಲ್ಲವನ್ನೂ "
+"ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "ಹೌದು,ನನಗೆ ಖಚಿತವಿದೆ"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr "%(filter_title)s ಇಂದ"
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "ಹೋಗಿ"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgstr "೧ ಫಲಿತಾಂಶ"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "ಒಟ್ಟು %(full_result_count)s"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "ಎಲ್ಲವನ್ನೂ ತೋರಿಸು"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "ಸೋಸಕ"
+
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "View on site"
+msgstr "ತಾಣದಲ್ಲಿ ನೋಡಿ"
+
+#: contrib/admin/templates/admin/change_form.html:30
+msgid "Please correct the error below."
+msgstr ""
+"ದಯಮಾಡಿ ಕೆಳಗಿನ ತಪ್ಪನ್ನು "
+"ಸರಿಪಡಿಸಿ "
+"ದಯಮಾಡಿ ಕೆಳಗಿನ ತಪ್ಪುಗಳನ್ನು "
+"ಸರಿಪಡಿಸಿ. "
+
+#: contrib/admin/templates/admin/change_form.html:48
+msgid "Ordering"
+msgstr "ಅನುಕ್ರಮದಲ್ಲಿ ಜೋಡಣೆ"
+
+#: contrib/admin/templates/admin/change_form.html:51
+msgid "Order:"
+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/invalid_setup.html:8
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"ಡಾಟಾಬೇಸನ್ನು ಇನ್ಸ್ಟಾಲ್ "
+"ಮಾಡುವಾಗ ಏನೋ ತಪ್ಪಾಗಿದೆ. ಸೂಕ್ತ "
+" ಡಾಟಾಬೇಸ್ ಕೋಷ್ಟಕಗಳು "
+"ರಚನೆಯಾಗಿ ಅರ್ಹ ಬಳಕೆದಾರರು "
+"ಅವುಗಳನ್ನು ಓದಬಹುದಾಗಿದೆಯೇ "
+"ಎಂಬುದನ್ನು ಖಾತರಿ "
+"ಪಡಿಸಿಕೊಳ್ಳಿ."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:6
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"ಮೊದಲು ಬಳಕೆದಾರ-ಹೆಸರು ಮತ್ತು "
+"ಪ್ರವೇಶಪದವನ್ನು ಕೊಡಿರಿ. ನಂತರ, "
+"ನೀವು ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳನ್ನು  "
+"ಬದಲಿಸಬಹುದಾಗಿದೆ."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "ಬಳಕೆದಾರ-ಹೆಸರು"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "ಪ್ರವೇಶಪದ"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "ಪ್ರವೇಶಪದ(ಇನ್ನೊಮ್ಮೆ)"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr ""
+"ಖಚಿತಗೊಳಿಸಲು ಮೇಲಿನ "
+"ಪ್ರವೇಶಪದವನ್ನು ಇನ್ನೊಮ್ಮೆ "
+"ಬರೆಯಿರಿ."
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+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: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 "ಪ್ರವೇಶಪದವನ್ನು ಬದಲಿಸುವಿಕೆ"
+
+#: 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/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_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: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_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 ""
+"%(site_name)s ತಾಣದಲ್ಲಿ ನಿಮ್ಮ "
+"ಬಳಕೆದಾರ-ಖಾತೆಗಾಗಿ"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "ನಿಮ್ಮ ಹೊಸ ಪ್ರವೇಶಪದ : %(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 ""
+"ನಿಸ್ಸಂಕೋಚವಾಗಿ ಈ ಪುಟಕ್ಕೆ "
+"ಹೋಗಿ ಈ ಪ್ರವೇಶಪದವನ್ನು "
+"ಬದಲಿಸಿರಿ."
+
+#: 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 "%(site_name)s ತಂಡ"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "ಚಿಕ್ಕ ಪುಟಗುರುತುಗಳು"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr ""
+"ಮಾಹಿತಿಯ ಚಿಕ್ಕ ಪುಟಗುರುತುಗಳು"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p "
+"class=\"help\">ಸಣ್ಣ್ಪುಟಗುರುತುಗಳನ್ನು "
+"ಅನುಸ್ಥಾಪಿಸಲು ಕೊಂಡಿಯನ್ನು "
+"ಪುಟಗುರುತು ಉಪಕರಣಪಟ್ಟಿ(ಟೂಲ್ "
+"ಬಾರ್)ಕಡೆಗೆ ಎಳೆದೊಯ್ಯಿರಿ,\n"
+" ಅಥವಾ ಕೊಂಡಿಯ ಮೇಲೆ "
+"ಮೂಷಿಕ(ಮೌಸ್)ದ ಬಲಬಟನ್ನನ್ನು "
+"ಒತ್ತಿ ಪುಟಗುರುತುಗಳಿಗೆ "
+"ಸೇರಿಸಿಕೊಳ್ಳಿ. ಈಗ \n"
+" ನೀವು ಸಣ್ಣಪುಟಗುರುತುಗಳನ್ನು "
+"ತಾಣದ ಯಾವ ಪುಟದಿಂದ ಬೇಕಾದರೂ "
+"ಆಯ್ಕೆಮಾಡಿಕೊಳ್ಳಬಹುದು.\n"
+"ನೆನಪಿರಲಿ, ಕೆಲವು "
+"ಸಣ್ಣಪುಟಗುರುತುಗಳಿಗೆ ನೀವು ಈ "
+"ತಾಣವನ್ನು ಆಂತರಿಕ (\"internal\") ಎಂದು "
+"ಸೂಚಿತವಾಗಿರುವ ಗಣಕದಿಂದ "
+"ವೀಕ್ಷಿಸಬೇಕಾಗುತ್ತದೆ.\n"
+"(  ನಿಮ್ಮ ಗಣಕವು \"internal\" ಹೌದೇ "
+"ಅಲ್ಲವೇ ಎಂದು "
+"ಗೊತ್ತಿಲ್ಲದಿದ್ದರೆ , ಗಣಕದ "
+"ಆಡಳಿತಗಾರರನ್ನು ಕೇಳಿರಿ).</p>\n"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "ಈ ಪುಟದ ಬಗೆಗಿನ ಮಾಹಿತಿ"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:20
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+"ನಿಮ್ಮನ್ನು ಯಾವುದೇ ಪುಟದಿಂದ ಆ "
+"ಪುಟವನ್ನು ಸೃಷ್ಟಿಸುವ ನೋಟದ "
+"ಮಾಹಿತಿಪುಟಕ್ಕೆ ಕೊಂಡೊಯ್ಯುವದು"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "ವಸ್ತುವಿನ ಐಡಿ ತೋರಿಸಿ"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"ಏಕೈಕ ವಸ್ತುವನ್ನು "
+"ಪ್ರತಿನಿಧಿಸುವ ಪುಟಗಳ ವಿಶಿಷ್ಠ "
+"ಐಡಿ ಮತ್ತು ಒಳವಿಷಯಬಗೆಯನ್ನು "
+"ತೋರಿಸುತ್ತದೆ."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr ""
+"ಈ ವಸ್ತುವನ್ನು ಬದಲಿಸಿ(ಈಗಿನ "
+"ಕಿಟಕಿಯಲ್ಲಿ)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+"ಏಕೈಕ ವಸ್ತುವನ್ನು "
+"ಪ್ರತಿನಿಧಿಸುವ ಪುಟಗಳಿಗಾಗಿ "
+"ಆಡಳಿತಪುಟಕ್ಕೆ ಒಯ್ಯುತ್ತದೆ"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr ""
+"ಈ ವಸ್ತುವನ್ನು ಬದಲಿಸಿ(ಹೊಸ "
+"ಕಿಟಕಿಯಲ್ಲಿ)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr ""
+"ಮೇಲಿನಂತೆ, ಆದರೆ "
+"ಆಡಳಿತಪುಟವನ್ನು ಹೊಸ "
+"ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆಯುವದು."
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "ದಿನಾಂಕ:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "ಸಮಯ:"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "ಈಗ:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "ಬದಲಿಸಿ / ಬದಲಾವಣೆ :"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಂದ->"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: "
+"'/events/search/'."
+msgstr ""
+"ಇದು ಡೊಮೈನ್ ಹೊರತುಪಡಿಸಿದ "
+"ಸಂಪೂರ್ಣ ಪಥವಾಗಿರಬೇಕು "
+"ಉದಾ.'/events/search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಗೆ->"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"ಇದು ಮೇಲಿನಂತೆ ಸಂಪೂರ್ಣ "
+"ಪಥವಾದರೂ ಆಗಿರಬಹುದು ಅಥವಾ "
+"'http://'ದಿಂದ ಆರಂಭವಾಗುವ ಸಂಪೂರ್ಣ URL "
+"ಆಗಿರಬಹುದು."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "ಪುನರ್ನಿರ್ದೇಶನ"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "ಪುನರ್ನಿರ್ದೇಶನ(ಗಳು)"
+
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"ಉದಾ:'/about/contact/'. ಮೊದಲು ಮತ್ತು "
+"ಕೊನೆಯಲ್ಲಿ ಓರೆಗೆರೆ (/) ಇರುವಂತೆ "
+"ನೋಡಿಕೊಳ್ಳಿ."
+
+#: 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 ""
+"ಉದಾ:'flatpages/contact_page.html'. ಇದನ್ನು "
+"ಕೊಡದಿದ್ದರೆ ಗಣಕವ್ಯವಸ್ಥೆಯು  "
+"'flatpages/default.html' ಅನ್ನು ಬಳಸುವದು."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "ನೋಂದಾವಣೆ ಅಗತ್ಯವಿದೆ."
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"ಇದರಲ್ಲಿ ಗುರುತು  ಮಾಡಿದರೆ,  "
+"ಒಳಬಂದ (ಲಾಗಿನ್ ಆದ) ಬಳಕೆದಾರರು "
+"ಮಾತ್ರ ಪುಟವನ್ನು ನೋಡಬಹುದು."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "ಚಪ್ಪಟೆ ಪುಟ"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "ಚಪ್ಪಟೆ  ಪುಟಗಳು"
+
+#: contrib/auth/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]'"
+msgstr " '[algo]$[salt]$[hexdigest]' ಬಳಸಿ"
+
+#: 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:256
+msgid "message"
+msgstr "ಸಂದೇಶ"
+
+#: contrib/auth/forms.py:52
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"ನಿಮ್ಮ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ "
+"ಕುಕೀಗಳು "
+"ಸಕ್ರಿಯಗೊಳಿಸಲ್ಪಟ್ಟಂತಿಲ್ಲ. "
+"ಒಳಬರಲು ಕುಕೀಗಳು ಅಗತ್ಯ. "
+
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr "ಈ ಖಾತೆಯು ನಿಷ್ಕ್ರಿಯವಾಗಿದೆ"
+
+#: contrib/contenttypes/models.py:20
+msgid "python model class name"
+msgstr ""
+"ಪೈಥಾನ್ ಮಾಡೆಲ್  ಕ್ಲಾಸಿನ ಹೆಸರು"
+
+#: contrib/contenttypes/models.py:23
+msgid "content type"
+msgstr "ಒಳವಿಷಯದ ಬಗೆ"
+
+#: contrib/contenttypes/models.py:24
+msgid "content types"
+msgstr "ಒಳವಿಷಯದ ಬಗೆಗಳು"
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "ಅಧಿವೇಶನದ ಕೀಲಿಕೈ"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "ಅಧಿವೇಶನದ ದತ್ತಾಂಶ"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "ಅವಧಿಮೀರುವ ದಿನಾಂಕ"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "ಅಧಿವೇಶನ"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "ಅಧಿವೇಶನಗಳು"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "ಡೊಮೈನ್  ಹೆಸರು"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "ತೋರಿಸುವ ಹೆಸರು"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "ತಾಣ"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "ತಾಣಗಳು"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "ಸೋಮವಾರ"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "ಮಂಗಳವಾರ"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "ಬುಧವಾರ"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "ಗುರುವಾರ"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "ಶುಕ್ರವಾರ"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "ಶನಿವಾರ"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "ರವಿವಾರ"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "ಜನವರಿ"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "ಫೆಬ್ರುವರಿ"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "ಮಾರ್ಚ್"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "ಎಪ್ರಿಲ್"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "ಮೇ"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "ಜೂನ್"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "ಜುಲೈ"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "ಆಗಸ್ಟ್"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "ಸೆಪ್ಟೆಂಬರ್"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "ಅಕ್ಟೋಬರ್"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "ನವೆಂಬರ್"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "ಡಿಸೆಂಬರ್"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "ಜನವರಿ"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "ಫೆಬ್ರವರಿ"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "ಮಾರ್ಚ್"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "ಏಪ್ರಿಲ್"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "ಮೇ"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "ಜೂನ್"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "ಜುಲೈ"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "ಆಗಸ್ಟ್"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "ಸೆಪ್ಟೆಂಬರ್"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "ಅಕ್ಟೋಬರ್"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "ನವೆಂಬರ್"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "ಡಿಸೆಂಬರ್"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "ಜನವರಿ."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "ಫೆಬ್ರವರಿ."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "ಆಗಸ್ಟ್."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "ಸೆಪ್ಟೆಂಬರ್."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "ಅಕ್ಟೋಬರ್."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "ನವೆಂಬರ್."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "ಡಿಸೆಂಬರ್."
+
+#: utils/timesince.py:12
+msgid "year"
+msgstr "ವರ್ಷ"
+
+#: utils/timesince.py:13
+msgid "month"
+msgstr "ತಿಂಗಳು"
+
+#: utils/timesince.py:14
+msgid "week"
+msgstr "ವಾರ"
+
+#: utils/timesince.py:15
+msgid "day"
+msgstr "ದಿನ"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgstr "ಘಂಟೆ"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgstr "ನಿಮಿಷ"
+
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "ಅರೇಬಿಕ್"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "ಬೆಂಗಾಲಿ"
+
+#: conf/global_settings.py:41
+msgid "Czech"
+msgstr "ಝೆಕ್"
+
+#: conf/global_settings.py:42
+msgid "Welsh"
+msgstr "ವೆಲ್ಷ್"
+
+#: conf/global_settings.py:43
+msgid "Danish"
+msgstr "ಡ್ಯಾನಿಷ್"
+
+#: conf/global_settings.py:44
+msgid "German"
+msgstr "ಜರ್ಮನ್"
+
+#: conf/global_settings.py:45
+msgid "Greek"
+msgstr "ಗ್ರೀಕ್"
+
+#: conf/global_settings.py:46
+msgid "English"
+msgstr "ಇಂಗ್ಲಿಷ್"
+
+#: conf/global_settings.py:47
+msgid "Spanish"
+msgstr "ಸ್ಪ್ಯಾನಿಷ್"
+
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "ಅರ್ಜೆಂಟೈನಾದ ಸ್ಪ್ಯಾನಿಷ್"
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "ಫಿನ್ನಿಶ್"
+
+#: conf/global_settings.py:50
+msgid "French"
+msgstr "ಫ್ರೆಂಚ್"
+
+#: conf/global_settings.py:51
+msgid "Galician"
+msgstr "ಗ್ಯಾಲಿಶಿಯನ್"
+
+#: conf/global_settings.py:52
+msgid "Hungarian"
+msgstr "ಹಂಗೇರಿಯನ್"
+
+#: conf/global_settings.py:53
+msgid "Hebrew"
+msgstr "ಹೀಬ್ರೂ"
+
+#: conf/global_settings.py:54
+msgid "Icelandic"
+msgstr "ಐಸ್‍ಲ್ಯಾಂಡಿಕ್"
+
+#: conf/global_settings.py:55
+msgid "Italian"
+msgstr "ಇಟಾಲಿಯನ್"
+
+#: conf/global_settings.py:56
+msgid "Japanese"
+msgstr "ಜಪಾನೀಸ್"
+
+#: conf/global_settings.py:57
+msgid "Dutch"
+msgstr "ಡಚ್"
+
+#: conf/global_settings.py:58
+msgid "Norwegian"
+msgstr "ನಾರ್ವೇಜಿಯನ್"
+
+#: conf/global_settings.py:59
+msgid "Brazilian"
+msgstr "ಬ್ರಾಝಿಲಿಯನ್"
+
+#: conf/global_settings.py:60
+msgid "Romanian"
+msgstr "ರೋಮೇನಿಯನ್"
+
+#: conf/global_settings.py:61
+msgid "Russian"
+msgstr "ರಶಿಯನ್"
+
+#: conf/global_settings.py:62
+msgid "Slovak"
+msgstr "ಸ್ಲೋವಾಕ್"
+
+#: conf/global_settings.py:63
+msgid "Slovenian"
+msgstr "ಸ್ಲೋವೇನಿಯನ್"
+
+#: conf/global_settings.py:64
+msgid "Serbian"
+msgstr "ಸೆರ್ಬಿಯನ್"
+
+#: conf/global_settings.py:65
+msgid "Swedish"
+msgstr "ಸ್ವೀಡಿಷ್"
+
+#: conf/global_settings.py:66
+msgid "Tamil"
+msgstr "ತಮಿಳು"
+
+#: conf/global_settings.py:67
+msgid "Turkish"
+msgstr "ಟರ್ಕಿಶ್"
+
+#: conf/global_settings.py:68
+msgid "Ukrainian"
+msgstr "ಯುಕ್ರೇನಿಯನ್"
+
+#: conf/global_settings.py:69
+msgid "Simplified Chinese"
+msgstr "ಸರಳೀಕೃತ ಚೈನೀಸ್"
+
+#: conf/global_settings.py:70
+msgid "Traditional Chinese"
+msgstr "ಸಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್ "
+
+#: core/validators.py:63
+msgid "This value must contain only letters, numbers and underscores."
+msgstr ""
+"ಈ ಬೆಲೆಯು ಕೇವಲ ಅಕ್ಷರಗಳು , "
+"ಅಂಕೆಗಳು ಮತ್ತು ಅಂಡರ್ಸ್ಕೋರ್(_) "
+"ಗಳನ್ನು ಒಳಗೊಂಡಿರಬೇಕು"
+
+#: core/validators.py:67
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"ಈ ಬೆಲೆಯು ಅಕ್ಷರಗಳು , ಅಂಕೆಗಳು , "
+"ಅಡಿಗೆರೆ ಅರ್ಥಾತ್ "
+"ಅಂಡರ್ಸ್ಕೋರ್(_) ,ಅಡ್ಡಗೆರೆ "
+"ಅರ್ಥಾತ್ ಡ್ಯಾಷ್(-) ಮತ್ತು "
+"ಓರೆಗೆರೆ ಅರ್ಥಾತ್ ಸ್ಲ್ಯಾಶ್ (/) "
+"ಗಳನ್ನು ಒಳಗೊಳ್ಳಬಹುದು."
+
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"ಈ ಬೆಲೆಯು ಕೇವಲ ಅಕ್ಷರಗಳು , "
+"ಅಂಕೆಗಳು ಮತ್ತು ಅಂಡರ್ಸ್ಕೋರ್(_) "
+"ಮತ್ತು ಹೈಫನ್(-)ಗಳನ್ನು "
+"ಒಳಗೊಂಡಿರಬೇಕು"
+
+#: core/validators.py:75
+msgid "Uppercase letters are not allowed here."
+msgstr ""
+"ಇಂಗ್ಲೀಷ್ ದೊಡ್ಡಕ್ಷರಗಳನ್ನು "
+"ಇಲ್ಲಿ ಬಳಸುವಂತಿಲ್ಲ"
+
+#: core/validators.py:79
+msgid "Lowercase letters are not allowed here."
+msgstr ""
+"ಇಂಗ್ಲೀಷ್ ಸಣ್ಣಕ್ಷರಗಳನ್ನು "
+"ಇಲ್ಲಿ ಬಳಸುವಂತಿಲ್ಲ"
+
+#: core/validators.py:86
+msgid "Enter only digits separated by commas."
+msgstr ""
+"ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ  ಬೇರ್ಪಟ್ಟ  "
+"ಅಂಕೆಗಳನ್ನು ಮಾತ್ರ ಬರೆಯಿರಿ."
+
+#: core/validators.py:98
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr ""
+"ಇ-ಅಂಚೆಗಳ ವಿಳಾಸಗಳನ್ನು, "
+"ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ "
+"ಬೇರ್ಪಟ್ಟಿರುವಂತೆ ಸೂಚಿಸಿರಿ."
+
+#: core/validators.py:102
+msgid "Please enter a valid IP address."
+msgstr "ಸರಿಯಾದ  IP ವಿಳಾಸ ಬರೆಯಿರಿ"
+
+#: core/validators.py:106
+msgid "Empty values are not allowed here."
+msgstr "ಇಲ್ಲಿ ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ"
+
+#: core/validators.py:110
+msgid "Non-numeric characters aren't allowed here."
+msgstr ""
+"ಅಂಕೆಗಳಲ್ಲದೆ ಯಾವದೇ "
+"ಅಕ್ಷರಗಳನ್ನು ಇಲ್ಲಿ "
+"ಬಳಸುವಂತಿಲ್ಲ"
+
+#: core/validators.py:114
+msgid "This value can't be comprised solely of digits."
+msgstr ""
+"ಈ ಬೆಲೆಯಲ್ಲಿ ಅಂಕೆಗಳಷ್ಟೇ  "
+"ಇರುವಂತಿಲ್ಲ"
+
+#: core/validators.py:119
+msgid "Enter a whole number."
+msgstr "ಪೂರ್ಣಾಂಕವೊಂದನ್ನು ಬರೆಯಿರಿ"
+
+#: core/validators.py:123
+msgid "Only alphabetical characters are allowed here."
+msgstr ""
+"ವರ್ಣಮಾಲೆಯ ಅಕ್ಷರಗಳನ್ನು "
+"ಮಾತ್ರ ಇಲ್ಲಿ ಬಳಸಬಹುದು."
+
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr ""
+"ವರ್ಷವು ೧೯೦೦ ಅಥವಾ "
+"ನಂತರದ್ದಿರಬೇಕು."
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr "ತಪ್ಪು ದಿನಾಂಕ: %s."
+
+#: core/validators.py:146 db/models/fields/__init__.py:415
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+"ಸರಿಯಾದ ದಿನಾಂಕವನ್ನು "
+"ವವವವ-ತಿತಿ-ದಿದಿ ರೀತಿಗೆ "
+"ಹೊಂದುವಂತೆ ಸೂಚಿಸಿರಿ."
+
+#: core/validators.py:151
+msgid "Enter a valid time in HH:MM format."
+msgstr ""
+"HH:MM ರೂಪದಲ್ಲಿ  ಸರಿಯಾದ ಸಮಯವನ್ನು "
+"ಬರೆಯಿರಿ"
+
+#: core/validators.py:155 db/models/fields/__init__.py:477
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+"ಸರಿಯಾದ ದಿನಾಂಕ/ವೇಳೆಯನ್ನು "
+"ವವವವ-ತಿತಿ-ದಿದಿ ಗಗ:ನಿನಿ "
+"ರೀತಿಗೆ ಹೊಂದುವಂತೆ ಸೂಚಿಸಿರಿ."
+
+#: core/validators.py:160
+msgid "Enter a valid e-mail address."
+msgstr ""
+"ಕ್ರಮಬದ್ಧ ವಿ-ವಿಳಾಸವೊಂದನ್ನು "
+"ಇಲ್ಲಿ ಬರೆಯಿರಿ"
+
+#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+"ಯಾವದೇ ಕಡತವನ್ನೂ "
+"ಸಲ್ಲಿಸಲಾಗಿಲ್ಲ.ನಮೂನೆಯ ಮೇಲಿನ "
+"ಸಂಕೇತೀಕರಣ ಬಗೆಯನ್ನು "
+"ಪರೀಕ್ಷಿಸಿ."
+
+#: core/validators.py:176
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"ಸರಿಯಾದ ಚಿತ್ರವನ್ನು ಏರಿಸಿ. "
+"ನೀವು ಏರಿಸಿದ ಕಡತವು ಚಿತ್ರವಲ್ಲ "
+"ಅಥವಾ ಅದು ಕೆಟ್ಟು ಹೋಗಿರುವ "
+"ಚಿತ್ರ. "
+
+#: core/validators.py:183
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr ""
+"%s URL ಸರಿಯಾದ ಚಿತ್ರದೆಡೆಗೆ "
+"ಒಯ್ಯುತ್ತಿಲ್ಲ."
+
+#: core/validators.py:187
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"ದೂರವಾಣಿ ಅಂಕೆಗಳು XXX-XXX-XXXX "
+"ರೀತಿಯಲ್ಲಿರಬೇಕು. \"%s\" "
+"ತಪ್ಪಾಗಿರುತ್ತದೆ."
+
+#: core/validators.py:195
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr ""
+"%s URL ಸರಿಯಾದ ಕ್ವಿಕ್‍ಟೈಮ್ "
+"ದೃಶ್ಯದೆಡೆಗೆ ಒಯ್ಯುತ್ತಿಲ್ಲ."
+
+#: core/validators.py:199
+msgid "A valid URL is required."
+msgstr "ಸರಿಯಾದ URL ಅವಶ್ಯವಿದೆ"
+
+#: core/validators.py:213
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"ಸರಿಯಾದ  HTML ಅವಶ್ಯ. ಇಲ್ಲಿನ "
+"ನಿರ್ದಿಷ್ಟ ತಪ್ಪುಗಳು:\n"
+"%s"
+
+#: core/validators.py:220
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "ತಪ್ಪು XML: %s"
+
+#: core/validators.py:230
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "ತಪ್ಪು URL: %s"
+
+#: core/validators.py:234 core/validators.py:236
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "%s ಈ  URL  ಮುರಿದ ಕೊಂಡಿಯಾಗಿದೆ."
+
+#: core/validators.py:242
+msgid "Enter a valid U.S. state abbreviation."
+msgstr ""
+" ಅಮೇರಿಕೆಯ ಸಂಯುಕ್ತ ಸಂಸ್ಥಾನದ "
+"ರಾಜ್ಯದ ಸರಿಯಾದ "
+"ಸಂಕ್ಷಿಪ್ತರೂಪವನ್ನು ಕೊಡಿ."
+
+#: core/validators.py:256
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgstr ""
+"ನಾಲಿಗೆ ಬಿಗಿ ಹಿಡಿಯಿರಿ! %s  "
+"ಶಬ್ದವನ್ನು ಇಲ್ಲಿ "
+"ಬಳಸುವಂತಿಲ್ಲ."
+"ನಾಲಿಗೆ ಬಿಗಿ ಹಿಡಿಯಿರಿ! %s ಈ "
+"ಶಬ್ದಗಳನ್ನು ಇಲ್ಲಿ "
+"ಬಳಸುವಂತಿಲ್ಲ."
+
+#: core/validators.py:263
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr ""
+"ಈ ಅಂಶವು  '%s' ಅಂಶದೊಂದಿಗೆ "
+"ಹೊಂದಿಕೊಳ್ಳಬೇಕು."
+
+#: core/validators.py:282
+msgid "Please enter something for at least one field."
+msgstr ""
+"ಕನಿಷ್ಠ ಒಂದು ಅಂಶದಲ್ಲಿ "
+"ಏನನ್ನಾದರೂ ಬರೆಯಿರಿ."
+
+#: core/validators.py:291 core/validators.py:302
+msgid "Please enter both fields or leave them both empty."
+msgstr ""
+"ಎರಡೂ ಅಂಶಗಳನ್ನು ಭರತಿ ಮಾಡಿರಿ "
+"ಅಥವಾ ಎರಡನ್ನೂ ಖಾಲಿಯಾಗಿಡಿ."
+
+#: core/validators.py:309
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr ""
+" %(field)s ಇದು  %(value)s ಆಗಿದ್ದರೆ ಈ "
+"ಅಂಶವನ್ನು ಕೊಡಲೇಬೇಕು"
+
+#: core/validators.py:321
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr ""
+" %(field)s ಇದು  %(value)s ಆಗಿಲ್ಲದಿದ್ದರೆ ಈ "
+"ಅಂಶವನ್ನು ಕೊಡಲೇಬೇಕು"
+
+#: core/validators.py:340
+msgid "Duplicate values are not allowed."
+msgstr ""
+"ಪಡಿಯಚ್ಚುಬೆಲೆಗಳಿಗೆ "
+"ಅನುಮತಿಯಿಲ್ಲ"
+
+#: core/validators.py:363
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "ಈ ಬೆಲೆಯು %sದ ಘಾತವಾಗಿರಬೇಕು."
+
+#: core/validators.py:374
+msgid "Please enter a valid decimal number."
+msgstr ""
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆ ಬರೆಯಿರಿ"
+
+#: core/validators.py:378
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+"Please enter a valid decimal number with at most %s total digits."
+msgstr ""
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆಯನ್ನು - ಹೆಚ್ಚೆಂದರೆ  "
+"ಒಟ್ಟು %s ಅಂಕೆ ಇರುವಂತೆ - "
+"ಬರೆಯಿರಿ."
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆಯನ್ನು - ಹೆಚ್ಚೆಂದರೆ  "
+"ಒಟ್ಟು %s ಅಂಕೆಗಳು ಇರುವಂತೆ - "
+"ಬರೆಯಿರಿ."
+
+#: core/validators.py:381
+#, python-format
+msgid ""
+"Please enter a valid decimal number with a whole part of at most %s digit."
+"Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr ""
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆಯನ್ನು - ಪೂರ್ಣಾಂಕ ಭಾಗವು "
+"ಹೆಚ್ಚೆಂದರೆ  ಒಟ್ಟು %s ಅಂಕೆ "
+"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆಯನ್ನು - ಪೂರ್ಣಾಂಕ ಭಾಗವು "
+"ಹೆಚ್ಚೆಂದರೆ  ಒಟ್ಟು %s ಅಂಕೆಗಳು "
+"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
+
+#: core/validators.py:384
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr ""
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆಯನ್ನು - ದಶಮಾಂಶ ಭಾಗವು "
+"ಹೆಚ್ಚೆಂದರೆ  ಒಟ್ಟು %s ಸ್ಥಾನ "
+"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ ದಶಮಾನ "
+"ಸಂಖ್ಯೆಯನ್ನು - ದಶಮಾಂಶ ಭಾಗವು "
+"ಹೆಚ್ಚೆಂದರೆ   %s ಸ್ಥಾನಗಳು  "
+"ಇರುವಂತೆ - ಬರೆಯಿರಿ."
+
+#: core/validators.py:394
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+"ನೀವು ಏರಿಸಿದ ಕಡತವು ಕನಿಷ್ಟ %s "
+"ಬೈಟ್‍ಗಳಷ್ಟು ದೊಡ್ಡದಿದೆ ಎಂದು "
+"ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ."
+
+#: core/validators.py:395
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+"ನೀವು ಏರಿಸಿದ ಕಡತವು %s "
+"ಬೈಟ್‍ಗಳಿಗಿಂತ ಹೆಚ್ಚಿರದ ಹಾಗೆ "
+"ನೋಡಿಕೊಳ್ಳಿ."
+
+#: core/validators.py:412
+msgid "The format for this field is wrong."
+msgstr "ಈ ಅಂಶದ ಸ್ವರೂಪವು ತಪ್ಪಾಗಿದೆ"
+
+#: core/validators.py:427
+msgid "This field is invalid."
+msgstr "ಈ ಅಂಶವು ತಪ್ಪಾಗಿದೆ"
+
+#: core/validators.py:463
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr ""
+" %s ದಿಂದ ಏನನ್ನೂ "
+"ಹೊರತೆಗೆದುಕೊಳ್ಳಲಾಗಲಿಲ್ಲ."
+
+#: core/validators.py:466
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+" %(url)s ಈ  URL ತಪ್ಪು ಒಳವಿಷಯ-ಬಗೆಯ "
+"ಶಿರೋ‍ಭಾಗ '%(contenttype)s' ಅನ್ನು "
+"ಮರಳಿಸಿತು."
+
+#: core/validators.py:499
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"ದಯವಿಟ್ಟು  %(line)s - ಸಾಲಿನಿಂದ "
+"ಮುಚ್ಚಿರದ %(tag)s ಟ್ಯಾಗ್ ಅನ್ನು "
+"ಮುಚ್ಚಿರಿ . (ಸಾಲು  \"%(start)s\" ಎಂದು "
+"ಆರಂಭವಾಗುತ್ತದೆ.)"
+
+#: core/validators.py:503
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+" %(line)s ಸಾಲಿನಲ್ಲಿ ಆರಂಭವಾಗುವ ಕೆಲ "
+"ಪಠ್ಯಭಾಗವನ್ನು ಆ ಸಂದರ್ಭದಲ್ಲಿ "
+"ಬಳಸಲಾಗದು.(ಸಾಲು  \"%(start)s\" ಎಂದು "
+"ಆರಂಭವಾಗುತ್ತದೆ.)"
+
+#: core/validators.py:508
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+" %(line)sನೆ ಸಾಲಿನಲ್ಲಿರುವ \"%(attr)s\"  "
+"ತಪ್ಪು ಗುಣಧರ್ಮವಾಗಿದೆ . (ಸಾಲು "
+"\"%(start)s\" ಎಂದು ಆರಂಭವಾಗುತ್ತದೆ.)"
+
+#: core/validators.py:513
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+" %(line)s ನೆ ಸಾಲಿನಲ್ಲಿರುವ \"<%(tag)s>\"  "
+"ತಪ್ಪು ಟ್ಯಾಗ್ ಆಗಿದೆ . (ಸಾಲು "
+"\"%(start)s\" ಎಂದು ಆರಂಭವಾಗುತ್ತದೆ.)"
+
+#: core/validators.py:517
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+" %(line)s ನೆ ಸಾಲಿನಲ್ಲಿರುವ  ಟ್ಯಾಗ್ "
+"ಗೆ ಅಗತ್ಯವಾದ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು "
+"ಗುಣಧರ್ಮಗಳು ಕಾಣೆಯಾಗಿವೆ . "
+"(ಸಾಲು \"%(start)s\" ಎಂದು "
+"ಆರಂಭವಾಗುತ್ತದೆ.)"
+
+#: core/validators.py:522
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+" %(line)s ನೆ ಸಾಲಿನಲ್ಲಿರುವ  \"%(attr)s\" ಗೆ "
+"ತಪ್ಪು ಬೆಲೆ ಇದೆ. (ಸಾಲು \"%(start)s\" "
+"ಎಂದು ಆರಂಭವಾಗುತ್ತದೆ.)"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr ""
+" %(verbose_name)s ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
+"ನಿರ್ಮಿಸಲಾಯಿತು."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr ""
+" %(verbose_name)s ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ "
+"ಮಾರ್ಪಡಿಸಲಾಯಿತು."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr ""
+" %(verbose_name)s ಅನ್ನು "
+"ತೆಗೆದುಹಾಕಲಾಯಿತು"
+
+#: db/models/manipulators.py:302
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr ""
+"ಕೊಟ್ಟಿರುವ %(field)sಗೆ  ಈ %(type)s  "
+"ಹೊಂದಿರುವ %(object)s ಈಗಾಗಲೇ ಇದೆ."
+
+#: db/models/fields/__init__.py:40
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr ""
+"ಈ %(fieldname)s ಹೊಂದಿರುವ %(optname)s ಈಗಾಗಲೇ "
+"ಇದೆ."
+
+#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
+#: forms/__init__.py:346
+msgid "This field is required."
+msgstr "ಈ ಅಂಶ ಅಗತ್ಯ."
+
+#: db/models/fields/__init__.py:340
+msgid "This value must be an integer."
+msgstr ""
+"ಈ ಬೆಲೆಯು ಪೂರ್ಣ ಸಂಖ್ಯೆ ಇರಬೇಕು."
+
+#: db/models/fields/__init__.py:372
+msgid "This value must be either True or False."
+msgstr ""
+"ಈ ಬೆಲೆಯು  ಹೌದು ಅಥವಾ ಇಲ್ಲ "
+"ಇರಬೇಕು."
+
+#: db/models/fields/__init__.py:388
+msgid "This field cannot be null."
+msgstr ""
+"ಈ ಅಂಶವನ್ನು ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ."
+
+#: db/models/fields/__init__.py:571
+msgid "Enter a valid filename."
+msgstr ""
+"ಸರಿಯಾದ ಕಡತದ ಹೆಸರನ್ನು "
+"ಬರೆಯಿರಿ"
+
+#: db/models/fields/related.py:51
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "ಸರಿಯಾದ %s ಅನ್ನು ಬರೆಯಿರಿ ."
+
+#: db/models/fields/related.py:618
+msgid "Separate multiple IDs with commas."
+msgstr ""
+"ಅನೇಕ ಐಡಿಗಳನ್ನು "
+"ಅಲ್ಪವಿರಾಮ(,)ಗಳಿಂದ "
+"ಬೇರ್ಪಡಿಸಿರಿ"
+
+#: db/models/fields/related.py:620
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚನ್ನು "
+"ಆಯ್ದುಕೊಳ್ಳಲು ಮ್ಯಾಕ್ ಗಣಕದ "
+"ಮೇಲೆ  \"ಕಂಟ್ರೋಲ್\", ಅಥವಾ "
+"\"ಕಮ್ಯಾಂಡ್\" ಅನ್ನು ಒತ್ತಿ "
+"ಹಿಡಿಯಿರಿ."
+
+#: db/models/fields/related.py:664
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr ""
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ %(self)s "
+"ಐಡಿಗಳನ್ನು ಸೂಚಿಸಿರಿ . ಈಗ "
+"ಸೂಚಿಸಿದ          %(value)r   ತಪ್ಪಾಗಿದೆ."
+"ದಯವಿಟ್ಟು ಸರಿಯಾದ %(self)s "
+"ಐಡಿಗಳನ್ನು ಸೂಚಿಸಿರಿ . ಈಗ "
+"ಸೂಚಿಸಿದ          %(value)s ತಪ್ಪಾಗಿವೆ"
+
+#: forms/__init__.py:381
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgstr ""
+"ನಿಮ್ಮ ಗದ್ಯ %s ಅಕ್ಷರಕ್ಕಿಂತ "
+"ಕಡಿಮೆ ಇರುವಂತೆ ಜಾಗ್ರತೆ ವಹಿಸಿ."
+"ನಿಮ್ಮ ಗದ್ಯ %s ಅಕ್ಷರಗಳಿಗಿಂತ "
+"ಕಡಿಮೆ ಇರುವಂತೆ ಜಾಗ್ರತೆ ವಹಿಸಿ."
+
+#: forms/__init__.py:386
+msgid "Line breaks are not allowed here."
+msgstr ""
+" ಇಲ್ಲಿ "
+"ಸಾಲುಗಳನ್ನುತುಂಡರಿಸುವಂತಿಲ್ಲ"
+
+#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr ""
+"ಸರಿಯಾದ ಆಯ್ಕೆಯನ್ನು "
+"ಆಯ್ದುಕೊಳ್ಳಿರಿ.'%(data)s' %(choices)s "
+"ನಲ್ಲಿಲ್ಲ."
+
+#: forms/__init__.py:663
+msgid "The submitted file is empty."
+msgstr "ಸಲ್ಲಿಸಲಾದ ಕಡತ ಖಾಲಿ ಇದೆ."
+
+#: forms/__init__.py:719
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr ""
+"-೩೨,೭೬೮ ಹಾಗೂ ೩೨,೭೬೭ ರ ನಡುವಿನ "
+"ಪೂರ್ಣ ಸಂಖ್ಯೆ ಕೊಡಿ."
+
+#: forms/__init__.py:729
+msgid "Enter a positive number."
+msgstr "ಧನಾತ್ಮಕ ಸಂಖ್ಯೆ ಕೊಡಿ."
+
+#: forms/__init__.py:739
+msgid "Enter a whole number between 0 and 32,767."
+msgstr ""
+"೦ ಮತ್ತು ೩೨,೭೬೭ ರ ನಡುವಿನ ಒಂದು "
+"ಪೂರ್ಣಾಂಕ ಕೊಡಿ"
+
+#: template/defaultfilters.py:401
+msgid "yes,no,maybe"
+msgstr "ಹೌದು,ಇಲ್ಲ,ಇರಬಹುದು"
+

Added: vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/kn/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,116 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django-kn 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-09-25 15:43+0200\n"
+"PO-Revision-Date: 2007-01-08 20:22+0530\n"
+"Last-Translator: Kannada Localization Team <translation at sampada.info>\n"
+"Language-Team: Kannada <translation at sampada.info>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "ಲಭ್ಯ %s "
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "ಎಲ್ಲವನ್ನೂ  ಆಯ್ದುಕೊಳ್ಳಿ"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "ಸೇರಿಸಿ"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "ತೆಗೆದು ಹಾಕಿ"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "%s ಆಯ್ದುಕೊಳ್ಳಲಾಗಿದೆ"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+"ನಿಮ್ಮ ಆಯ್ಕೆ(ಗಳ)ನ್ನು ಆರಿಸಿ "
+"ಮತ್ತು ಕ್ಲಿಕ್ಕಿಸಿ"
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "ಎಲ್ಲವನ್ನೂ  ತೆರವುಗೊಳಿಸಿ"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"ಜನವರಿ ಫೆಬ್ರುವರಿ ಮಾರ್ಚ್ "
+"ಎಪ್ರಿಲ್ ಮೇ ಜೂನ್ ಜುಲೈ ಆಗಸ್ಟ್ "
+"ಸೆಪ್ಟೆಂಬರ್ ನವೆಂಬರ್ ಡಿಸೆಂಬರ್"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+"ರವಿವಾರ ಸೋಮವಾರ ಮಂಗಳವಾರ "
+"ಬುಧವಾರ ಗುರುವಾರ ಶುಕ್ರವಾರ "
+"ಶನಿವಾರ"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "ರ ಸೋ ಮ ಬು ಗು ಶು ಶ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "ಈಗ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "ಗಡಿಯಾರ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "ಸಮಯವೊಂದನ್ನು ಆರಿಸಿ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "ಮಧ್ಯರಾತ್ರಿ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "ಬೆಳಗಿನ ೬ ಗಂಟೆ "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "ಮಧ್ಯಾಹ್ನ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "ರದ್ದುಗೊಳಿಸಿ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "ಈ ದಿನ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "ಪಂಚಾಂಗ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "ನಿನ್ನೆ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "ನಾಳೆ"

Added: vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/lv/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2326 @@
+# Django Latvian translation.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# ARVIS BICKOVSKIS <viestards.lists at gmail.com>, 2006.
+#
+# , fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-15 10:47+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <viestards.lists at gmail.com>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: db/models/manipulators.py:305
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr ""
+
+#: db/models/manipulators.py:306 contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339
+msgid "and"
+msgstr "un"
+
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "LÅ«dzu ievadiet korektu %s"
+
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Atdaliet vairākus ID ar komatiem."
+
+#: 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:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
+#: oldforms/__init__.py:352 newforms/fields.py:78 newforms/fields.py:373
+#: newforms/fields.py:449 newforms/fields.py:460
+msgid "This field is required."
+msgstr "Šis lauks ir obligāts."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Vērtībai ir jābūt veselam skaitlim."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Vērtībai jābūt True vai False."
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Šis lauks nevar būt null"
+
+#: db/models/fields/__init__.py:454 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Ievadiet korektu datumu YYYY-MM-DD formātā."
+
+#: db/models/fields/__init__.py:521 core/validators.py:156
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Ievadiet korektu datumu/laiku YYYY-MM-DD HH:MM formātā."
+
+#: db/models/fields/__init__.py:625
+msgid "Enter a valid filename."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr ""
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr ""
+
+#: conf/global_settings.py:41
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:42
+msgid "Welsh"
+msgstr ""
+
+#: conf/global_settings.py:43
+msgid "Danish"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "German"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Greek"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "English"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Spanish"
+msgstr ""
+
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr ""
+
+#: conf/global_settings.py:50
+msgid "French"
+msgstr ""
+
+#: conf/global_settings.py:51
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:52
+msgid "Hungarian"
+msgstr ""
+
+#: conf/global_settings.py:53
+msgid "Hebrew"
+msgstr ""
+
+#: conf/global_settings.py:54
+msgid "Icelandic"
+msgstr ""
+
+#: conf/global_settings.py:55
+msgid "Italian"
+msgstr ""
+
+#: conf/global_settings.py:56
+msgid "Japanese"
+msgstr ""
+
+#: conf/global_settings.py:57
+msgid "Dutch"
+msgstr ""
+
+#: conf/global_settings.py:58
+msgid "Norwegian"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Polish"
+msgstr ""
+
+#: conf/global_settings.py:60
+msgid "Brazilian"
+msgstr ""
+
+#: conf/global_settings.py:61
+msgid "Romanian"
+msgstr ""
+
+#: conf/global_settings.py:62
+msgid "Russian"
+msgstr ""
+
+#: conf/global_settings.py:63
+msgid "Slovak"
+msgstr ""
+
+#: conf/global_settings.py:64
+msgid "Slovenian"
+msgstr ""
+
+#: conf/global_settings.py:65
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:66
+msgid "Swedish"
+msgstr ""
+
+#: conf/global_settings.py:67
+msgid "Tamil"
+msgstr ""
+
+#: conf/global_settings.py:68
+msgid "Turkish"
+msgstr ""
+
+#: conf/global_settings.py:69
+msgid "Ukrainian"
+msgstr ""
+
+#: conf/global_settings.py:70
+msgid "Simplified Chinese"
+msgstr ""
+
+#: conf/global_settings.py:71
+msgid "Traditional Chinese"
+msgstr ""
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "gads"
+msgstr[1] "gadi"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "mēnesis"
+msgstr[1] "mēneši"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "nedēļa"
+msgstr[1] "nedēļas"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "diena"
+msgstr[1] "dienas"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "stunda"
+msgstr[1] "stundas"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minūte"
+msgstr[1] "minūtes"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Pirmdiena"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Otrdiena"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Trešdiena"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Ceturdiena"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Piektdiena"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Sestdiena"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Svētdiena"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Janvāris"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Februāris"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Marts"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Aprīlis"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Maijs"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "JÅ«nijs"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "JÅ«lijs"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Augusts"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Septembris"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Oktobris"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembris"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Decembris"
+
+#: 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 "mai"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "jūn"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "jūl"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "aug"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "sep"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "okt"
+
+#: 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/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr ""
+
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] ""
+msgstr[1] ""
+
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "Pārnešana jaunā rindā šeit nav atļauta."
+
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr ""
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:150
+#: newforms/widgets.py:162
+msgid "Unknown"
+msgstr "Nezināms"
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:162
+msgid "Yes"
+msgstr "Jā"
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:162
+msgid "No"
+msgstr "NÄ“"
+
+#: oldforms/__init__.py:667 core/validators.py:173 core/validators.py:442
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "Jūsu norādītais fails ir tukšs."
+
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Ievadiet veselu skaitli intervālā no -32,768 līdz 32,767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Ievadiet pozitīvu skaitli."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Ievadiet veselu skaitli intervāla starp 0 un 32,767."
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "sesijas atslēga"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "sesijas dati"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "beigu datums"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "sesija"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "sesijas"
+
+#: 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 ""
+"Izskatās, ka Jūsu pārlūks neatbalsta cookies. Cookies ir obligātas, lai "
+"pieslēgtos."
+
+#: 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 ""
+"Lūdzu ievadiet lietotājvārdu un paroli. Atceraties ka abi lauki ir "
+"reģistrjūtīgi."
+
+#: 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
+#, fuzzy
+msgid "Logged out"
+msgstr "Izlogoties"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "nosaukums"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "kods"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "tiesība"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "tiesības"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "grupa"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "grupas"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "lietotāja vārds"
+
+#: 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 "vārds"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "uzvārds"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "e-pasta adrese"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "parole"
+
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "personāla statuss"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+"Atzīmējiet, ja vēlaties, lai lietotājs var pieslēgties administrācijas lapā."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "aktīvs"
+
+#: contrib/auth/models.py:96
+#, fuzzy
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Atzīmējiet, ja vēlaties, lai lietotājs var pieslēgties administrācijas lapā."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "superlietotāja statuss"
+
+#: 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 "pēdējoreiz pieslēdzies"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "datums, kad pievienojies"
+
+#: 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 ""
+"Papildus manuāli piešķirtajām atļaujām, šis lietotājs papildus iegūs visas "
+"atļaujas, kas piešķirtas grupām, kurās lietotājs atrodas."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "lietotāja atļaujas"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "lietotājs"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "lietotāji"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Personīgā informācija"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Atļaujas"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Svarīgi datumi"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Grupas"
+
+#: contrib/auth/models.py:258
+msgid "message"
+msgstr "ziņojums"
+
+#: contrib/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "python modeļa klases nosaukums"
+
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr ""
+
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "satura tips"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "novirzīt(redirect) no"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Tam jābūt absolūtajam ceļam, ieskaitot domēna vārdu. Piemēram: '/events/"
+"search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "novirzīt(redirect) uz"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Tas ir vai nu absolūtais ceļš (kā pirms tam) vai pilnais URL, kas sākas ar "
+"'http://'."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "novirzīt"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "novirzījumi"
+
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
+msgid "URL"
+msgstr ""
+
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Piemēram: '/about/contact/'. Pārliecinieties, ka esat ievietojuši sākuma un "
+"beigu slīpsvītras."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "virsraksts"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "saturs"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "ieslēgt komentārus"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "Å¡ablona nosaukums"
+
+#: contrib/flatpages/models.py:13
+#, fuzzy
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Piemēram: 'flatpages/contact_page'. Ja tas nav norādīts, sistēma lietos  "
+"'flatpages/default'."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "reģistrācija obligāta"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Ja tas ir atzīmēts, tikai lietotāji, kas ir pieslēgušies sistēmās redzēs šo "
+"lapu."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "vienkārša lapa"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "vienkāršas lapas"
+
+#: contrib/comments/models.py:67 contrib/comments/models.py:166
+msgid "object ID"
+msgstr "objekta ID"
+
+#: contrib/comments/models.py:68
+msgid "headline"
+msgstr "virsraksts"
+
+#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:167
+msgid "comment"
+msgstr "komentārs"
+
+#: contrib/comments/models.py:70
+msgid "rating #1"
+msgstr "reitings #1"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "reitings #2"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "reitings #3"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "reitings #4"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "reitings #5"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "reitings #6"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "reitings #7"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "reitings #8"
+
+#: contrib/comments/models.py:82
+msgid "is valid rating"
+msgstr "korekts reitings"
+
+#: contrib/comments/models.py:83 contrib/comments/models.py:169
+msgid "date/time submitted"
+msgstr "ievietošanas datums/laiks"
+
+#: contrib/comments/models.py:84 contrib/comments/models.py:170
+msgid "is public"
+msgstr "publisks"
+
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
+msgid "IP address"
+msgstr "IP adrese"
+
+#: contrib/comments/models.py:86
+msgid "is removed"
+msgstr "idzēsts"
+
+#: 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 ""
+"Atķeksējiet, ja komentārs ir neatbilstošs. Paziņojums A \"Šis komentārs ir "
+"izdzēsts\" tiks parādīts tai vietā."
+
+#: contrib/comments/models.py:91
+msgid "comments"
+msgstr "komentāri"
+
+#: contrib/comments/models.py:131 contrib/comments/models.py:207
+msgid "Content object"
+msgstr "Satura objekts"
+
+#: 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 ""
+"Pievienojis  %(user)s, %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "personas vārds"
+
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "ip adrese"
+
+#: contrib/comments/models.py:173
+msgid "approved by staff"
+msgstr "apstiprinājusi administrācija"
+
+#: contrib/comments/models.py:176
+msgid "free comment"
+msgstr "brīvais komentārs"
+
+#: contrib/comments/models.py:177
+msgid "free comments"
+msgstr "brīvie komentāri"
+
+#: contrib/comments/models.py:233
+msgid "score"
+msgstr "rezultāts"
+
+#: contrib/comments/models.py:234
+msgid "score date"
+msgstr "rezultāta datums"
+
+#: contrib/comments/models.py:237
+msgid "karma score"
+msgstr "karmas rezultāts"
+
+#: contrib/comments/models.py:238
+msgid "karma scores"
+msgstr "karmas rezultāti"
+
+#: contrib/comments/models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "%(score)d reitingu publicējis %(user)s"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Šo komentāru atzīmējis %(user)s:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/models.py:265
+msgid "flag date"
+msgstr "atzīmēšanas datums"
+
+#: contrib/comments/models.py:268
+msgid "user flag"
+msgstr "lietotāja atzīme"
+
+#: contrib/comments/models.py:269
+msgid "user flags"
+msgstr "lietotāja atzīmes"
+
+#: contrib/comments/models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "Atzīmējis %r"
+
+#: contrib/comments/models.py:278
+msgid "deletion date"
+msgstr "dzēšanas datums"
+
+#: contrib/comments/models.py:280
+msgid "moderator deletion"
+msgstr "moderācijas dzēšana"
+
+#: contrib/comments/models.py:281
+msgid "moderator deletions"
+msgstr "moderācijas dzēšanas"
+
+#: contrib/comments/models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "Moderācijas dzēšana, veicis %r"
+
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:17
+msgid "Username:"
+msgstr "Lietotāja vārds:"
+
+#: 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 "Izlogoties"
+
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Parole:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Esat aizmirsis savu paroli?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Reitings"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Pieprasīts"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Neobligāts"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Ievietojiet fotogrāfiju"
+
+#: contrib/comments/templates/comments/form.html:28
+#: contrib/comments/templates/comments/freeform.html:5
+msgid "Comment:"
+msgstr "Komentārs:"
+
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
+msgid "Preview comment"
+msgstr "Pirmsskatīt komentāru"
+
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Jūsu vārds:"
+
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Anonīmie lietotāji nedrīkst balsot"
+
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "Invalīds komentāru ID"
+
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "Nedrīkst balsot par sevi"
+
+#: contrib/comments/views/comments.py:27
+msgid ""
+"This rating is required because you've entered at least one other rating."
+msgstr "Šis reiting ir obligāts jo Jūs ievietojāt vismaz vienu citu reitingu."
+
+#: 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] ""
+"Šo komentāru ir ievietojis lietotājs, kas ievietojis mazāk kā %(count)s "
+"komentāru:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Šo komentāru ir ievietojis lietotājs, kas ievietojis mazāk kā %(count)s "
+"komentārus:\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 ""
+"Šo komentāru ieviejis paviršs lietotājs:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Atļauti tikai POST izsaukumi"
+
+#: contrib/comments/views/comments.py:192
+#: contrib/comments/views/comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Viens vai vairāki pieprasītie lauki netika ievadīti"
+
+#: contrib/comments/views/comments.py:196
+#: contrib/comments/views/comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr "Kāds ir iejaucies komentāru formā (drošības traucējums)"
+
+#: 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 ""
+"Komentāru forma ir nekorekts 'target' parametrs -- objekta ID bija nepareizs"
+
+#: contrib/comments/views/comments.py:257
+#: contrib/comments/views/comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr "Komentāru forma nenodrošināja 'preview' vai 'post'"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "domēna vārds"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "izvadāmais vārds"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "saits"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "saiti"
+
+#: contrib/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "Visi"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "Jebkuršs datums"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "Å odien"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "Pēdējās 7 dienas"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "Šomēnes"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "Å ogad"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "darbības laiks"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "objekta id"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "objekta attēlojunms"
+
+#: contrib/admin/models.py:21
+msgid "action flag"
+msgstr "darbības atzīme"
+
+#: contrib/admin/models.py:22
+msgid "change message"
+msgstr "momainīt paziņojumu"
+
+#: contrib/admin/models.py:25
+msgid "log entry"
+msgstr "žurnāla ieraksts"
+
+#: contrib/admin/models.py:26
+msgid "log entries"
+msgstr "žurnāla ieraksti"
+
+#: contrib/admin/templatetags/admin_list.py:238
+msgid "All dates"
+msgstr "Visi datumi"
+
+#: 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 "Sākums"
+
+#: 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 "Dokumentācija"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Grāmatzīmes"
+
+#: 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 "Paroles maiņa"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "Dokumentācijas grāmatzīmes"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "Dokumentācija šai lapai"
+
+#: 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 ""
+"Pārvieto jūs no jebkuras lapas dokumentācijā uz skatu, kas ģenerē šo lapu."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "Parādīt objekta ID"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Parāda content-type un unikālo ID lapām, kas atspoguļo vientuļu objektu."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "Labot šo objektu (patreizējā logā)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+"Pāriet uz admininstrācijas lapu tām lapām, kas atspoguļo vientuļu objektu."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "Labot šo lapu (jaunā logā)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Tāpat kā iepriekš, tikai atver administrācijas lapu jaunā logā."
+
+#: contrib/admin/templates/admin/submit_line.html:3
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+msgid "Delete"
+msgstr "Dzēst"
+
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "Saglabāt kā jaunu"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "Saglabāt un pievienot vēl vienu"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "Saglabāt un turpināt labošanu"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "Saglabāt"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Servera kļūda"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Servera kļūda (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Servera kļūda <em>(500)</em>"
+
+#: 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 ""
+"Ir notikusi kļūda. Tas ir paziņots saita administratoriem ar e-pasta "
+"starpniecību un visdrīzākajā laikā tiks izlabots. Paldies par sapratni."
+
+#: contrib/admin/templates/admin/filter.html:2
+#, fuzzy, python-format
+msgid " By %(filter_title)s "
+msgstr "PÄ“c %(title)s "
+
+#: 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 "Aiziet!"
+
+#: 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 "VÄ“sture"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Datums/laiks"
+
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "User"
+msgstr "Lietotājs"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "darbība"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Šim objektam nav izmaiņu vēsture. Tas visdrīzāk nav pievienots izmantojot "
+"administrācijas saitu."
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, fuzzy, 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 ""
+"Izdzēšot objektu %(object_name)s '%(object)s' tiks dzēsti visi saistītie "
+"objekti , bet Jums nav tiesību dzēst sekojošus objektu tipus:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:21
+#, fuzzy, 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 ""
+"Vai esat pārliecināts, ka vēlaties dzēst %(object_name)s \"%(object)s\"? "
+"Tiks dzēsti sekojoši objekti:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "Jā, es esmu pārliecināts"
+
+#: 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 "Pievienot %(name)s"
+
+#: contrib/admin/templates/admin/change_form.html:15
+#: contrib/admin/templates/admin/index.html:28
+msgid "Add"
+msgstr "Pievienot"
+
+#: contrib/admin/templates/admin/change_form.html:22
+msgid "View on site"
+msgstr "Apskatīt saitā"
+
+#: 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] "Lūdzu izlabojiet kļūdu zemāk"
+msgstr[1] "Lūdzu izlabojiet kļūdas zemāk"
+
+#: contrib/admin/templates/admin/change_form.html:50
+msgid "Ordering"
+msgstr "Sakārtošana"
+
+#: contrib/admin/templates/admin/change_form.html:53
+msgid "Order:"
+msgstr "Sakārtojums:"
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "Sveicināti,"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Lapa nav atrasta"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Mēs atvainojamies, bet pieprasītā lapa nevar tikt atrasta."
+
+#: contrib/admin/templates/admin/login.html:25
+#: contrib/admin/views/decorators.py:24
+msgid "Log in"
+msgstr "Pieslēdzieties"
+
+#: contrib/admin/templates/admin/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Modeļi, kas pieejami %(name)s aplikācijā."
+
+#: contrib/admin/templates/admin/index.html:18
+#, fuzzy, python-format
+msgid "%(name)s"
+msgstr "Pievienot %(name)s"
+
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
+msgstr "Izmainīt"
+
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
+msgstr "Jums nav tiesības jebko labot."
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
+msgstr "Nesenās darbības"
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
+msgstr "Manas darbības"
+
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
+msgstr "Nav pieejams"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django saita administrācija"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django administrēšana"
+
+#: 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
+#, fuzzy
+msgid "Username"
+msgstr "Lietotāja vārds:"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#, fuzzy
+msgid "Password"
+msgstr "Parole:"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#, fuzzy
+msgid "Password (again)"
+msgstr "Paroles maiņa"
+
+#: 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 <strong>%(username)s</strong>."
+msgstr ""
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Patreiz:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Nomainīt:"
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Datums:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Laiks:"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Paldies par pavadīto laiku māja lapā."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Pieslēgties vēlreiz"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+"Jūs esat saņēmuši šo e-pastu sakarā ar Jūsu pieprasīto paroles pārstatīšanu"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "Jūsu lietotāja kontam %(site_name)s saitā"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "JÅ«su jaunais parole ir: %(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 "Jūs vienmēr varat nomainīt šo paroli aizejot uz šo lapu:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Jūsu lietotājvārds, ja gadījumā Jūs esat to aizmirsis:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Paldies par mūsu saita lietošanu!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "%(site_name)s komanda"
+
+#: 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 "Paroles pārstatīšana(reset)"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Paroles pārstatīšana sekmīga"
+
+#: 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 ""
+"Mēs aizsūtījām pa e-pastu jaunu paroli, ko Jūs esat apstiprinājis. Jūs to "
+"drīzumā saņemsiet."
+
+#: 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 "Paroles maiņa"
+
+#: 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 ""
+"Drošības nolūkos ievadiet veco paroli un pēc tam ievadiet Jūsu jauno paroli "
+"divreiz lai mēs varētu pārbaudīt, vai tā ir uzrakstīta pareizi."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Vecā parole:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Jaunā parole:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Apstiprināt paroli:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Nomainīt manu paroli"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Paroles nomaiņa sekmīga"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Jūsu parole ir nomainīta."
+
+#: 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 ""
+"Esat aizmirsuši savu paroli? Ievadiet e-pasta adresi zemāk un mēs "
+"pārstatīsim Jūsu paroli un aizsūtīsim jaunu pa e-pastu."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-pasta adrese:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Paroles pārstatīšana"
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Saita administrācija"
+
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" pievienots sekmīgi."
+
+#: 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 "Jūs varat labot to atkal zemāk."
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr "Jūs varat pievienot vēl vienu %s zemāk."
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "Pievienot %s"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "Pievienots %s."
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "Izmainīts %s."
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "Izdzēsts %s"
+
+#: contrib/admin/views/main.py:342
+msgid "No fields changed."
+msgstr "Neviens lauks nav izmainīts"
+
+#: contrib/admin/views/main.py:345
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "%(name)s \"%(obj)s\" nomainīts sekmīgi."
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" pievienots sekmīgi. Jūs to varat regiģēt zemāk."
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "Izmainīt %s"
+
+#: contrib/admin/views/main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr ""
+
+#: contrib/admin/views/main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr ""
+
+#: contrib/admin/views/main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" sekmīgi izdzēsts."
+
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "Vai esat pārliecināts?"
+
+#: contrib/admin/views/main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "Izmainīt vēsturi: %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "Izvēlēties %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "Izvēlēties %s lai izmainītu"
+
+#: contrib/admin/views/main.py:758
+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 ""
+"Lūdzu pieslēdzieties vēlreiz, jo jūsu sesija ir novecojusi. Neuztraucieties: "
+"Jūsu ievadītie dati ir saglabāti."
+
+#: 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 ""
+"Izskatās, ka Jūsu pārlūks neatbalsta sīkdatnes (cookies). Lūdzu ieslēdziet "
+"sīkdatņu atbalstu, pārlādējiet lapu un mēģiniet vēlreiz."
+
+#: contrib/admin/views/decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Lietotājvārdi nevar saturēt simbolu '@'."
+
+#: contrib/admin/views/decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "Jūsu e-pasta adrese nav jūsu lietotājvārds. Lietojiet '%s' tā vietā."
+
+#: 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
+#, fuzzy, python-format
+msgid "App %r not found"
+msgstr "Lapa nav atrasta"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr ""
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr ""
+
+#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
+#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
+msgid "model:"
+msgstr ""
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr ""
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr ""
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr ""
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
+#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
+msgid "Integer"
+msgstr "Vesels skaitlis"
+
+#: contrib/admin/views/doc.py:292
+msgid "Boolean (Either True or False)"
+msgstr "Boolean (Pareizs vai Nepareizs)"
+
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "Virkne (līdz pat %(maxlength)s)"
+
+#: contrib/admin/views/doc.py:294
+msgid "Comma-separated integers"
+msgstr "Ar komatu atdalīti veselie skaitļi"
+
+#: contrib/admin/views/doc.py:295
+msgid "Date (without time)"
+msgstr "Datums (bez laika)"
+
+#: contrib/admin/views/doc.py:296
+msgid "Date (with time)"
+msgstr "Datums (ar laiku)"
+
+#: contrib/admin/views/doc.py:297
+msgid "E-mail address"
+msgstr "E-pasta adrese"
+
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
+msgid "File path"
+msgstr "Faila ceļš"
+
+#: contrib/admin/views/doc.py:300
+msgid "Decimal number"
+msgstr "Decimāls skaitlis"
+
+#: contrib/admin/views/doc.py:306
+msgid "Boolean (Either True, False or None)"
+msgstr "Loģiskais (Pareizs vai Nepareizs)"
+
+#: contrib/admin/views/doc.py:307
+msgid "Relation to parent model"
+msgstr "Relācija uz vecāka modeli"
+
+#: contrib/admin/views/doc.py:308
+msgid "Phone number"
+msgstr "Telefona numurs"
+
+#: contrib/admin/views/doc.py:313
+msgid "Text"
+msgstr "Teksts"
+
+#: contrib/admin/views/doc.py:314
+msgid "Time"
+msgstr "Laiks"
+
+#: contrib/admin/views/doc.py:316
+msgid "U.S. state (two uppercase letters)"
+msgstr "ASV štats (divi augšējā reģistra burti)"
+
+#: contrib/admin/views/doc.py:317
+msgid "XML text"
+msgstr "XML teksts"
+
+#: 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
+#, fuzzy
+msgid "Add user"
+msgstr "Pievienot %s"
+
+#: contrib/admin/views/auth.py:57
+#, fuzzy
+msgid "Password changed successfully."
+msgstr "Paroles nomaiņa sekmīga"
+
+#: contrib/admin/views/auth.py:64
+#, fuzzy, python-format
+msgid "Change password: %s"
+msgstr "Paroles maiņa"
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr ""
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr ""
+
+#: newforms/fields.py:126 core/validators.py:120
+msgid "Enter a whole number."
+msgstr "Ievadiet veselus skaitļus."
+
+#: newforms/fields.py:128
+#, fuzzy, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Šai vērtībai jābūt %s pakāpei."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr ""
+
+#: newforms/fields.py:163
+#, fuzzy
+msgid "Enter a valid date."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: newforms/fields.py:190
+#, fuzzy
+msgid "Enter a valid time."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: newforms/fields.py:226
+#, fuzzy
+msgid "Enter a valid date/time."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: newforms/fields.py:240
+#, fuzzy
+msgid "Enter a valid value."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: newforms/fields.py:269 core/validators.py:161
+msgid "Enter a valid e-mail address."
+msgstr "Ievadiet korektu e-pasta adresi."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+#, fuzzy
+msgid "Enter a valid URL."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: newforms/fields.py:311
+#, fuzzy
+msgid "This URL appears to be a broken link."
+msgstr "URL %s ir salauzta saite."
+
+#: newforms/fields.py:359
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+
+#: newforms/fields.py:377 newforms/fields.py:453
+#, fuzzy
+msgid "Enter a list of values."
+msgstr "Ievadiet korektu faila vārdu."
+
+#: newforms/fields.py:386
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr ""
+
+#: template/defaultfilters.py:436
+msgid "yes,no,maybe"
+msgstr "jā,nē,varbūt"
+
+#: views/generic/create_update.py:43
+#, fuzzy, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(name)s \"%(obj)s\" nomainīts sekmīgi."
+
+#: views/generic/create_update.py:117
+#, fuzzy, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(name)s \"%(obj)s\" sekmīgi izdzēsts."
+
+#: views/generic/create_update.py:184
+#, fuzzy, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(site_name)s komanda"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Šī vērtība var saturēt tikai burtus, numurus un apakšsvītras."
+
+#: core/validators.py:68
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Šī vērtība var saturēt tikai burtus, numurus un apakšsvītras, svītras vai "
+"šķērssvītras."
+
+#: core/validators.py:72
+#, fuzzy
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"Šī vērtība var saturēt tikai burtus, numurus un apakšsvītras, svītras vai "
+"šķērssvītras."
+
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "Augšējā reģistra burti nav atļauti."
+
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "Apakšējā reģistra burti nav atļauti."
+
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Ievadiet tikai numurus, kas atdalīti ar komatiem."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Ievadiet korektas e-pasta adreses, kas atdalītas ar komatiem."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "LÅ«dzu ievadiet korektu IP adresi."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "Tukšas vērtības nav atļautas."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Ne ciparu simboli nav atļauti."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Šī vērtība nevar saturēt tikai ciparus."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Atļauti tikai alfabētiskie simboli."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr ""
+
+#: core/validators.py:143
+#, fuzzy, python-format
+msgid "Invalid date: %s."
+msgstr "Nekorekts URL: %s"
+
+#: core/validators.py:152
+msgid "Enter a valid time in HH:MM format."
+msgstr "Ievadiet korektu laiku HH:MM formātā"
+
+#: core/validators.py:177
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Augšupielādējiet korektu attēlu. Fails, ko Jūs augšupielādējāt nav attēls "
+"vai arī bojāts attēla fails."
+
+#: core/validators.py:184
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "URL %s nesatur korektu attēlu."
+
+#: core/validators.py:188
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "Telefona numuriem jābūt XXX-XXX-XXXX formātā. \"%s\" is nekorekts."
+
+#: core/validators.py:196
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "URL %s nenorāda uz korektu QuickTime video."
+
+#: core/validators.py:200
+msgid "A valid URL is required."
+msgstr "Reāls URL obligāts."
+
+#: core/validators.py:214
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Korekts HTML ir obligāts. Specifiskās kļūdas:\n"
+"%s"
+
+#: core/validators.py:221
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Slikti formēts XML: %s"
+
+#: core/validators.py:238
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Nekorekts URL: %s"
+
+#: core/validators.py:243 core/validators.py:245
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "URL %s ir salauzta saite."
+
+#: core/validators.py:251
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Ievadiet korektu ASV štata abriviatūru."
+
+#: core/validators.py:265
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Seko saviem vārdiem! Vārds %s nav atļauts šeit."
+msgstr[1] "Seko saviem vārdiem! Vārdi %s nav atļauts šeit."
+
+#: core/validators.py:272
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Laukam jāsaskan ar %s lauku."
+
+#: core/validators.py:291
+msgid "Please enter something for at least one field."
+msgstr "Lūdzu ievadiet kaut ko vismaz vienā laukā."
+
+#: core/validators.py:300 core/validators.py:311
+msgid "Please enter both fields or leave them both empty."
+msgstr "Lūdzu ievadiet abus laukus vai atstājiet abus tukšus."
+
+#: core/validators.py:318
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Šis lauks ir jāaizpilda, ja %(field)s ir vienāds %(value)s"
+
+#: core/validators.py:330
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Šis lauks ir jāaizpilda, ja %(field)s nav vienāds %(value)s"
+
+#: core/validators.py:349
+msgid "Duplicate values are not allowed."
+msgstr "Duplicētas vērtības nav atļautas."
+
+#: core/validators.py:364
+#, fuzzy, python-format
+msgid "This value must be between %s and %s."
+msgstr "Šai vērtībai jābūt %s pakāpei."
+
+#: core/validators.py:366
+#, fuzzy, python-format
+msgid "This value must be at least %s."
+msgstr "Šai vērtībai jābūt %s pakāpei."
+
+#: core/validators.py:368
+#, fuzzy, python-format
+msgid "This value must be no more than %s."
+msgstr "Šai vērtībai jābūt %s pakāpei."
+
+#: core/validators.py:404
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Šai vērtībai jābūt %s pakāpei."
+
+#: core/validators.py:415
+msgid "Please enter a valid decimal number."
+msgstr "Lūdzu ievadiet korektu decimālu numuru."
+
+#: core/validators.py:419
+#, 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] ""
+"Lūdzu ievadiet korektu decimālu numuru ar maksimālu ciparu skaitu %s."
+msgstr[1] ""
+"Lūdzu ievadiet korektu decimālu numuru ar maksimālu ciparu skaitu %s."
+
+#: core/validators.py:422
+#, fuzzy, 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] ""
+"Lūdzu ievadiet korektu decimālu numuru ar maksimālu ciparu skaitu %s."
+msgstr[1] ""
+"Lūdzu ievadiet korektu decimālu numuru ar maksimālu ciparu skaitu %s."
+
+#: core/validators.py:425
+#, 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] ""
+"Lūdzu ievadiet korektu decimālu numuru ar maksimālu ciparu skaitu aiz komata "
+"%s."
+msgstr[1] ""
+"Lūdzu ievadiet korektu decimālu numuru ar maksimālu ciparu skaitu aiz komata "
+"%s."
+
+#: core/validators.py:435
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+"Pārliecinieties, ka jūsu augšupielādētais fails ir vismaz %s baiti liels."
+
+#: core/validators.py:436
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+"Pārliecinieties, ka jūsu augšupielādētais fails ir maksimums %s baiti liels."
+
+#: core/validators.py:453
+msgid "The format for this field is wrong."
+msgstr "Šī faila formāts ir nekorekts."
+
+#: core/validators.py:468
+msgid "This field is invalid."
+msgstr "Å is lauks ir nekorekts."
+
+#: core/validators.py:504
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Nevar neko no %s"
+
+#: core/validators.py:507
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "URL %(url)s atgrieza nekorektu Content-Type headeri '%(contenttype)s'."
+
+#: core/validators.py:540
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Lūdzu aiztaisiet neaiztaisīto %(tag)s tagu no rindas nr %(line)s. (Rinda "
+"sākas ar \"%(start)s\".)"
+
+#: core/validators.py:544
+#, 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:549
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:554
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:558
+#, 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:563
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
+#~ msgstr "Lietojiet '[algo]$[salt]$[hexdigest]'"
+
+#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+#~ msgstr "Vai esat <a href=\"/password_reset/\">aizmirsis paroli</a>?"

Added: vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/lv/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-15 10:46+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+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:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: 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:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+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 ""

Added: vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/mk/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2320 @@
+# translation of mk_django.po to Macedonian
+#
+# Georgi Stanojevski <glisha at gmail.com>, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: mk_django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-15 10:53+1100\n"
+"PO-Revision-Date: 2007-02-24 13:53+0100\n"
+"Last-Translator: Georgi Stanojevski <glisha at gmail.com>\n"
+"Language-Team: Macedonian <ossm-members at hedona.on.net.mk>\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=2; plural=n != 1;"
+
+#: db/models/manipulators.py:305
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(object)s од овој тип %(type)s веќе постои за даденото %(field)s."
+
+#: db/models/manipulators.py:306 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 "Ве молам внесете правилно %s."
+
+#: 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 "Држете го „Control“ или „Command“ на Мекинтош за да изберете повеќе од едно."
+
+#: 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] "Ве молам внесете правилен %(self)s идентификацион број. Оваа вредност %(value)r е неправилна."
+msgstr[1] "Ве молам внесете правилен %(self)s идентификацион број. Вредностите %(value)r се неправилни."
+
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s со ова %(fieldname)s веќе постои."
+
+#: db/models/fields/__init__.py:116 db/models/fields/__init__.py:273
+#: db/models/fields/__init__.py:605 db/models/fields/__init__.py:616
+#: oldforms/__init__.py:352 newforms/fields.py:78 newforms/fields.py:373
+#: newforms/fields.py:449 newforms/fields.py:460
+msgid "This field is required."
+msgstr "Ова поле е задолжително."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Оваа вредност мора да биде цел број."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Оваа вредност мора да биде или точно или неточно."
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Оваа вредност неможе да биде null."
+
+#: db/models/fields/__init__.py:454 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Внесете правилен датум во форматот ГГГГ-ММ-ДД."
+
+#: db/models/fields/__init__.py:521 core/validators.py:156
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Внесете правилен датум/време во форматот ГГГГ-ММ-ДД ЧЧ:ММ."
+
+#: db/models/fields/__init__.py:625
+msgid "Enter a valid filename."
+msgstr "Внесите правилно име на датотека."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Арапски"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Бенгалски"
+
+#: conf/global_settings.py:41
+msgid "Czech"
+msgstr "Чешки"
+
+#: conf/global_settings.py:42
+msgid "Welsh"
+msgstr "Велшки"
+
+#: conf/global_settings.py:43
+msgid "Danish"
+msgstr "Дански"
+
+#: conf/global_settings.py:44
+msgid "German"
+msgstr "Германски"
+
+#: conf/global_settings.py:45
+msgid "Greek"
+msgstr "Грчки"
+
+#: conf/global_settings.py:46
+msgid "English"
+msgstr "Англиски"
+
+#: conf/global_settings.py:47
+msgid "Spanish"
+msgstr "Шпански"
+
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "Аргентиско шпански"
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "Фински"
+
+#: conf/global_settings.py:50
+msgid "French"
+msgstr "Француски"
+
+#: conf/global_settings.py:51
+msgid "Galician"
+msgstr "Галски"
+
+#: conf/global_settings.py:52
+msgid "Hungarian"
+msgstr "Унгарски"
+
+#: conf/global_settings.py:53
+msgid "Hebrew"
+msgstr "Еврејски"
+
+#: conf/global_settings.py:54
+msgid "Icelandic"
+msgstr "Исландски"
+
+#: conf/global_settings.py:55
+msgid "Italian"
+msgstr "Италијански"
+
+#: conf/global_settings.py:56
+msgid "Japanese"
+msgstr "Јапонски"
+
+#: conf/global_settings.py:57
+msgid "Latvian"
+msgstr "Латвиски"
+
+#: conf/global_settings.py:58
+msgid "Macedonian"
+msgstr "Македонски"
+
+#: conf/global_settings.py:59
+msgid "Dutch"
+msgstr "Холандски"
+
+#: conf/global_settings.py:60
+msgid "Norwegian"
+msgstr "Норвешки"
+
+#: conf/global_settings.py:61
+msgid "Polish"
+msgstr "Полски"
+
+#: conf/global_settings.py:62
+msgid "Brazilian"
+msgstr "Бразилски"
+
+#: conf/global_settings.py:63
+msgid "Romanian"
+msgstr "Романски"
+
+#: conf/global_settings.py:64
+msgid "Russian"
+msgstr "Руски"
+
+#: conf/global_settings.py:65
+msgid "Slovak"
+msgstr "Словачки"
+
+#: conf/global_settings.py:66
+msgid "Slovenian"
+msgstr "Словенечки"
+
+#: conf/global_settings.py:67
+msgid "Serbian"
+msgstr "Српски"
+
+#: conf/global_settings.py:68
+msgid "Swedish"
+msgstr "Шведски"
+
+#: conf/global_settings.py:69
+msgid "Tamil"
+msgstr "Тамил"
+
+#: conf/global_settings.py:70
+msgid "Turkish"
+msgstr "Турски"
+
+#: conf/global_settings.py:71
+msgid "Ukrainian"
+msgstr "Украински"
+
+#: conf/global_settings.py:72
+msgid "Simplified Chinese"
+msgstr "Упростен кинески"
+
+#: conf/global_settings.py:73
+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/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Осигурајте се дека вашиот текст има помалку од %s знак."
+msgstr[1] "Осигурајте се дека вашиот текст има помалку од %s знаци."
+
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "Тука не се дозволени прекини на линија."
+
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Изберете правилно, %(data)s' не е во %(choices)s."
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:150
+#: newforms/widgets.py:162
+msgid "Unknown"
+msgstr "Непознато"
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:162
+msgid "Yes"
+msgstr "Да"
+
+#: oldforms/__init__.py:572 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:162
+msgid "No"
+msgstr "Не"
+
+#: oldforms/__init__.py:667 core/validators.py:173 core/validators.py:442
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Не беше пратена датотека. Проверете го типот на енкодирање на формата."
+
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "Пратената датотека е празна."
+
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Внесете цел број помеѓу -32,768 и 32,767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Внесете позитивен број."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Внесете цел број помеѓу 0 и 32,767."
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "клуч на сесијата"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "податоци од сесијата"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "датум на истекување"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "сесија"
+
+#: contrib/sessions/models.py:58
+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 ""
+"Дозволени се најмногу 30 знаци. Дозволени се само алфанумерички знаци "
+"(букви, цифри и долна црта)."
+
+#: 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 <a href=\"password/\">change "
+"password form</a>."
+msgstr "Користете '[algo]$[salt]$[hexdigest]' или користете ја <a href=\"password/\">формата за промена на лозинката</a>."
+
+#: 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/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "има на класата на питон моделите"
+
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr "content type"
+
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "content types"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "пренасочено од"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Ова треба да биде апсолутна патека без името на домејнот. На пр. „/nastani/"
+"prebaraj/“."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "пренасочи кон"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Ова може да биде или апсолутна патека (како погоре) или цела адреса "
+"почувајќи со „http://“."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "пренасочување"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "пренасочувања"
+
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
+msgid "URL"
+msgstr "URL"
+
+#: contrib/flatpages/models.py:8
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"На пр. „/za/kontakt/“. Осигурајте се да имате коса црта и на крајот и на "
+"почетокот."
+
+#: 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 ""
+"На пр. „flatpages/kontakt.html'. Ако не го внесете ова, системот ќе користи "
+"„flatpages/default.html“."
+
+#: 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 "object ID"
+
+#: 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 "популарност #1"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "популарност #2"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "популарност #3"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "популарност #4"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "популарност #5"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "популарност #6"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "популарност #7"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "популарност #8"
+
+#: 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 "Content објект"
+
+#: contrib/comments/models.py:159
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+"Напишан од %(user)s на %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "име на личноста"
+
+#: 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 "%(score)d гласање за популарност од %(user)s"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Овој коментар беше означен од %(user)s:\n"
+"\n"
+"%(text)s"
+
+#: 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 "Означено од %r"
+
+#: 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 "Бришење од модератор од %r"
+
+#: 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] ""
+"Овој коментар беше пратен од корисник кој пратил помалку од %(count)s "
+"коментар:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Овој коментар беше пратен од корисник кој пратил помалку од %(count)s "
+"коментари:\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 ""
+"Овој коментар беше пратен од недоверлив корисник:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Дозволено е само POST"
+
+#: 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 "Формата за коментар имаше неправилен „target“ параметар - идентификациониот број на објектот беше неправилен"
+
+#: 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
+msgid "domain name"
+msgstr "домејн"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "име кое се прикажува"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "сајт"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "сајтови"
+
+#: contrib/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>Од %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "Сите"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "Било кој датум"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "Денеска"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "Последните 7 дена"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "Овој месец"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "Оваа година"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "време на акција"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "идентификационен број на објект"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "object repr"
+
+#: 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:238
+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"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">За да инсталирате обележувачи, влечете ја врската до "
+"вашата\n"
+"лента со алатки, или кликнете со десното копче  и додадете го во вашите \n"
+"обележувачи. Сега може да го изберете обележувачот од било која страница "
+"на \n"
+"сајтот. Имајте на ум дека за некои од овие обележувачи е потребно да го "
+"гледате \n"
+"сајтот од компјутер кој е означен како „внатрешен“ (разговарајте со вашиот \n"
+"администратор ако не сте сигурни).</p>\n"
+
+#: 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 "Грешка со серверот (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Грешка со серверот <em>(500)</em>"
+
+#: 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 " Од %(filter_title)s "
+
+#: 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] "1 резултат"
+msgstr[1] "%(counter)s резултати"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "вкупно %(full_result_count)s"
+
+#: 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, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Овој објект нема историја на измени. Најверојатно не бил додаден со админ "
+"сајтот."
+
+#: 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 "Бришење на %(object_name)s '%(escaped_object)s' ќе резултира со бришење на поврзаните објекти, но со вашата сметка немате доволно привилегии да ги бришете следните типови на објекти:"
+
+#: 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 ""
+"Сигурне сте дека сакате да ги бришете %(object_name)s „%(escaped_object)s“? "
+"Сите овие ставки ќе бидат избришани:"
+
+#: 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 "Додади %(name)s"
+
+#: 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 "Достапни модели во апликацијата %(name)s."
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: 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 <strong>%(username)s</strong>."
+msgstr "Внесете нова лозинка за корисникот <strong>%(username)s</strong>."
+
+#: 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 "за корисничката сметка на %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Вашата нова лозинка е: %(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 "Чуствувајте се слободно да ја промените оваа лозинка преку оваа страница:"
+
+#: 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 "Тимот на %(site_name)s"
+
+#: 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 "%(name)s \"%(obj)s\" беше успешно додаден."
+
+#: 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 "Подолу можете да додате уште еден %s."
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "Додади %s"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "Додадено %s."
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "Изменета %s."
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "Избришана %s."
+
+#: 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 "%(name)s \"%(obj)s\" беше успешно изменета."
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"%(name)s \"%(obj)s\" беше успешно додадена.Подолу можете повторно да ја "
+"уредите."
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "Измени %s"
+
+#: contrib/admin/views/main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Еден или повеќе %(fieldname)s во %(name)s: %(obj)s"
+
+#: contrib/admin/views/main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Еден или повеќе %(fieldname)s во %(name)s:"
+
+#: contrib/admin/views/main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" беше избришана успешно."
+
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "Сигурни сте?"
+
+#: contrib/admin/views/main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "Историја на измени: %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "Изберет %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "Изберете %s за измена"
+
+#: contrib/admin/views/main.py:758
+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 "Вашата е-пошта не е вашето корисничко име. Пробајте со „%s“."
+
+#: 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 "Не е најдена апликацијата %r"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "Моделот %r не е најден во апликацијата %r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "повразните`%s.%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 "модел:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "поврзани `%s.%s` објекти"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "сите %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "број на %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Полиња на %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 "Цел број"
+
+#: 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 "Збор (до %(maxlength)s)"
+
+#: 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 "XML текст"
+
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s не изгледа дека е url објект"
+
+#: 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 "Промени лозинка: %s"
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Осигурајте се дека оваа вредност има најмногу %d знаци."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Осигурајте се дека оваа вредност има најмалку %d знаци."
+
+#: newforms/fields.py:126 core/validators.py:120
+msgid "Enter a whole number."
+msgstr "Внеси цел број."
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Осигурајте се дека оваа вредност е помала или еднаква на %s."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Осигурајте се дека оваа вредност е поголема или еднаква со %s."
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Внесете правилен датум."
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "Внесете правилно време."
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Внесете правилен датум со време."
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Внесете правилна вредност."
+
+#: newforms/fields.py:269 core/validators.py:161
+msgid "Enter a valid e-mail address."
+msgstr "Внесeте правилна адреса за е-пошта."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Внесете правилна адреса."
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "Оваа адреса изгледа дека не е достапна."
+
+#: newforms/fields.py:359
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Изберете правилно. Тоа не е едно од можните избори."
+
+#: newforms/fields.py:377 newforms/fields.py:453
+msgid "Enter a list of values."
+msgstr "Внесете листа на вредности."
+
+#: newforms/fields.py:386
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Внесете правилно. %s не е еден од достапните вредности."
+
+#: template/defaultfilters.py:436
+msgid "yes,no,maybe"
+msgstr "да, не, можеби"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s беше успешно создаден."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s беше успешно ажуриран."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s беше избришан."
+
+#: 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 "Годината мора да биде 1900 или покасно."
+
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Неправилен датум: %s."
+
+#: core/validators.py:152
+msgid "Enter a valid time in HH:MM format."
+msgstr "Внесете правилно време во форматот HH:MM."
+
+#: core/validators.py:177
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Качете валидна фотографија. Датотеката која ја качивте или не беше "
+"фотографија или беше расипана датотеката."
+
+#: core/validators.py:184
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "Адресата %s не покажува кон валидна фотографија."
+
+#: core/validators.py:188
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Телефонските броеви мора да бидат во XXX-XXX-XXXX форматот. „%s“ не е "
+"валиден."
+
+#: core/validators.py:196
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "Адресата „%s“ не покажува кон QuickTime видео."
+
+#: core/validators.py:200
+msgid "A valid URL is required."
+msgstr "Задолжителна е правилна адреса."
+
+#: core/validators.py:214
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Задолжителен е правилен HTML. Грешките се:\n"
+"%s"
+
+#: core/validators.py:221
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Неправилно формиран XML: %s"
+
+#: core/validators.py:238
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Неправилна адреса: %s"
+
+#: core/validators.py:243 core/validators.py:245
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "Адресата %s е скршена врска."
+
+#: core/validators.py:251
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Внесете правилна скратеница за држава во САД."
+
+#: core/validators.py:265
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Внимавајте на јазикот. Тука не е дозволен зборот %s."
+msgstr[1] "Внимавајте на јазикот. Тука не се дозволени зборовите %s."
+
+#: core/validators.py:272
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Ова поле мора да соодејствува со полето „%s“."
+
+#: core/validators.py:291
+msgid "Please enter something for at least one field."
+msgstr "Ве молам внесете нешто во барем едно поле."
+
+#: core/validators.py:300 core/validators.py:311
+msgid "Please enter both fields or leave them both empty."
+msgstr "Ве молам внесете во двете полиња или оставете ги двете празни."
+
+#: core/validators.py:318
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Ова поле мора да биде зададено ако %(field)s е %(value)s"
+
+#: core/validators.py:330
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Ова поле мора да биде зададено ако %(field)s не е %(value)s"
+
+#: core/validators.py:349
+msgid "Duplicate values are not allowed."
+msgstr "Дупликат вредности не се дозволени."
+
+#: core/validators.py:364
+#, python-format
+msgid "This value must be between %s and %s."
+msgstr "Оваа вредноста мора да биде помеѓу %s и %s."
+
+#: core/validators.py:366
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Оваа вредноста мора да биде најмалку %s."
+
+#: core/validators.py:368
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "Оваа вредност не смее да биде поголема од %s."
+
+#: core/validators.py:404
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Оваа вредноста мора да биде степен од %s."
+
+#: core/validators.py:415
+msgid "Please enter a valid decimal number."
+msgstr "Ве молам внесете правилен децимален број."
+
+#: core/validators.py:419
+#, 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] "Ве молам внесете правилен децимален број со најмногу %s цифрa."
+msgstr[1] "Ве молам внесете правилен децимален број со најмногу %s вкупно цифри."
+
+#: core/validators.py:422
+#, 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] ""
+"Ве молам внесете правилен децимален број кој во целиот број има најмногу %s "
+"цифра."
+msgstr[1] ""
+"Ве молам внесете правилен децимален број кој во целиот број има најмногу %s "
+"цифри."
+
+#: core/validators.py:425
+#, 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] "Ве молам внесете правилен децимален број кој има најмногу %s децимална цифра."
+msgstr[1] "Ве молам внесете правилен децимален број кој има најмногу %s децимални цифри."
+
+#: core/validators.py:435
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Потврдете дека качената датотека има најмалку %s бајти."
+
+#: core/validators.py:436
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Потврдете дека качената датотека има најмногу %s бајти."
+
+#: core/validators.py:453
+msgid "The format for this field is wrong."
+msgstr "Форматот за ова поле е грешен."
+
+#: core/validators.py:468
+msgid "This field is invalid."
+msgstr "Ова поле не е правилно."
+
+#: core/validators.py:504
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Неможев да извадам ништо од %s."
+
+#: core/validators.py:507
+#, python-format
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "Адресата %(url)s врати неправилно заглавје Content-Type „%(contenttype)s“."
+
+#: core/validators.py:540
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Ве молам затворете го отворениот %(tag)s таг од линијата %(line)s. (линијата "
+"почнува со „%(start)s“.)"
+
+#: core/validators.py:544
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Некој текст  кој почнува на линијата %(line)s не е дозволен во тој контекст. "
+"(Линијата започнува со „%(start)s“.)"
+
+#: core/validators.py:549
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"„%(attr)s“ на линија %(line)s е неправилен атрибут. (линијата започнува со „%"
+"(start)s“.)"
+
+#: core/validators.py:554
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"„<%(tag)s>“ на линија %(line)s е неправилен таг. (линијата започнува со „%"
+"(start)s“.)"
+
+#: core/validators.py:558
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"На таг од линијата %(line)s му недостасува еден или повеќе од потребните "
+"атрибути (линијата започнува со „%(start)s“)."
+
+#: core/validators.py:563
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr "Атрибутот „%(attr)s“ на линијата %(line)s има неправилна вредност (линијата започнува со „%(start)s“)."
+

Added: vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/mk/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,119 @@
+# translation of djangojs.po to Macedonian
+#
+# Georgi Stanojevski <glisha at gmail.com>, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: djangojs\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-15 10:53+1100\n"
+"PO-Revision-Date: 2007-02-24 13:49+0100\n"
+"Last-Translator: Georgi Stanojevski <glisha at gmail.com>\n"
+"Language-Team: Macedonian <ossm-members at hedona.on.net.mk>\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"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "Достапно %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Избери ги сите"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Додади"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Отстрани"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Избрано %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Означете го вашиот избор/и и кликнете"
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Исчисти ги сите"
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"Јануари Февруари Март Април Мај Јуни Јули Август Септември Октомври Ноември "
+"Декември"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Недела Понеделник Вторник Среда Четврток Петок Сабота"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+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:51
+msgid "Clock"
+msgstr "Часовник"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr "Избери време"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr "Полноќ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr "6 наутро"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr "Пладне"
+
+#: 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:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr "Денеска"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr "Календар"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr "Вчера"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+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 "Скриј"
+

Modified: vendor/django/current/django/conf/locale/nl/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/nl/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/nl/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/nl/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: Django 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 17:21+0200\n"
+"POT-Creation-Date: 2006-12-09 15:51+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Johan C. Stöver <johan at nilling.nl>\n"
 "Language-Team: \n"
@@ -17,29 +17,34 @@
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: db/models/manipulators.py:302
+#: db/models/manipulators.py:305
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
 msgstr ""
 "%(object)s van het type %(type)s bestaat al voor het gegeven %(field)s."
 
-#: db/models/fields/related.py:43
+#: db/models/manipulators.py:306 contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:337 contrib/admin/views/main.py:339
+msgid "and"
+msgstr "en"
+
+#: db/models/fields/related.py:51
 #, python-format
 msgid "Please enter a valid %s."
-msgstr "Geef een geldig IP adres."
+msgstr "Geef een geldig %s veld."
 
-#: db/models/fields/related.py:579
+#: db/models/fields/related.py:618
 msgid "Separate multiple IDs with commas."
 msgstr "Scheid meerdere ID's door komma's."
 
-#: db/models/fields/related.py:581
+#: db/models/fields/related.py:620
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Houd \"Control\", of \"Command\" op een Mac, ingedrukt om meerdere te "
 "selecteren."
 
-#: db/models/fields/related.py:625
+#: db/models/fields/related.py:664
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -47,150 +52,178 @@
 msgstr[0] "Geef een geldig %(self)s IDs. De waarde %(value)r is ongeldig."
 msgstr[1] "Geef een geldig %(self)s IDs. De waarden %(value)r zijn ongeldig."
 
-#: db/models/fields/__init__.py:40
+#: db/models/fields/__init__.py:41
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
 msgstr "%(optname)s met deze %(fieldname)s bestaat al."
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
+#: db/models/fields/__init__.py:115 db/models/fields/__init__.py:266
+#: db/models/fields/__init__.py:560 db/models/fields/__init__.py:571
+#: forms/__init__.py:352 newforms/fields.py:60 newforms/fields.py:288
 msgid "This field is required."
 msgstr "Dit veld is verplicht."
 
-#: db/models/fields/__init__.py:337
+#: db/models/fields/__init__.py:349
 msgid "This value must be an integer."
 msgstr "De waarde moet een geheel getal zijn."
 
-#: db/models/fields/__init__.py:369
+#: db/models/fields/__init__.py:381
 msgid "This value must be either True or False."
 msgstr "De waarde moet of True (waar) of False (onwaar) zijn."
 
-#: db/models/fields/__init__.py:385
+#: db/models/fields/__init__.py:397
 msgid "This field cannot be null."
 msgstr "Dit veld mag niet leeg zijn."
 
-#: db/models/fields/__init__.py:468 core/validators.py:132
+#: db/models/fields/__init__.py:424 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Geef een geldige datum in JJJJ-MM-DD formaat."
+
+#: db/models/fields/__init__.py:486 core/validators.py:156
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr "Geef geldige datum/tijd in JJJJ-MM-DD UU:MM formaat."
 
-#: db/models/fields/__init__.py:562
+#: db/models/fields/__init__.py:580
 msgid "Enter a valid filename."
 msgstr "Geef een geldige bestandsnaam."
 
-#: conf/global_settings.py:37
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Arabisch"
+
+#: conf/global_settings.py:40
 msgid "Bengali"
 msgstr "Bengaals"
 
-#: conf/global_settings.py:38
+#: conf/global_settings.py:41
 msgid "Czech"
 msgstr "Tjechisch"
 
-#: conf/global_settings.py:39
+#: conf/global_settings.py:42
 msgid "Welsh"
 msgstr "Wels"
 
-#: conf/global_settings.py:40
+#: conf/global_settings.py:43
 msgid "Danish"
 msgstr "Deens"
 
-#: conf/global_settings.py:41
+#: conf/global_settings.py:44
 msgid "German"
 msgstr "Duits"
 
-#: conf/global_settings.py:42
+#: conf/global_settings.py:45
 msgid "Greek"
 msgstr "Grieks"
 
-#: conf/global_settings.py:43
+#: conf/global_settings.py:46
 msgid "English"
 msgstr "Engels"
 
-#: conf/global_settings.py:44
+#: conf/global_settings.py:47
 msgid "Spanish"
 msgstr "Spaans"
 
-#: conf/global_settings.py:45
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "Argentijns Spaans"
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "Fins"
+
+#: conf/global_settings.py:50
 msgid "French"
 msgstr "Frans"
 
-#: conf/global_settings.py:46
+#: conf/global_settings.py:51
 msgid "Galician"
 msgstr "Galicisch"
 
-#: conf/global_settings.py:47
+#: conf/global_settings.py:52
 msgid "Hungarian"
 msgstr "Hongaars"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:53
 msgid "Hebrew"
 msgstr "Hebreews"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:54
 msgid "Icelandic"
 msgstr "IJslands"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:55
 msgid "Italian"
 msgstr "Italiaans"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:56
 msgid "Japanese"
 msgstr "Japans"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:57
 msgid "Dutch"
 msgstr "Nederlands"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:58
 msgid "Norwegian"
 msgstr "Noors"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:59
+msgid "Polish"
+msgstr "Pools"
+
+#: conf/global_settings.py:60
 msgid "Brazilian"
 msgstr "Braziliaans"
 
-#: conf/global_settings.py:55
+#: conf/global_settings.py:61
 msgid "Romanian"
 msgstr "Roemeens"
 
-#: conf/global_settings.py:56
+#: conf/global_settings.py:62
 msgid "Russian"
 msgstr "Russisch"
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:63
 msgid "Slovak"
 msgstr "Slovaaks"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:64
 msgid "Slovenian"
 msgstr "Sloveens"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:65
 msgid "Serbian"
 msgstr "Servisch"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:66
 msgid "Swedish"
 msgstr "Zweeds"
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:67
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:68
+msgid "Turkish"
+msgstr "Turks"
+
+#: conf/global_settings.py:69
 msgid "Ukrainian"
 msgstr "Oekraïens"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:70
 msgid "Simplified Chinese"
 msgstr "Vereenvoudigd Chinees"
 
-#: conf/global_settings.py:63
+#: conf/global_settings.py:71
 msgid "Traditional Chinese"
 msgstr "Traditioneel Chinees"
 
-#: core/validators.py:60
+#: core/validators.py:64
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Deze waarde mag alleen letters, getallen en liggende strepen bevatten."
 
-#: core/validators.py:64
+#: core/validators.py:68
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
@@ -199,58 +232,73 @@
 "bevatten."
 
 #: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr ""
+"Deze waarde mag alleen letters, cijfers, liggende strepen en verbindingsstrepen "
+"bevatten."
+
+#: core/validators.py:76
 msgid "Uppercase letters are not allowed here."
 msgstr "Hoofdletters zijn hier niet toegestaan."
 
-#: core/validators.py:76
+#: core/validators.py:80
 msgid "Lowercase letters are not allowed here."
 msgstr "Kleine letters zijn hier niet toegestaan."
 
-#: core/validators.py:83
+#: core/validators.py:87
 msgid "Enter only digits separated by commas."
 msgstr "Geef alleen cijfers op, gescheiden door komma's."
 
-#: core/validators.py:95
+#: core/validators.py:99
 msgid "Enter valid e-mail addresses separated by commas."
 msgstr "Geef geldige e-mailadressen op, gescheiden door komma's."
 
-#: core/validators.py:99
+#: core/validators.py:103
 msgid "Please enter a valid IP address."
 msgstr "Geef een geldig IP adres op."
 
-#: core/validators.py:103
+#: core/validators.py:107
 msgid "Empty values are not allowed here."
 msgstr "Lege waarden zijn hier niet toegestaan."
 
-#: core/validators.py:107
+#: core/validators.py:111
 msgid "Non-numeric characters aren't allowed here."
 msgstr "Niet-numerieke karakters zijn hier niet toegestaan."
 
-#: core/validators.py:111
+#: core/validators.py:115
 msgid "This value can't be comprised solely of digits."
 msgstr "Deze waarde kan niet alleen uit cijfers bestaan."
 
-#: core/validators.py:116
+#: core/validators.py:120 newforms/fields.py:103
 msgid "Enter a whole number."
 msgstr "Geef een geheel getal op."
 
-#: core/validators.py:120
+#: core/validators.py:124
 msgid "Only alphabetical characters are allowed here."
 msgstr "Alleen alfabetische karakters zijn toegestaan"
 
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Geef een geldige datum in JJJJ-MM-DD formaat."
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "Het jaartal moet 1900 of nieuwer zijn."
 
-#: core/validators.py:128
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Ongeldige datum: %s"
+
+#: core/validators.py:152
 msgid "Enter a valid time in HH:MM format."
 msgstr "Geef een geldige tijd in UU:MM formaat."
 
-#: core/validators.py:136
+#: core/validators.py:161 newforms/fields.py:207
 msgid "Enter a valid e-mail address."
 msgstr "Geef een geldig e-mailadres op."
 
-#: core/validators.py:148
+#: core/validators.py:173 core/validators.py:442 forms/__init__.py:667
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Er was geen bestand verstuurd. Controleer de encoding van het formulier."
+
+#: core/validators.py:177
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -258,28 +306,28 @@
 "Bestand ongeldig. Het bestand dat is gegeven is geen afbeelding of was "
 "beschadigd."
 
-#: core/validators.py:155
+#: core/validators.py:184
 #, python-format
 msgid "The URL %s does not point to a valid image."
 msgstr "De URL %s wijst niet naar een afbeelding."
 
-#: core/validators.py:159
+#: core/validators.py:188
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr ""
 "Telefoonnummers moeten volgens het XXX-XXX-XXXX formaat zijn. \"%s\" is "
 "ongeldig."
 
-#: core/validators.py:167
+#: core/validators.py:196
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
 msgstr "De URL %s wijst niet naar een QuickTime video."
 
-#: core/validators.py:171
+#: core/validators.py:200
 msgid "A valid URL is required."
 msgstr "Een geldige URL is vereist."
 
-#: core/validators.py:185
+#: core/validators.py:214
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
@@ -288,69 +336,84 @@
 "Geldige HTML is vereist. De specifieke fouten zijn:\n"
 "%s"
 
-#: core/validators.py:192
+#: core/validators.py:221
 #, python-format
 msgid "Badly formed XML: %s"
 msgstr "Foute XML: %s"
 
-#: core/validators.py:202
+#: core/validators.py:238
 #, python-format
 msgid "Invalid URL: %s"
 msgstr "Ongeldige URL: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:243 core/validators.py:245
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr "De URL %s is een niet werkende link."
 
-#: core/validators.py:214
+#: core/validators.py:251
 msgid "Enter a valid U.S. state abbreviation."
 msgstr "Geef een geldige afkorting van een VS staat."
 
-#: core/validators.py:229
+#: core/validators.py:265
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Pas op uw taalgebruik! Gebruik van %s niet toegestaan."
 msgstr[1] "Pas op uw taalgebruik! Gebruik van de woorden %s niet toegestaan."
 
-#: core/validators.py:236
+#: core/validators.py:272
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr "Dit veld moet overeenkomen met het '%s' veld."
 
-#: core/validators.py:255
+#: core/validators.py:291
 msgid "Please enter something for at least one field."
 msgstr "Voer tenminste één veld in."
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:300 core/validators.py:311
 msgid "Please enter both fields or leave them both empty."
 msgstr "Voer waarden in in beide velden of laat beide leeg."
 
-#: core/validators.py:282
+#: core/validators.py:318
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
 msgstr "Dit veld moet opgegeven worden indien %(field)s %(value)s is"
 
-#: core/validators.py:294
+#: core/validators.py:330
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
 msgstr "Dit veld moet worden opgegeven indien %(field)s niet %(value)s is"
 
-#: core/validators.py:313
+#: core/validators.py:349
 msgid "Duplicate values are not allowed."
 msgstr "Dubbele waarden zijn niet toegestaan."
 
-#: core/validators.py:336
+#: core/validators.py:364
 #, python-format
+msgid "This value must be between %s and %s."
+msgstr "De waarde moet tussen %s en %s zijn."
+
+#: core/validators.py:366
+#, python-format
+msgid "This value must be at least %s."
+msgstr "De waarde moet minimaal %s zijn."
+
+#: core/validators.py:368
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "De waarde mag niet meer zijn dan %s."
+
+#: core/validators.py:404
+#, python-format
 msgid "This value must be a power of %s."
 msgstr "De waarde moet een macht van %s zijn."
 
-#: core/validators.py:347
+#: core/validators.py:415
 msgid "Please enter a valid decimal number."
 msgstr "Geef een geldig decimaal getal."
 
-#: core/validators.py:349
+#: core/validators.py:419
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
 msgid_plural ""
@@ -358,38 +421,47 @@
 msgstr[0] "Geef een geldig decimaal getal met hooguit %s cijfer."
 msgstr[1] "Geef een geldig decimaal getal met hooguit %s cijfers."
 
-#: core/validators.py:352
+#: core/validators.py:422
 #, 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] "Geef een geldig decimaal getal waarbij het gehele getal minimaal %s cijfer heeft."
+msgstr[1] "Geef een geldig decimaal getal waarbij het gehele getal minimaal %s cijfers heeft."
+
+#: core/validators.py:425
+#, 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] "Geef een decimaal getal met hooguit %s cijfer achter de komma."
 msgstr[1] "Geef een decimaal getal met hooguit %s cijfers achter de komma."
 
-#: core/validators.py:362
+#: core/validators.py:435
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr "Zorg ervoor dat het bestand minstens %s bytes groot is."
 
-#: core/validators.py:363
+#: core/validators.py:436
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr "Zorg ervoor dat het bestand hoogstens %s bytes groot is."
 
-#: core/validators.py:376
+#: core/validators.py:453
 msgid "The format for this field is wrong."
 msgstr "Het formaat van dit veld is fout."
 
-#: core/validators.py:391
+#: core/validators.py:468
 msgid "This field is invalid."
 msgstr "Dit veld is ongeldig."
 
-#: core/validators.py:426
+#: core/validators.py:504
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr "Kan niks ophalen van %s."
 
-#: core/validators.py:429
+#: core/validators.py:507
 #, python-format
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
@@ -397,7 +469,7 @@
 "De geretourneerde URL %(url)s bevat een ongeldige Content-Type '%"
 "(contenttype)s."
 
-#: core/validators.py:462
+#: core/validators.py:540
 #, python-format
 msgid ""
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@@ -406,7 +478,7 @@
 "Sluit de niet gesloten %(tag)s tag op regel %(line)s. (Regel start met \"%"
 "(start)s\".)"
 
-#: core/validators.py:466
+#: core/validators.py:544
 #, python-format
 msgid ""
 "Some text starting on line %(line)s is not allowed in that context. (Line "
@@ -415,7 +487,7 @@
 "Tekst beginnend op regel %(line)s is in deze context niet toegestaan. (Regel "
 "start met \"%(start)s\".)"
 
-#: core/validators.py:471
+#: core/validators.py:549
 #, python-format
 msgid ""
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@@ -424,7 +496,7 @@
 "\"%(attr)s\" op regel %(line)s is een ongeldig attribuut. (Regel start met "
 "\"%(start)s\".)"
 
-#: core/validators.py:476
+#: core/validators.py:554
 #, python-format
 msgid ""
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@@ -433,7 +505,7 @@
 "\"<%(tag)s>\" op regel %(line)s is een ongeldige tag. (Regel start met \"%"
 "(start)s\".)"
 
-#: core/validators.py:480
+#: core/validators.py:558
 #, python-format
 msgid ""
 "A tag on line %(line)s is missing one or more required attributes. (Line "
@@ -442,7 +514,7 @@
 "Een of meerdere attributen ontbreken bij een tag op regel %(line)s. (Regel "
 "start met \"%(start)s\".)"
 
-#: core/validators.py:485
+#: core/validators.py:563
 #, python-format
 msgid ""
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@@ -451,7 +523,15 @@
 "De \"%(attr)s\" attribuut op regel %(line)s heeft een ongeldige waarde. "
 "(Regel start met \"%(start)s\".)"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:16
+msgid "The two password fields didn't match."
+msgstr "De twee ingevulde wachtwoorden zijn niet gelijk."
+
+#: contrib/auth/forms.py:24
+msgid "A user with that username already exists."
+msgstr "Een gebruiker met deze gebruikersnaam bestaat al."
+
+#: contrib/auth/forms.py:52
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -459,8 +539,7 @@
 "Het lijkt erop dat uw browser geen cookies accepteerd. Om aan te melden "
 "moeten cookies worden geaccepteerd."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:41
-#: contrib/admin/views/decorators.py:9
+#: contrib/auth/forms.py:59 contrib/admin/views/decorators.py:10
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -468,79 +547,115 @@
 "Voer een correcte gebruikersnaam en wachtwoord in. Let op, de velden zijn "
 "hoofdletter-gevoelig."
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr "Dit account is inactief."
+
+#: contrib/auth/forms.py:84
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr "Dat e-mailadres heeft geen gerelateerd gebruikersaccount. Weet u zeker dat u zich heeft geregistreerd?"
+
+#: contrib/auth/forms.py:116
+msgid "The two 'new password' fields didn't match."
+msgstr "De twee 'nieuw wachtwoord' velden zijn niet gelijk."
+
+#: contrib/auth/forms.py:123
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Uw oude wachtwoord was niet correct ingevoerd. Voert u het alstublieft opnieuw in."
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
 msgid "name"
 msgstr "naam"
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr "codenaam"
 
-#: contrib/auth/models.py:17
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr "recht"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
 msgid "permissions"
 msgstr "rechten"
 
-#: contrib/auth/models.py:29
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr "groep"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
 msgid "groups"
 msgstr "groepen"
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr "gebruikersnaam"
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr "Verplicht. 30 tekens of minder. Alleen alfanumerieke tekens (letters, cijfers en liggende strepen)."
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr "voornaam"
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr "achternaam"
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr "e-mailadres"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr "wachtwoord"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "Use '[algo]$[salt]$[hexdigest]'"
 msgstr "Gebruik '[algo]$[salt]$[hexdigest]'"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr "staf status"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
 msgstr "Bepaalt of de gebruiker kan inloggen op deze admin site."
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr "actief"
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr "Bepaalt of de gebruiker kan inloggen op deze admin site. U kunt dit uitvinken in plaats van een gebruiker te verwijderen."
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr "supergebruiker status"
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "Bepaald dat deze gebruiker alle rechten heeft, zonder deze expliciet toe te wijzen."
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr "laatste aanmelding"
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr "datum toegetreden"
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -548,38 +663,42 @@
 "Bovenop de rechten welke handmatig zijn toegekend, krijgt deze gebruiker ook "
 "alle rechten van de groepen waar hij of zij deel van uitmaakt."
 
-#: contrib/auth/models.py:67
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr "gebruikersrechten"
 
-#: contrib/auth/models.py:70
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr "gebruiker"
 
-#: contrib/auth/models.py:71
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr "gebruikers"
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr "Persoonlijke informatie"
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr "Rechten"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr "Belangrijke data"
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr "Groepen"
 
-#: contrib/auth/models.py:219
+#: contrib/auth/models.py:258
 msgid "message"
 msgstr "bericht"
 
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Afmelden"
+
 #: contrib/admin/models.py:16
 msgid "action time"
 msgstr "actie tijd"
@@ -618,7 +737,7 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "Alle"
 
@@ -654,12 +773,12 @@
 msgid "Unknown"
 msgstr "Onbekend"
 
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "Aanmelden"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
@@ -667,7 +786,7 @@
 "Uw sessie is verlopen, meldt u opnieuw aan. Maakt u geen zorgen: Uw bijdrage "
 "is opgeslagen."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -675,196 +794,265 @@
 "Het lijkt erop dat uw browser geen cookies accepteerd. Zet het gebruik van "
 "cookies aan in uw browser, laad deze pagina nogmaals en probeer het opnieuw."
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "Gebruikersnamen mogen geen '@' bevatten."
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Uw e-mailadres is niet uw gebruikersnaam. Probeer '%s' eens."
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
 msgstr "Site beheer"
 
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:18
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "De %(name)s \"%(obj)s\" is toegevoegd."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:23
 msgid "You may edit it again below."
 msgstr "U kunt dit hieronder weer bewerken."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
 msgstr "U kunt hieronder de volgende %s toevoegen."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr "Toevoegen %s"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "%s toegevoegd."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "en"
-
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "Gewijzigd %s"
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "%s verwijderd."
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "Geen velden gewijzigd."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Het wijzigen van %(name)s \"%(obj)s\" is geslaagd."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "De %(name)s \"%(obj)s\" was toegevoegd. U kunt het hieronder wijzigen."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "Wijzig %s"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:473
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Een of meer %(fieldname)s in %(name)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:478
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Een of meer %(fieldname)s in %(name)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:511
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "De verwijdering van %(name)s \"%(obj)s\" is geslaagd."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:514
 msgid "Are you sure?"
 msgstr "Weet u het zeker?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:536
 #, python-format
 msgid "Change history: %s"
 msgstr "Wijzigingsgeschiedenis: %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s"
 msgstr "Selecteer %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s to change"
 msgstr "Selecteer %s om te wijzigen"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "Database fout"
+
+#: 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 "filter:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "view:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "App %r niet gevonden"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "Model %r niet gevonden in app %r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "the related `%s.%s` object"
+
+#: 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 `%s.%s` objects"
+msgstr "related `%s.%s` objects"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "alle %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "nummer van %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Velden van %s objects"
+
+#: 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 "Geheel getal"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "Boolean (True of False)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Karakterreeks (hooguit %(maxlength)s)"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "Komma-gescheiden gehele getallen"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "Datum (zonder tijd)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "Datum (met tijd)"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "E-mailadres"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "Bestandspad"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
 msgstr "Decimaal getal"
 
-#: contrib/admin/views/doc.py:289 contrib/comments/models.py:85
+#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85
 msgid "IP address"
 msgstr "IP adres"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "Boolean (True, False of None)"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr "Relatie tot ouder model"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "Telefoonnummer"
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "Tekst"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "Tijd"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
 msgstr "Staat van de VS (twee hoofdletters)"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "XML Tekst"
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s lijkt geen urlpattern object te zijn"
+
+#: contrib/admin/views/auth.py:29
+msgid "Add user"
+msgstr "Gebruiker toevoegen"
+
+#: contrib/admin/templatetags/admin_list.py:230
 msgid "All dates"
 msgstr "Alle data"
 
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Alles tonen"
+
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -875,7 +1063,7 @@
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin_doc/template_filter_index.html:5
 #: contrib/admin/templates/admin_doc/bookmarklets.html:4
 #: contrib/admin/templates/admin_doc/template_tag_index.html:5
@@ -895,7 +1083,7 @@
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/admin/change_list.html:5
 #: contrib/admin/templates/admin/object_history.html:3
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin_doc/template_filter_index.html:5
 #: contrib/admin/templates/admin_doc/bookmarklets.html:4
 #: contrib/admin/templates/admin_doc/template_tag_index.html:5
@@ -908,7 +1096,7 @@
 #: contrib/admin/templates/admin_doc/view_detail.html:4
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/comments/templates/comments/form.html:8
+#: contrib/comments/templates/comments/form.html:6
 msgid "Log out"
 msgstr "Afmelden"
 
@@ -917,7 +1105,8 @@
 #: 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/base.html:28
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/logged_out.html:4
@@ -935,21 +1124,21 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
-"Het verwijderen van %(object_name)s '%(object)s' zal ook gerelateerde "
+"Het verwijderen van %(object_name)s '%(escaped_object)s' zal ook gerelateerde "
 "objecten verwijderen. Echter u heeft geen rechten om de volgende typen "
 "objecten te verwijderen:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"Weet u zeker dat u %(object_name)s \"%(object)s\" wilt verwijderen? Alle "
+"Weet u zeker dat u %(object_name)s \"%(escaped_object)s\" wilt verwijderen? Alle "
 "volgende opjecten worden verwijderd:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
@@ -963,7 +1152,7 @@
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
-msgstr "Onze excuses, maar de gevraagde pagina komt niet voor."
+msgstr "Onze excuses, maar de gevraagde pagina bestaat niet."
 
 #: contrib/admin/templates/admin/change_form.html:15
 #: contrib/admin/templates/admin/index.html:28
@@ -995,8 +1184,8 @@
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
-msgid " By %(title)s "
-msgstr " Op %(title)s "
+msgid " By %(filter_title)s "
+msgstr " Op %(filter_title)s "
 
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
@@ -1024,6 +1213,11 @@
 msgid "Models available in the %(name)s application."
 msgstr "Beschikbare modellen in de %(name)s toepassing."
 
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
 #: contrib/admin/templates/admin/index.html:34
 msgid "Change"
 msgstr "Wijzigen"
@@ -1096,10 +1290,33 @@
 "Er is een fout opgetreden. Dit is inmiddels doorgegeven aan de sitebeheerder "
 "via e-mail en zal spoedig worden gerepareerd. Bedankt voor uw geduld."
 
+#: 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 "Er is iets mis met de database. Verzeker u ervan dat de benodigde tabellen zijn aangemaakt en dat de database toegankelijk is voor de juiste gebruiker."
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
 msgstr "Zoek"
 
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 resultaat"
+msgstr[1] "%(counter)s resultaten"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s totaal"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filter"
+
 #: contrib/admin/templates/admin/login.html:17
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
@@ -1107,18 +1324,36 @@
 msgstr "Gebruikersnaam:"
 
 #: contrib/admin/templates/admin/login.html:20
-#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
 msgid "Password:"
 msgstr "Wachtwoord:"
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Wachtwoord <a href=\"/password_reset/\">vergeten</a>?"
-
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "Welkom,"
 
+#: 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 "Vul allereerst een gebruikersnaam en wachtwoord in. Vervolgens kunt u de andere opties instellen."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Wachtwoord (nogmaals)"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr "Vul hetzelfde wachtwoord als hierboven in, ter bevestiging."
+
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
 msgstr "Bookmarklets"
@@ -1291,8 +1526,9 @@
 "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 ""
-"Vanwege de beveiliging moet u uw oude en twee keer een nieuw wachtwoord"
-"invoeren, zodat we kunnen controleren of er geen typefouten zijn gemaakt."
+"Vanwege de beveiliging moet u uw oude en twee keer een nieuw "
+"wachtwoordinvoeren, zodat we kunnen controleren of er geen typefouten zijn "
+"gemaakt."
 
 #: contrib/admin/templates/registration/password_change_form.html:17
 msgid "Old password:"
@@ -1338,8 +1574,7 @@
 #: contrib/flatpages/models.py:8
 msgid ""
 "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Voorbeeld: '/about/contact/'. Zorg voor slashes aan het begin en eind."
+msgstr "Voorbeeld: '/about/contact/'. Zorg voor slashes aan het begin en eind."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
@@ -1359,11 +1594,11 @@
 
 #: contrib/flatpages/models.py:13
 msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
 msgstr ""
 "Voorbeeld: 'flatpages/contact_page'. Als deze niet is opgegeven, dan wordt "
-"'flatpages/default' gebruikt."
+"'flatpages/default.html' gebruikt."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1407,11 +1642,11 @@
 "Dit kan een absoluut pad (zoals hierboven) zijn of een volledige URL "
 "beginnend met 'http://'."
 
-#: contrib/redirects/models.py:12
+#: contrib/redirects/models.py:13
 msgid "redirect"
 msgstr "omleiding"
 
-#: contrib/redirects/models.py:13
+#: contrib/redirects/models.py:14
 msgid "redirects"
 msgstr "omleidingen"
 
@@ -1605,14 +1840,14 @@
 msgid "No voting for yourself"
 msgstr "Niet op uzelf stemmen"
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid ""
 "This rating is required because you've entered at least one other rating."
 msgstr ""
 "Deze waardering is verplicht omdat u tenminste één andere waardering hebt "
 "ingevoerd."
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -1635,7 +1870,7 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
@@ -1646,22 +1881,22 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "Alleen POSTs zijn toegestaan"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "Een of meerdere verplichte velden zijn niet ingevuld"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
 msgstr "Iemand heeft het opmerkingenformulier gewijzigd (Beveilingsinbreuk)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
@@ -1675,7 +1910,7 @@
 msgid "The comment form didn't provide either 'preview' or 'post'"
 msgstr "Het opmerkingenformulier heeft geen 'voorbeeld' of 'post'"
 
-#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
 msgid "Forgotten your password?"
 msgstr "Uw wachtwoord vergeten?"
 
@@ -1697,13 +1932,13 @@
 msgid "Post a photo"
 msgstr "Plaats een foto"
 
-#: contrib/comments/templates/comments/form.html:27
+#: contrib/comments/templates/comments/form.html:28
 #: contrib/comments/templates/comments/freeform.html:5
 msgid "Comment:"
 msgstr "Opmerking:"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
 msgid "Preview comment"
 msgstr "Concept opmerking"
 
@@ -1711,70 +1946,85 @@
 msgid "Your name:"
 msgstr "Uw gebruikersnaam:"
 
-#: contrib/sessions/models.py:35
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "sessiesleutel"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "sessiegegevens"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "verloopdatum"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "sessie"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "sessies"
 
-#: contrib/contenttypes/models.py:25
+#: contrib/contenttypes/models.py:20
 msgid "python model class name"
 msgstr "python model-class-naam"
 
-#: contrib/contenttypes/models.py:28
+#: contrib/contenttypes/models.py:23
 msgid "content type"
 msgstr "inhoudstype"
 
-#: contrib/contenttypes/models.py:29
+#: contrib/contenttypes/models.py:24
 msgid "content types"
 msgstr "inhoudstypen"
 
-#: forms/__init__.py:380
+#: forms/__init__.py:387
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
 msgstr[0] "Zorg ervoor dat uw tekst korter is dan %s karakter."
 msgstr[1] "Zorg ervoor dat uw tekst korter is dan %s karakters."
 
-#: forms/__init__.py:385
+#: forms/__init__.py:392
 msgid "Line breaks are not allowed here."
 msgstr "Regeleindes zijn niet toegestaan."
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: forms/__init__.py:493 forms/__init__.py:566 forms/__init__.py:605
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
 msgstr "Selecteer een geldige keuze; '%(data)s is niet in %(choices)s."
 
-#: forms/__init__.py:645
+#: forms/__init__.py:669
 msgid "The submitted file is empty."
 msgstr "Het gegeven bestand is leeg."
 
-#: forms/__init__.py:699
+#: forms/__init__.py:725
 msgid "Enter a whole number between -32,768 and 32,767."
 msgstr "Geef een geheel getal op tussen -32.768 en 32.767."
 
-#: forms/__init__.py:708
+#: forms/__init__.py:735
 msgid "Enter a positive number."
 msgstr "Geef een geheel getal op."
 
-#: forms/__init__.py:717
+#: forms/__init__.py:745
 msgid "Enter a whole number between 0 and 32,767."
 msgstr "Geef een geheel getal op tussen 0 en 32.767."
 
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "De %(verbose_name)s is succesvol aangemaakt."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "De %(verbose_name)s is succesvol aangepast."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "De %(verbose_name)s is verwijderd."
+
 #: utils/dates.py:6
 msgid "Monday"
 msgstr "maandag"
@@ -1927,18 +2177,6 @@
 msgid "Dec."
 msgstr "dec."
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "d-n-Y"
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "d-n-Y H:i"
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "H:i"
-
 #: utils/timesince.py:12
 msgid "year"
 msgid_plural "years"
@@ -1975,7 +2213,65 @@
 msgstr[0] "minuut"
 msgstr[1] "minuten"
 
-#: template/defaultfilters.py:379
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "j-n-Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "j-n-Y H:i"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "H:i"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "j F"
+
+#: template/defaultfilters.py:401
 msgid "yes,no,maybe"
 msgstr "ja,nee,misschien"
 
+#: newforms/fields.py:82
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Zorg ervoor de waarde korter is dan %d tekens."
+
+#: newforms/fields.py:84
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Zorg ervoor dat uw tekst langer is dan %d tekens."
+
+#: newforms/fields.py:135
+msgid "Enter a valid date."
+msgstr "Geef een geldige datum op."
+
+#: newforms/fields.py:171
+msgid "Enter a valid date/time."
+msgstr "Geef een geldige datum/tijd op."
+
+#: newforms/fields.py:184
+msgid "Enter a valid value."
+msgstr "Geef een geldige waarde."
+
+#: newforms/fields.py:225 newforms/fields.py:245
+msgid "Enter a valid URL."
+msgstr "Geef een geldige URL op."
+
+#: newforms/fields.py:247
+msgid "This URL appears to be a broken link."
+msgstr "Deze URL schijnt niet te werken."
+
+#: newforms/fields.py:276 newforms/fields.py:301
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Selecteer een geldige keuze. %s is niet onderdeel van de beschikbare keuzes ."
+
+#: newforms/fields.py:292
+msgid "Enter a list of values."
+msgstr "Geef een lijst op met waardes."

Modified: vendor/django/current/django/conf/locale/no/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/no/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/no/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/no/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -264,7 +264,7 @@
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr "En eller flere av feltene som er krevd ble ikke sendt."
+msgstr "En eller flere av feltene som er påkrevd ble ikke sendt."
 
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
@@ -371,35 +371,32 @@
 msgstr "Alle"
 
 #: contrib/admin/filterspecs.py:109
-#, fuzzy
 msgid "Any date"
-msgstr "Alle datoer"
+msgstr "NÃ¥r som helst"
 
 #: contrib/admin/filterspecs.py:110
-#, fuzzy
 msgid "Today"
-msgstr "Mondag"
+msgstr "I dag"
 
 #: contrib/admin/filterspecs.py:113
 msgid "Past 7 days"
-msgstr ""
+msgstr "Siste 7 dager"
 
 #: contrib/admin/filterspecs.py:115
 msgid "This month"
-msgstr ""
+msgstr "Denne måneden"
 
 #: contrib/admin/filterspecs.py:117
 msgid "This year"
-msgstr ""
+msgstr "I år"
 
 #: contrib/admin/filterspecs.py:143
 msgid "Yes"
-msgstr ""
+msgstr "Ja"
 
 #: contrib/admin/filterspecs.py:143
-#, fuzzy
 msgid "No"
-msgstr "Nov."
+msgstr "Nei"
 
 #: contrib/admin/filterspecs.py:150
 msgid "Unknown"
@@ -443,11 +440,13 @@
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
 msgstr ""
+"Vær snill å angi korrekt brukernavn og passord. La merke til at små og "
+"store bokstaver er betraktet ulik."
 
 #: contrib/admin/views/decorators.py:23
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
-msgstr "Log inn"
+msgstr "Logg inn"
 
 #: contrib/admin/views/decorators.py:61
 msgid ""
@@ -473,12 +472,11 @@
 #: contrib/admin/views/decorators.py:84
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Epost adressen din er ikke brukernavnet ditt, prøv '%s' i stede."
+msgstr "E-post adressen din er ikke brukernavnet ditt, prøv '%s' i stede."
 
 #: contrib/admin/views/main.py:226
-#, fuzzy
 msgid "Site administration"
-msgstr "Django administrasjon"
+msgstr "Nettsted administrasjon"
 
 #: contrib/admin/views/main.py:260
 #, python-format
@@ -502,7 +500,7 @@
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
-msgstr "La til %s"
+msgstr "Lagt til %s"
 
 #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
@@ -559,7 +557,7 @@
 msgstr "Er du sikker?"
 
 #: contrib/admin/views/main.py:533
-#, fuzzy, python-format
+#, python-format
 msgid "Change history: %s"
 msgstr "Endre historien: %s"
 
@@ -580,7 +578,6 @@
 msgstr "Heltall"
 
 #: contrib/admin/views/doc.py:278
-#, fuzzy
 msgid "Boolean (Either True or False)"
 msgstr "Boolean (Enten \"True\" eller \"False\")"
 
@@ -603,7 +600,7 @@
 
 #: contrib/admin/views/doc.py:283
 msgid "E-mail address"
-msgstr "Epost adresse"
+msgstr "E-post adresse"
 
 #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
 msgid "File path"
@@ -614,13 +611,12 @@
 msgstr "Desimal tall"
 
 #: contrib/admin/views/doc.py:291
-#, fuzzy
 msgid "Boolean (Either True, False or None)"
 msgstr "Boolean (enten \"True\", \"False\" eller \"None\")"
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr ""
+msgstr "Relasjon til forelder modell"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
@@ -636,7 +632,7 @@
 
 #: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
 msgid "URL"
-msgstr "Internettadresse"
+msgstr "URL"
 
 #: contrib/admin/views/doc.py:301
 msgid "U.S. state (two uppercase letters)"
@@ -756,12 +752,12 @@
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
-msgstr "Beklager, men siden du spør etter finnest ikke."
+msgstr "Beklager, men siden du spør etter finnes ikke."
 
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modeller fra applikasjonen %(name)s."
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
@@ -813,7 +809,7 @@
 "objects, but your account doesn't have permission to delete the following "
 "types of objects:"
 msgstr ""
-"Vist du sletter %(object_name)s '%(object)s' vill du også slette relaterte "
+"Hivs du sletter %(object_name)s '%(object)s' vil du også slette relaterte "
 "objekter, men du har ikke tillatelse til å slette de følgende objektene:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
@@ -836,11 +832,11 @@
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
-msgstr ""
+msgstr "GÃ¥"
 
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
-msgstr "Vis på siden"
+msgstr "Vis på nettsted"
 
 #: contrib/admin/templates/admin/change_form.html:30
 msgid "Please correct the error below."
@@ -900,12 +896,12 @@
 "Forgotten your password? Enter your e-mail address below, and we'll reset "
 "your password and e-mail the new one to you."
 msgstr ""
-"Har du glemt passordet ditt? Skriv inn epost adressen din under, så sender "
-"vi deg et nytt passord via epost."
+"Har du glemt passordet ditt? Skriv inn e-post adressen din under, så sender "
+"vi deg et nytt passord via e-post."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
-msgstr "Epost adresse:"
+msgstr "E-post adresse:"
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
@@ -917,7 +913,7 @@
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
-msgstr "Log inn igjen"
+msgstr "Logg inn igjen"
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -929,7 +925,7 @@
 "We've e-mailed a new password to the e-mail address you submitted. You "
 "should be receiving it shortly."
 msgstr ""
-"Vi sender deg et nytt passord til epost adressen du oppgav. Du villmotta det "
+"Vi sender deg et nytt passord til e-post adressen du oppgav. Du villmotta det "
 "snart."
 
 #: contrib/admin/templates/registration/password_change_form.html:12
@@ -959,7 +955,7 @@
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
 msgstr ""
-"Du har mottatt denne epost-en fordi du ba om å tilbakestille passordet ditt"
+"Du har mottatt denne e-posten fordi du ba om å tilbakestille passordet ditt"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
@@ -1036,10 +1032,9 @@
 msgstr "Endre dette objektet (Ã¥pnes i dette vinduet)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
-#, fuzzy
 msgid "Jumps to the admin page for pages that represent a single object."
 msgstr ""
-"Hopp til administrasjonsiden for siden som representerer et enkelt objekt."
+"Hopp til administrasjonsiden for sidene som representerer et enkelt objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
@@ -1051,21 +1046,19 @@
 
 #: contrib/admin/templates/widget/date_time.html:3
 msgid "Date:"
-msgstr ""
+msgstr "Dato:"
 
 #: contrib/admin/templates/widget/date_time.html:4
-#, fuzzy
 msgid "Time:"
-msgstr "Tid"
+msgstr "Tid:"
 
 #: contrib/admin/templates/widget/file.html:2
 msgid "Currently:"
-msgstr ""
+msgstr "NÃ¥:"
 
 #: contrib/admin/templates/widget/file.html:3
-#, fuzzy
 msgid "Change:"
-msgstr "Endre"
+msgstr "Endre:"
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
@@ -1126,7 +1119,7 @@
 "Example: 'flatpages/contact_page'. If this isn't provided, the system will "
 "use 'flatpages/default'."
 msgstr ""
-"Eksempel: 'flatfiler/kontakt_side'. Vist denne ikke denne er gitt, vill "
+"Eksempel: 'flatfiler/kontakt_side'. Hvis denne ikke denne er gitt, vill "
 "'flatfiles/default' bli brukt."
 
 #: contrib/flatpages/models.py:14
@@ -1136,7 +1129,7 @@
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
 msgstr ""
-"Vist denne er krysset av er det bare brukere som er logget inn som kan se "
+"Hvis denne er krysset av er det bare brukere som er logget inn som kan se "
 "siden."
 
 #: contrib/flatpages/models.py:18
@@ -1156,24 +1149,20 @@
 msgstr "kodenavn"
 
 #: contrib/auth/models.py:17
-#, fuzzy
 msgid "permission"
-msgstr "Rettighet"
+msgstr "rettighet"
 
 #: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
 msgid "permissions"
-msgstr "Rettigheter"
+msgstr "rettigheter"
 
 #: contrib/auth/models.py:29
-#, fuzzy
 msgid "group"
-msgstr "Gruppe"
+msgstr "gruppe"
 
 #: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
 msgid "groups"
-msgstr "Grupper"
+msgstr "grupper"
 
 #: contrib/auth/models.py:55
 msgid "username"
@@ -1205,7 +1194,7 @@
 
 #: contrib/auth/models.py:60
 msgid "Designates whether the user can log into this admin site."
-msgstr "Bestemmer om brukeren kan logge inn på denne administrasjons siden."
+msgstr "Bestemmer om brukeren kan logge inn på dette administrasjons sted."
 
 #: contrib/auth/models.py:61
 msgid "active"
@@ -1217,7 +1206,7 @@
 
 #: contrib/auth/models.py:63
 msgid "last login"
-msgstr "liste logg inn"
+msgstr "siste logg inn"
 
 #: contrib/auth/models.py:64
 msgid "date joined"
@@ -1232,19 +1221,16 @@
 "tilgang til gruppene han/hun er i."
 
 #: contrib/auth/models.py:67
-#, fuzzy
 msgid "user permissions"
 msgstr "Rettigheter"
 
 #: contrib/auth/models.py:70
-#, fuzzy
 msgid "user"
-msgstr "Bruker"
+msgstr "bruker"
 
 #: contrib/auth/models.py:71
-#, fuzzy
 msgid "users"
-msgstr "Brukere"
+msgstr "brukere"
 
 #: contrib/auth/models.py:76
 msgid "Personal info"
@@ -1263,9 +1249,8 @@
 msgstr "Grupper"
 
 #: contrib/auth/models.py:219
-#, fuzzy
 msgid "message"
-msgstr "Meldinger"
+msgstr "Melding"
 
 #: contrib/auth/forms.py:30
 msgid ""
@@ -1274,9 +1259,8 @@
 msgstr ""
 
 #: contrib/contenttypes/models.py:25
-#, fuzzy
 msgid "python model class name"
-msgstr "python modul navn"
+msgstr "python modell klasse navn"
 
 #: contrib/contenttypes/models.py:28
 msgid "content type"
@@ -1312,23 +1296,23 @@
 
 #: contrib/sites/models.py:11
 msgid "display name"
-msgstr "vist navn"
+msgstr "vise navn"
 
 #: contrib/sites/models.py:15
 msgid "site"
-msgstr "side"
+msgstr "nettsted"
 
 #: contrib/sites/models.py:16
 msgid "sites"
-msgstr "sider"
+msgstr "nettsteder"
 
 #: utils/translation.py:360
 msgid "DATE_FORMAT"
-msgstr "j. M U"
+msgstr "j. M Y"
 
 #: utils/translation.py:361
 msgid "DATETIME_FORMAT"
-msgstr "j. M U - h:i"
+msgstr "j. M Y - h:i"
 
 #: utils/translation.py:362
 msgid "TIME_FORMAT"
@@ -1336,7 +1320,7 @@
 
 #: utils/dates.py:6
 msgid "Monday"
-msgstr "Mondag"
+msgstr "Mandag"
 
 #: utils/dates.py:6
 msgid "Tuesday"
@@ -1411,54 +1395,52 @@
 msgstr "Desember"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "jan"
-msgstr "og"
+msgstr "jan"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "feb"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mar"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "apr"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "may"
-msgstr "Mai"
+msgstr "mai"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "jun"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "jul"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "aug"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "sep"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "okt"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "des"
 
 #: utils/dates.py:27
 msgid "Jan."
@@ -1466,7 +1448,7 @@
 
 #: utils/dates.py:27
 msgid "Feb."
-msgstr "Fef."
+msgstr "Feb."
 
 #: utils/dates.py:28
 msgid "Aug."
@@ -1491,40 +1473,38 @@
 #: utils/timesince.py:12
 msgid "year"
 msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ã¥r"
+msgstr[1] "Ã¥r"
 
 #: utils/timesince.py:13
 msgid "month"
 msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "måned"
+msgstr[1] "måndeder"
 
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "uke"
+msgstr[1] "uker"
 
 #: utils/timesince.py:15
-#, fuzzy
 msgid "day"
 msgid_plural "days"
-msgstr[0] "Mai"
-msgstr[1] "Mai"
+msgstr[0] "dag"
+msgstr[1] "dager"
 
 #: utils/timesince.py:16
 msgid "hour"
 msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "time"
+msgstr[1] "timer"
 
 #: utils/timesince.py:17
-#, fuzzy
 msgid "minute"
 msgid_plural "minutes"
-msgstr[0] "side"
-msgstr[1] "side"
+msgstr[0] "minutt"
+msgstr[1] "minutter"
 
 #: conf/global_settings.py:37
 msgid "Bengali"
@@ -1548,7 +1528,7 @@
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Gresk"
 
 #: conf/global_settings.py:43
 msgid "English"
@@ -1568,11 +1548,11 @@
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Ungarsk"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Hebraiske"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
@@ -1584,11 +1564,11 @@
 
 #: conf/global_settings.py:51
 msgid "Japanese"
-msgstr ""
+msgstr "Japansk"
 
 #: conf/global_settings.py:52
 msgid "Dutch"
-msgstr ""
+msgstr "Nederlandsk"
 
 #: conf/global_settings.py:53
 msgid "Norwegian"
@@ -1600,7 +1580,7 @@
 
 #: conf/global_settings.py:55
 msgid "Romanian"
-msgstr "Romansk"
+msgstr "Rumensk"
 
 #: conf/global_settings.py:56
 msgid "Russian"
@@ -1611,9 +1591,8 @@
 msgstr "Slovakisk"
 
 #: conf/global_settings.py:58
-#, fuzzy
 msgid "Slovenian"
-msgstr "Slovakisk"
+msgstr "Slovensk"
 
 #: conf/global_settings.py:59
 msgid "Serbian"
@@ -1624,9 +1603,8 @@
 msgstr "Svensk"
 
 #: conf/global_settings.py:61
-#, fuzzy
 msgid "Ukrainian"
-msgstr "Brasiliansk"
+msgstr "Ukrainsk"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
@@ -1634,14 +1612,13 @@
 
 #: conf/global_settings.py:63
 msgid "Traditional Chinese"
-msgstr ""
+msgstr "Tradisjonell Kinesisk"
 
 #: core/validators.py:60
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Dette feltet må bare inneholde bokstaver, nummer og understreker."
 
 #: core/validators.py:64
-#, fuzzy
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
@@ -1651,7 +1628,7 @@
 
 #: core/validators.py:72
 msgid "Uppercase letters are not allowed here."
-msgstr "Tor skrift er ikke tillatt her."
+msgstr "Stor bokstaver er ikke tillatt her."
 
 #: core/validators.py:76
 msgid "Lowercase letters are not allowed here."
@@ -1687,19 +1664,19 @@
 
 #: core/validators.py:120
 msgid "Only alphabetical characters are allowed here."
-msgstr "Bare alfabetiske bokstaber er tillatt her."
+msgstr "Bare alfabetiske bokstaver er tillatt her."
 
 #: core/validators.py:124
 msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Skriv inn en dato i Ã…Ã…Ã…Ã…-MM-DD formatet."
+msgstr "Skriv inn en dato i Ã…Ã…Ã…Ã…-MM-DD format."
 
 #: core/validators.py:128
 msgid "Enter a valid time in HH:MM format."
-msgstr "Skriv inn tiden i TT:MM formatet."
+msgstr "Skriv inn tiden i TT:MM format."
 
 #: core/validators.py:132 db/models/fields/__init__.py:468
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Skriv inn dato og tid i Ã…Ã…Ã…Ã…-MM-DD TT:MM formatet."
+msgstr "Skriv inn dato og tid i Ã…Ã…Ã…Ã…-MM-DD TT:MM format."
 
 #: core/validators.py:136
 msgid "Enter a valid e-mail address."
@@ -1722,7 +1699,7 @@
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr ""
-"Telefon nummeret må være i XXX-XXX-XXXX formatet. \"%s\" er ikke godkjent."
+"Telefon nummeret må være i XXX-XXX-XXXX format. \"%s\" er ikke godkjent."
 
 #: core/validators.py:167
 #, python-format
@@ -1731,7 +1708,7 @@
 
 #: core/validators.py:171
 msgid "A valid URL is required."
-msgstr "En godkjent internettadresse er påbudt."
+msgstr "En godkjent internettadresse er påkrevd."
 
 #: core/validators.py:185
 #, python-format
@@ -1739,7 +1716,7 @@
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
-"Godkjent HTML er påbudt. Feilene var:\n"
+"Godkjent HTML er påkrevd. Feilene var:\n"
 "%s"
 
 #: core/validators.py:192
@@ -1750,7 +1727,7 @@
 #: core/validators.py:202
 #, python-format
 msgid "Invalid URL: %s"
-msgstr "Ikke godkjent internettadresse: %s"
+msgstr "Ikke godkjent URL: %s"
 
 #: core/validators.py:206 core/validators.py:208
 #, python-format
@@ -1759,7 +1736,7 @@
 
 #: core/validators.py:214
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "Skriv inn en godkjent amerikansk stats forkortelse."
+msgstr "Skriv inn en godkjent amerikansk delstat forkortelse."
 
 #: core/validators.py:229
 #, python-format
@@ -1771,7 +1748,7 @@
 #: core/validators.py:236
 #, python-format
 msgid "This field must match the '%s' field."
-msgstr "Dette felte må være det samme som i '%s' feltet."
+msgstr "Dette feltet må være det samme som i '%s' feltet."
 
 #: core/validators.py:255
 msgid "Please enter something for at least one field."
@@ -1784,12 +1761,12 @@
 #: core/validators.py:282
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Dette feltet må bare brukes vist %(field)s er lik %(value)s"
+msgstr "Dette feltet må bare brukes hvis %(field)s er lik %(value)s"
 
 #: core/validators.py:294
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Dette feltet må bare brukes vist %(field)s ikke er lik %(value)s"
+msgstr "Dette feltet må bare brukes hvis %(field)s ikke er lik %(value)s"
 
 #: core/validators.py:313
 msgid "Duplicate values are not allowed."
@@ -1824,13 +1801,13 @@
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr ""
-"Er du sikker på at fila du prøver å laste opp er minimum %s bytes stor?"
+"Vær sikker på at fila du prøver å laste opp er minimum %s bytes stor."
 
 #: core/validators.py:363
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr ""
-"Er du sikker på at fila du prøver å laste opp er maksimum %s bytes stor?"
+"Vær sikker på at fila du prøver å laste opp er maksimum %s bytes stor."
 
 #: core/validators.py:376
 msgid "The format for this field is wrong."
@@ -1850,7 +1827,7 @@
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr ""
-"Tnternettadressen %(url)s returnerte en ikke godkjent Content-Type '%"
+"Internettadressen %(url)s returnerte en ikke godkjent Content-Type '%"
 "(contenttype)s'."
 
 #: core/validators.py:462
@@ -1859,7 +1836,7 @@
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
 "\"%(start)s\".)"
 msgstr ""
-"Vennligst lukk taggen %(tag)s på linje %(line)s. (Linja starer med \"%(start)"
+"Vennligst lukk taggen %(tag)s på linje %(line)s. (Linjen starer med \"%(start)"
 "s\".)"
 
 #: core/validators.py:466
@@ -1868,7 +1845,7 @@
 "Some text starting on line %(line)s is not allowed in that context. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
-"Noe av teksten som starter på linje %(line)s er ikke tillatt. (Linja starter "
+"Noe av teksten som starter på linje %(line)s er ikke tillatt. (Linjen starter "
 "med \"%(start)s\".)"
 
 #: core/validators.py:471
@@ -1877,7 +1854,7 @@
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
-"\"%(attr)s\" på linje %(line)s er ikke en godkjent tillegg. (Linja starter "
+"\"%(attr)s\" på linje %(line)s er ikke en godkjent tillegg. (Linjen starter "
 "med \"%(start)s\".)"
 
 #: core/validators.py:476
@@ -1886,7 +1863,7 @@
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
 "(start)s\".)"
 msgstr ""
-"\"<%(tag)s>\" på linje %(line)s er ikke en godkjent tag. (linja starter med "
+"\"<%(tag)s>\" på linje %(line)s er ikke en godkjent tag. (linjen starter med "
 "\"%(start)s\".)"
 
 #: core/validators.py:480
@@ -1895,7 +1872,7 @@
 "A tag on line %(line)s is missing one or more required attributes. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
-"En tag på linje %(line)s mangler en av de påbydte tillegga. (linja starter "
+"En tag på linje %(line)s mangler en av de påkrevde attributtene. (linjen starter "
 "med \"%(start)s\".)"
 
 #: core/validators.py:485
@@ -1904,13 +1881,13 @@
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
 "starts with \"%(start)s\".)"
 msgstr ""
-"\"%(attr)s\" tillegg på linje $(line)s har en ikke godkjent verdi. (Linja "
+"\"%(attr)s\" tillegg på linje $(line)s har en ikke godkjent verdi. (Linjen "
 "starter med \"%(start)s\".)"
 
 #: db/models/manipulators.py:302
-#, fuzzy, python-format
+#, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "$(optname)s med %(fieldname)s finnes allerede."
+msgstr "%(object)s med %(type)s finnes allerede for angitt %(field)s."
 
 #: db/models/fields/__init__.py:40
 #, python-format
@@ -1924,37 +1901,31 @@
 msgstr "Dette feltet er påkrevd."
 
 #: db/models/fields/__init__.py:337
-#, fuzzy
 msgid "This value must be an integer."
-msgstr "Denne verdien må være 'power' av %s."
+msgstr "Denne verdien må være et heltall."
 
 #: db/models/fields/__init__.py:369
-#, fuzzy
 msgid "This value must be either True or False."
-msgstr "Denne verdien må være 'power' av %s."
+msgstr "Denne verdien må være enten \"True\" eller \"False\"."
 
 #: db/models/fields/__init__.py:385
-#, fuzzy
 msgid "This field cannot be null."
-msgstr "Dette feltet er feil."
+msgstr "Dette feltet kan ikke være null/tom."
 
 #: db/models/fields/__init__.py:562
-#, fuzzy
 msgid "Enter a valid filename."
-msgstr "Skriv inn en godkjent e-post adresse."
+msgstr "Skriv inn et godkjent fil navn."
 
 #: db/models/fields/related.py:43
-#, fuzzy, python-format
+#, python-format
 msgid "Please enter a valid %s."
-msgstr "Vennligst skriv inn en godkjent IP adresse."
+msgstr "Vennligst skriv inn en/et gyldig %s."
 
 #: db/models/fields/related.py:579
-#, fuzzy
 msgid "Separate multiple IDs with commas."
 msgstr "Separer Id-ene med kommaer."
 
 #: db/models/fields/related.py:581
-#, fuzzy
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
@@ -1965,14 +1936,14 @@
 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] ""
+msgstr[0] "Skriv inn gyldige %(self)s ID-er. Verdien %(value)r er ikke gyldig."
+msgstr[1] "Skriv inn gyldige %(self)s ID-er. Verdiene %(value)r er ikke gyldige."
 
 #: forms/__init__.py:380
-#, fuzzy, python-format
+#, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Sjekk at teksten er kortere enn %s bokstaver"
+msgstr[0] "Sjekk at teksten er kortere enn %s bokstav"
 msgstr[1] "Sjekk at teksten er kortere enn %s bokstaver"
 
 #: forms/__init__.py:385
@@ -1982,7 +1953,7 @@
 #: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Velg et av valga; '%(data)s' er ikke i %(choices)s."
+msgstr "Velg et gyldig valg; '%(data)s' er ikke i %(choices)s."
 
 #: forms/__init__.py:645
 msgid "The submitted file is empty."
@@ -2002,7 +1973,7 @@
 
 #: template/defaultfilters.py:379
 msgid "yes,no,maybe"
-msgstr ""
+msgstr "ja,nei,kanskje"
 
 #, fuzzy
 #~ msgid "Comments"

Modified: vendor/django/current/django/conf/locale/no/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/no/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/no/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/no/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -61,6 +61,15 @@
 msgid "S M T W T F S"
 msgstr "S M T O T F L"
 
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr "Vis"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr "Skjul"
+
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Now"
@@ -80,7 +89,7 @@
 
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
 msgid "6 a.m."
-msgstr "18.00"
+msgstr "06.00"
 
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
 msgid "Noon"

Modified: vendor/django/current/django/conf/locale/pl/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/pl/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/pl/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/pl/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -126,12 +126,10 @@
 msgstr "zaakceptowano"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
 msgstr "wolny komentarz"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
 msgstr "wolne komentarze"
 
@@ -144,7 +142,6 @@
 msgstr "data przyznania punktów"
 
 #: contrib/comments/models.py:237
-#, fuzzy
 msgid "karma score"
 msgstr "ilość punktów"
 
@@ -243,6 +240,9 @@
 "\n"
 "%(text)s"
 msgstr ""
+"Ten komentarze został dodany przez użytkownika::\n"
+"\n"
+"%(text)s"
 
 #: contrib/comments/views/comments.py:189
 #: contrib/comments/views/comments.py:280
@@ -257,19 +257,20 @@
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr ""
+msgstr "Ktoś próbował obejść zabezpieczenia formularza komentarzy"
 
 #: contrib/comments/views/comments.py:207
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
 "invalid"
-msgstr ""
+msgstr "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 ""
+msgstr "Formularz komentarza nie zapewnił obiektów 'preview' ani 'post'"
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
@@ -600,7 +601,7 @@
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr ""
+msgstr "Relacja do modelu rodzica"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
@@ -794,6 +795,9 @@
 "objects, but your account doesn't have permission to delete the following "
 "types of objects:"
 msgstr ""
+"Skasowanie %(object_name)s '%(object)s' spowoduje kasację zależnych "
+"obiektów, lecz twoje uprawnienia nie pozwalają na usunięcie następujących "
+"typów obiektów:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
@@ -801,6 +805,8 @@
 "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
 "the following related items will be deleted:"
 msgstr ""
+"Czy chcesz skasować %(object_name)s \"%(object)s\"? Wszystkie "
+"zależne obiekty zostaną skasowane:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -820,11 +826,10 @@
 msgstr "Pokaż na stronie"
 
 #: contrib/admin/templates/admin/change_form.html:30
-#, fuzzy
 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ższy błąd"
+msgstr[1] "Proszę popraw poniższe błędy"
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
@@ -965,11 +970,11 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
-msgstr ""
+msgstr "Zakładki"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:5
 msgid "Documentation bookmarklets"
-msgstr ""
+msgstr "Zakładki Dokumentacji"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:9
 msgid ""
@@ -1094,6 +1099,8 @@
 "Example: 'flatpages/contact_page'. If this isn't provided, the system will "
 "use 'flatpages/default'."
 msgstr ""
+"Przykład: 'flatpages/contact_page'. Jeżeli nie podane system użyje "
+"'flatpages/default'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1105,11 +1112,11 @@
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
-msgstr ""
+msgstr "strona statyczna"
 
 #: contrib/flatpages/models.py:19
 msgid "flat pages"
-msgstr ""
+msgstr "strony statyczne"
 
 #: contrib/auth/models.py:13 contrib/auth/models.py:26
 msgid "name"
@@ -1117,7 +1124,7 @@
 
 #: contrib/auth/models.py:15
 msgid "codename"
-msgstr ""
+msgstr "nazwa kodowa"
 
 #: contrib/auth/models.py:17
 msgid "permission"
@@ -1161,11 +1168,11 @@
 
 #: contrib/auth/models.py:60
 msgid "staff status"
-msgstr "stan w zespole"
+msgstr "w zespole"
 
 #: contrib/auth/models.py:60
 msgid "Designates whether the user can log into this admin site."
-msgstr "Oznaczy czy użytkownik może zalogować się do panelu admina."
+msgstr "Oznacza czy użytkownik może zalogować się do panelu admina."
 
 #: contrib/auth/models.py:61
 msgid "active"
@@ -1195,15 +1202,14 @@
 msgid "user permissions"
 msgstr "uprawnienia użytkownika"
 
+#kurwa
 #: contrib/auth/models.py:70
-#, fuzzy
 msgid "user"
-msgstr "Użytkownik"
+msgstr "użytkownik"
 
 #: contrib/auth/models.py:71
-#, fuzzy
 msgid "users"
-msgstr "Uzytkownicy"
+msgstr "użytkownicy"
 
 #: contrib/auth/models.py:76
 msgid "Personal info"
@@ -1222,7 +1228,6 @@
 msgstr "Grupy"
 
 #: contrib/auth/models.py:219
-#, fuzzy
 msgid "message"
 msgstr "wiadomość"
 
@@ -1371,7 +1376,6 @@
 msgstr "Grudzień"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "jan"
 msgstr "sty"
 
@@ -1472,11 +1476,10 @@
 msgstr[1] "dni"
 
 #: utils/timesince.py:16
-#, fuzzy
 msgid "hour"
 msgid_plural "hours"
 msgstr[0] "godzina"
-msgstr[1] "godzina"
+msgstr[1] "godzin"
 
 #: utils/timesince.py:17
 msgid "minute"
@@ -1569,7 +1572,6 @@
 msgstr "SÅ‚owacki"
 
 #: conf/global_settings.py:58
-#, fuzzy
 msgid "Slovenian"
 msgstr "SÅ‚owacki"
 
@@ -1582,9 +1584,8 @@
 msgstr "Szwedzki"
 
 #: conf/global_settings.py:61
-#, fuzzy
 msgid "Ukrainian"
-msgstr "Brazylijski"
+msgstr "Ukraiński"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
@@ -1715,14 +1716,14 @@
 
 #: core/validators.py:214
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "Wpisz poprawny kod stanu U.S."
+msgstr "Wpisz poprawny kod stanu U.S.A."
 
 #: core/validators.py:229
-#, fuzzy, python-format
+#, 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 jest niedozwolone."
-msgstr[1] "Nie wolno przeklinać! Słowo %s jest niedozwolone."
+msgstr[1] "Nie wolno przeklinać! Słowa %s są niedozwolone."
 
 #: core/validators.py:236
 #, python-format
@@ -1745,11 +1746,11 @@
 #: core/validators.py:294
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr ""
+msgstr "To pole musi być wypełnione jeżeli %(field)s nie jest %(value)s"
 
 #: core/validators.py:313
 msgid "Duplicate values are not allowed."
-msgstr ""
+msgstr "Duplikaty sÄ… niedozwolone."
 
 #: core/validators.py:336
 #, python-format
@@ -1761,20 +1762,20 @@
 msgstr "Proszę wpisać poprawną liczbę dziesiętną."
 
 #: core/validators.py:349
-#, fuzzy, python-format
+#, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
 msgid_plural ""
 "Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną."
-msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną."
+msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż  %s cyfry."
+msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż  %s cyfr."
 
 #: core/validators.py:352
-#, fuzzy, python-format
+#, 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ą."
-msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną."
+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."
 
 #: core/validators.py:362
 #, python-format
@@ -1797,13 +1798,14 @@
 #: core/validators.py:426
 #, python-format
 msgid "Could not retrieve anything from %s."
-msgstr "Nie można otrzymać nic z %s."
+msgstr "Nie można nic pobrać z %s."
 
 #: core/validators.py:429
 #, python-format
 msgid ""
 "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr ""
+"URL %(url)s zwrócił niepoprawny Content-Type header '%(contenttype)s'."
 
 
 #: core/validators.py:462
@@ -1866,17 +1868,15 @@
 
 #: db/models/fields/__init__.py:337
 msgid "This value must be an integer."
-msgstr ""
+msgstr "Ta wartość musi być liczbą całkowitą"
 
 #: db/models/fields/__init__.py:369
-#, fuzzy
 msgid "This value must be either True or False."
-msgstr "Wartość logiczna (True, False - prawda lub fałsz)"
+msgstr "Ta wartość musi być logiczna (True, False - prawda lub fałsz)."
 
 #: db/models/fields/__init__.py:385
-#, fuzzy
 msgid "This field cannot be null."
-msgstr "To pole jest nieprawidłowe."
+msgstr "To pole nie może być puste."
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
@@ -1888,12 +1888,10 @@
 msgstr "Proszę wpisać poprawne %s."
 
 #: db/models/fields/related.py:579
-#, fuzzy
 msgid "Separate multiple IDs with commas."
 msgstr "Oddziel kilka pól ID przecinkami."
 
 #: db/models/fields/related.py:581
-#, fuzzy
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
@@ -1909,11 +1907,11 @@
 msgstr[1] ""
 
 #: forms/__init__.py:380
-#, fuzzy, python-format
+#, 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 jest mniej niż %s znaków."
-msgstr[1] "Upewnij się, że jest mniej niż %s znaków."
+msgstr[0] "Upewnij się, że tekst ma mniej niż %s znak."
+msgstr[1] "Upewnij się, że tekst ma mniej niż %s znaków."
 
 #: forms/__init__.py:385
 msgid "Line breaks are not allowed here."

Added: vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/pl/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,112 @@
+# translation of djangojs.po to Polish
+# Copyright (C) 2007 Michal Chruszcz
+# This file is distributed under the same license as the django package.
+#
+# Michal Chruszcz <troll at pld-linux.org>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-12-09 11:51+0100\n"
+"PO-Revision-Date: 2007-03-12 11:42+0100\n"
+"Last-Translator: Michal Chruszcz <troll at pld-linux.org>\n"
+"Language-Team: Polish <pl at li.org>\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"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "Dostępne %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Wybierz wszystko"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Dodaj"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Usuń"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Wybrano %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+#, fuzzy
+msgid "Select your choice(s) and click "
+msgstr "Zaznacz swój wybór i kliknij "
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Wyczyść wszystko"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr "Styczeń Luty Marzec Kwiecień Maj Czerwiec Lipiec Sierpień Wrzesień Październik Listopad Grudzień"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Niedziela Poniedziałek Wtorek Środa Czwartek Piątek Sobota"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "N Pn Wt Åšr Cz Pt So"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "Teraz"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "Zegar"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "Wybierz czas"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "Północ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "6 rano"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "Południe"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "Dzisiaj"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "Kalendarz"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "Wczoraj"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "Jutro"
+

Added: vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/pt/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2125 @@
+# Portuguese translation of Django.
+# Copyright (C) 2007 the Lawrence Journal-World
+# This file is distributed under the same license as the PACKAGE package.
+# Nuno Mariz <nmariz at gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django 0.96pre\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-03-15 15:43+0200\n"
+"PO-Revision-Date: 2007-03-16 10:00+0000\n"
+"Last-Translator: Nuno Mariz <nmariz at gmail.com>\n"
+"Language-Team: pt_PT <nmariz at gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/comments/models.py:67 contrib/comments/models.py:166
+msgid "object ID"
+msgstr "ID do objecto"
+
+#: contrib/comments/models.py:68
+msgid "headline"
+msgstr "título"
+
+#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:167
+msgid "comment"
+msgstr "comentário"
+
+#: contrib/comments/models.py:70
+msgid "rating #1"
+msgstr "avaliação #1"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "avaliação #2"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "avaliação #3"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "avaliação #4"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "avaliação #5"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "avaliação #6"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "avaliação #7"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "avaliação #8"
+
+#: contrib/comments/models.py:82
+msgid "is valid rating"
+msgstr "é uma avaliação válida"
+
+#: contrib/comments/models.py:83 contrib/comments/models.py:169
+msgid "date/time submitted"
+msgstr "data/hora de submissão"
+
+#: contrib/comments/models.py:84 contrib/comments/models.py:170
+msgid "is public"
+msgstr "é público"
+
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
+msgid "IP address"
+msgstr "Endereço IP"
+
+#: contrib/comments/models.py:86
+msgid "is removed"
+msgstr "foi removido"
+
+#: 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 "Seleccione esta opção se o comentário não é apropriado. Uma mensagem \"Este comentário foi removido\" será mostrada no seu lugar."
+
+#: contrib/comments/models.py:91
+msgid "comments"
+msgstr "comentários"
+
+#: contrib/comments/models.py:131 contrib/comments/models.py:207
+msgid "Content object"
+msgstr "Objecto de conteúdo"
+
+#: 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 ""
+"Colocado pelo utilizador %(user)s em %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "nome da pessoa"
+
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "endereço ip"
+
+#: contrib/comments/models.py:173
+msgid "approved by staff"
+msgstr "aprovado pela equipa"
+
+#: contrib/comments/models.py:176
+msgid "free comment"
+msgstr "comentário livre"
+
+#: contrib/comments/models.py:177
+msgid "free comments"
+msgstr "comentários livres"
+
+#: contrib/comments/models.py:233
+msgid "score"
+msgstr "pontuação"
+
+#: contrib/comments/models.py:234
+msgid "score date"
+msgstr "data da pontuação"
+
+#: contrib/comments/models.py:237
+msgid "karma score"
+msgstr "pontuação do karma"
+
+#: contrib/comments/models.py:238
+msgid "karma scores"
+msgstr "pontuações do karma"
+
+#: contrib/comments/models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "Avaliação %(score)d por %(user)s"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"O utilizador %(user)s colocou uma flag neste comentário\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/models.py:265
+msgid "flag date"
+msgstr "data da flag"
+
+#: contrib/comments/models.py:268
+msgid "user flag"
+msgstr "flag do utilizador"
+
+#: contrib/comments/models.py:269
+msgid "user flags"
+msgstr "flags do utilizador"
+
+#: contrib/comments/models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "Flag por %r"
+
+#: contrib/comments/models.py:278
+msgid "deletion date"
+msgstr "data de remoção"
+
+#: contrib/comments/models.py:280
+msgid "moderator deletion"
+msgstr "remoção pelo moderador"
+
+#: contrib/comments/models.py:281
+msgid "moderator deletions"
+msgstr "remoções pelo moderador"
+
+#: contrib/comments/models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "Remoção de moderador %r"
+
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Utilizadores anónimos não podem votar"
+
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "ID de comentário inválido"
+
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "Não pode votar em si"
+
+#: contrib/comments/views/comments.py:27
+msgid ""
+"This rating is required because you've entered at least one other rating."
+msgstr "Esta avaliação é obrigatória porque introduziu pelo menos uma outra avaliação."
+
+#: 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] ""
+"Este comentário foi colocado por um utilizador que efectuou menos de %(count)s comentário:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Este comentário foi colocado por um utilizador que efectuou menos de %(count)s comentários:\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 ""
+"Este comentário foi colocado por um utilizador incompleto:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Apenas POSTs são autorizados"
+
+#: contrib/comments/views/comments.py:192
+#: contrib/comments/views/comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Um ou mais campos obrigatórios não foram submetidos"
+
+#: contrib/comments/views/comments.py:196
+#: contrib/comments/views/comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr "Alguém modificou o formulário de comentário (violação de segurança)"
+
+#: 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 "O formulário de comentário teve um parâmetro 'target' inválido -- o ID do objecto foi inválido"
+
+#: contrib/comments/views/comments.py:257
+#: contrib/comments/views/comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr "O formulário de comentário não forneceu nem 'preview' ou '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 "Utilizador:"
+
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_index.html:5
+msgid "Log out"
+msgstr "Sair"
+
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Palavra-passe:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Esqueceu-se da palavra-passe?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Avaliações"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Obrigatório"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Opcional"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Colocar uma foto"
+
+#: contrib/comments/templates/comments/form.html:28
+#: contrib/comments/templates/comments/freeform.html:5
+msgid "Comment:"
+msgstr "Comentário:"
+
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
+msgid "Preview comment"
+msgstr "Pré-visualizar comentário"
+
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "O seu nome:"
+
+#: contrib/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>Por %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "Todos"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "Qualquer data"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "Hoje"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "Últimos 7 dias"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "Este mês"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "Este ano"
+
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "Sim"
+
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "Não"
+
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "hora da acção"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "id do objecto"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "repr do objecto"
+
+#: contrib/admin/models.py:21
+msgid "action flag"
+msgstr "flag de acção"
+
+#: contrib/admin/models.py:22
+msgid "change message"
+msgstr "modificar mensagem"
+
+#: contrib/admin/models.py:25
+msgid "log entry"
+msgstr "entrada de log"
+
+#: contrib/admin/models.py:26
+msgid "log entries"
+msgstr "entradas de log"
+
+#: contrib/admin/templatetags/admin_list.py:230
+msgid "All dates"
+msgstr "Todas as datas"
+
+#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr "Por favor introduza o utilizador e palavra-passe correctos. Note que ambos os casos diferenciam maiúsculas e minúsculas."
+
+#: contrib/admin/views/decorators.py:24
+#: contrib/admin/templates/admin/login.html:25
+msgid "Log in"
+msgstr "Entrar"
+
+#: 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 "Por favor autentique-se novamente, porque a sua sessão expirou. Não se preocupe: Os dados submetidos foram gravados."
+
+#: 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 "Aparentemente o seu browser não está configurado para aceitar cookies. Por favor active os cookies, carrege novamente a página e volte a tentar."
+
+#: contrib/admin/views/decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Nomes de utilizador não podem conter o caracter '@'."
+
+#: contrib/admin/views/decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "O seu endereço de e-mail não é o seu nome de utilizador. Tente usar '%s'."
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Administração do site"
+
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "O(A) %(name)s \"%(obj)s\" foi adicionado(a) com sucesso."
+
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:22
+msgid "You may edit it again below."
+msgstr "Pode editá-lo(a) outra vez abaixo."
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr "Pode adicionar outro %s abaixo."
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "Adicionar %s"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "Foi adicionado %s"
+
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339
+msgid "and"
+msgstr "e"
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "Foi modificado %s."
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "Foi removido %s."
+
+#: contrib/admin/views/main.py:342
+msgid "No fields changed."
+msgstr "Nenhum campo foi modificado."
+
+#: contrib/admin/views/main.py:345
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "O(A) %(name)s \"%(obj)s\" foi modificado(a) com sucesso."
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "O(A) %(name)s \"%(obj)s\" foi adicionado(a) com sucesso. Pode voltar a editar novamente abaixo."
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "Modificar %s"
+
+#: contrib/admin/views/main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Um ou mais %(fieldname)s em %(name)s: %(obj)s"
+
+#: contrib/admin/views/main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Um ou mais %(fieldname)s em %(name)s:"
+
+#: contrib/admin/views/main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "O(A) %(name)s \"%(obj)s\" foi removido(a) com sucesso."
+
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "Tem a certeza?"
+
+#: contrib/admin/views/main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "Histórico de modificações: %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "Seleccionar %s"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "Seleccione %s para modificar"
+
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "Erro de base de dados"
+
+#: 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 "filtro:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "ver:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "A aplicação %r não encontrada"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "O Model %r não foi encontrado na aplicação %r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "o objecto `%s.%s` relacionado"
+
+#: 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 `%s.%s` objects"
+msgstr "os objectos `%s.%s` relacionados"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "todos %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "número de %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Campos nos objectos %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 "Inteiro"
+
+#: contrib/admin/views/doc.py:292
+msgid "Boolean (Either True or False)"
+msgstr "Boolean (Pode ser True ou False)"
+
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "String (até %(maxlength)s)"
+
+#: contrib/admin/views/doc.py:294
+msgid "Comma-separated integers"
+msgstr "Inteiros separados por virgula"
+
+#: contrib/admin/views/doc.py:295
+msgid "Date (without time)"
+msgstr "Data (sem hora)"
+
+#: contrib/admin/views/doc.py:296
+msgid "Date (with time)"
+msgstr "Data (com hora)"
+
+#: contrib/admin/views/doc.py:297
+msgid "E-mail address"
+msgstr "Endereço de e-mail"
+
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
+msgid "File path"
+msgstr "Caminho do ficheiro"
+
+#: contrib/admin/views/doc.py:300
+msgid "Decimal number"
+msgstr "Número décimal"
+
+#: contrib/admin/views/doc.py:306
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolean (Pode ser True, False ou None)"
+
+#: contrib/admin/views/doc.py:307
+msgid "Relation to parent model"
+msgstr "Relação para o pai do model"
+
+#: contrib/admin/views/doc.py:308
+msgid "Phone number"
+msgstr "Número de telefone"
+
+#: contrib/admin/views/doc.py:313
+msgid "Text"
+msgstr "Texto"
+
+#: contrib/admin/views/doc.py:314
+msgid "Time"
+msgstr "Hora"
+
+#: 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 "Estado dos E.U.A (duas letras em maiúsculas)"
+
+#: contrib/admin/views/doc.py:317
+msgid "XML text"
+msgstr "Texto XML"
+
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s não parece ser um objecto urlpattern"
+
+#: contrib/admin/views/auth.py:28
+msgid "Add user"
+msgstr "Adicionar utilizador"
+
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr "Documentação"
+
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_index.html:5
+msgid "Change password"
+msgstr "Modificar palavra-passe"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/change_list.html:6
+#: contrib/admin/templates/admin/base.html:30
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: 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 "Início"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_form.html:20
+msgid "History"
+msgstr "História"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Data/hora"
+
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "User"
+msgstr "Utilizador"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Acção"
+
+#: 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 "Este objecto não tem histórico de modificações. Provavelmente não foi modificado via site de administração."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Site de administração do Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administração do Django"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Erro do servidor"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Erro do servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Erro do servidor <em>(500)</em>"
+
+#: 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 "Ocorreu um erro. Foi reportado aos administradores do site via e-mail e deverá ser corrigido brevemente. Obrigado pela sua paciência."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Página não encontrada"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Pedimos desculpa, mas a página solicitada não foi encontrada."
+
+#: contrib/admin/templates/admin/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Models disponíveis na aplicação %(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 "Adicionar"
+
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
+msgstr "Modificar"
+
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
+msgstr "Não tem permissão para modificar nada."
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
+msgstr "Acções Recentes"
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
+msgstr "As minhas Acções"
+
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
+msgstr "Nenhum disponível"
+
+#: contrib/admin/templates/admin/change_list.html:11
+#, python-format
+msgid "Add %(name)s"
+msgstr "Adicionar %(name)s"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "<a href=\"/password_reset/\">Esqueceu-se a sua palavra-passe?</a>"
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "Bem-vindo,"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
+msgstr "Remover"
+
+#: 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 "A remoção de %(object_name)s '%(escaped_objects)s' resultará na remoção dos objectos relacionados, mas a sua conta não tem permissão de remoção dos seguintes tipos de objectos:"
+
+#: 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 "Tem a certeza que deseja remover %(object_name)s \"%(escaped_object)s\"? Todos os items relacionados seguintes irão ser removidos:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "Sim, tenho a certeza"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " Por %(filter_title)s "
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Ir"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 resultado"
+msgstr[1] "%(counter)s resultados"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s no total"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Mostrar todos"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filtro"
+
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "View on site"
+msgstr "Ver no site"
+
+#: contrib/admin/templates/admin/change_form.html:30
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Por favor corrija o erro abaixo."
+msgstr[1] "Por favor corrija os erros abaixo."
+
+#: contrib/admin/templates/admin/change_form.html:48
+msgid "Ordering"
+msgstr "Ordenação"
+
+#: contrib/admin/templates/admin/change_form.html:51
+msgid "Order:"
+msgstr "Ordem:"
+
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "Gravar como novo"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "Gravar e adicionar outro"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "Gravar e continuar a editar"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "Gravar"
+
+#: 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 "Passa-se algo de errado com a instalação da sua base de dados. Verifique se as tabelas da base de dados foram criadas apropriadamente e verifique se a base de dados pode ser lida pelo utilizador definido."
+
+#: 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 "Primeiro introduza o nome do utilizador e palavra-passe. Depois poderá editar mais opções do utilizador."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Utilizador"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Palavra-passe"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Palavra-passe (novamente)"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr "Introduza a palavra-passe como acima, para verificação."
+
+#: 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 "Modificação de palavra-passe"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Palavra-passe modificada com sucesso"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "A sua palavra-passe foi modificada."
+
+#: 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 "Reinicializar palavra-passe"
+
+#: 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 "Esqueceu-se da palavra-passe? Introduza o seu email abaixo, e enviaremos a sua palavra-passe reinicializada para o seu e-mail."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Endereço de e-mail:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Reinicializar a minha palavra-passe"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Obrigado por ter gasto tempo de qualidade no Web site hoje."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Entrar novamente"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Palavra-passe reinicializada com sucesso"
+
+#: 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 "Foi enviada uma nova palavra-passe nova para o e-mail que submeteu. Deverá estar a recebê-la brevemente."
+
+#: 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 "Por razões de segurança, por favor introduza a sua palavra-passe antiga e depois introduza a nova duas vezes para que possamos verificar se introduziu correctamente."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Palavra-passe antiga:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nova password:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirmação da palavra-passe:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Modificar a minha palavra-passe"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Está a receber este e-mail porque requisitou a reinicialização da sua palavra-passe"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "para a sua conta de utilizador em %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "A sua nova palavra-chave é: %(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 "Tenha a liberdade de modificar esta palavra-passe através desta página:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "O seu nome de utilizador, no caso de se ter esquecido:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Obrigado pela sua visita ao nosso site!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "A equipa do %(site_name)s"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Itens do bookmark"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "Documentação dos itens do bookmark"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">Para instalar itens no bookmark, arraste o link para sua barra \n"
+"de bookmarks, ou clique com o lado direito do rato no link e adicione ao seus bookmarks. Agora pode \n"
+"seleccionar o link do bookmark de qualquer página no site. Note que alguns destes \n"
+"itens do bookmark requerem que visualize o site de um computador designado \n"
+"por \"internal\" (entre em contacto com o seu administrador de sistema se \n"
+"não tiver a certeza se o seu computador é \"internal\".</p>\n"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "Documentação desta página"
+
+#: 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 "Vai de qualquer página para a documentação da view que gera essa página."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "Mostrar o ID do objecto"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr "Mostra o tipo de conteúdo e o ID único para as páginas que representam um único objecto."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "Editar este objecto (janela actual)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr "Vai para a página de admin para as páginas que representam um único objecto."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "Editar este objecto (nova janela)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Tal como acima, mas abre a página de admin numa nova janela."
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Data:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Hora:"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Actualmente:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Modificar:"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "redireccionar de"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr "Isto deverá ser um caminho absoluto, excluindo o domínio. Exemplo: '/events/search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "redireccionar para"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr "Isto poderá ser um caminho absoluto (como acima) ou um URL completo começado por 'http://'."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "redireccionar"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "redirecciona"
+
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Exemplo: '/about/contact/'. Verifique se possui as barras no inicio e no fim."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "titulo"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "conteúdo"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "permitir comentários"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "nome da template"
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr "Exemplo: 'flatpages/contact_page.html'. Se não for fornecido, o sistema usará: 'flatpages/default.html'."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "é necessário registo"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Se estiver seleccionado, apenas utilizadores autenticados poderão ver esta página."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "página plana"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "páginas planas"
+
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Saiu"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "nome"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "nome de código"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "permissão"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "permissões"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "grupo"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "grupos"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "utilizador"
+
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr "Obrigatório. 30 caracteres ou menos. Apenas caracteres alfanúmericos (letras, números ou underscores)."
+
+#: contrib/auth/models.py:91
+msgid "first name"
+msgstr "primeiro nome"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "último nome"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "endereço de e-mail"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "palavra-passe"
+
+#: contrib/auth/models.py:94
+msgid "Use '[algo]$[salt]$[hexdigest]'"
+msgstr "Use '[algo]$[salt]$[hexdigest]'"
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "status de equipa"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Define se o utilizador pode usar a administração do site."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "activo"
+
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr "Define se este utiliador pode usar a adminstração do site. Não seleccione em vez de remover as contas."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "Status de superuser"
+
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "Define se este utilizador tem todas as permissões sem explicitamente as atribuir."
+
+#: contrib/auth/models.py:98
+msgid "last login"
+msgstr "última entrada"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "data de registo"
+
+#: 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 "Em adição às permissões definidas manualmente, este utilizador também terá todas as permissões atribuídas a cada grupo a que partence."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "permissões do utilizador"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "utilizador"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "utilizadores"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Informação pessoal"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Permissões"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Datas importantes"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Grupos"
+
+#: contrib/auth/models.py:256
+msgid "message"
+msgstr "mensagem"
+
+#: contrib/auth/forms.py:52
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr "Aparentemente que o seu browser não está configurado para aceitar cookies. Os cookies são necessários para poder entrar."
+
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr "Esta conta não está activa."
+
+#: contrib/contenttypes/models.py:20
+msgid "python model class name"
+msgstr "python model class name"
+
+#: contrib/contenttypes/models.py:23
+msgid "content type"
+msgstr "tipo de conteúdo"
+
+#: contrib/contenttypes/models.py:24
+msgid "content types"
+msgstr "tipos de conteúdos"
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "chave da sessão"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "dados da sessão"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "data de expiração"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "sessão"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "sessões"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "nome do domínio"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "mostrar nome"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "site"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "sites"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Segunda-feira"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Quinta-feira"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Sexta-feira"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Sábado"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Domingo"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Janeiro"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Fevereiro"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Março"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Abril"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Maio"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Junho"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Julho"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Agosto"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Setembro"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Outubro"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembro"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Dezembro"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "jan"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "fev"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "mar"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "abr"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "mai"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "jun"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "jul"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "ago"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "set"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "out"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "nov"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "dez"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Jan."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Fev."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Ago."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Set."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Out."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Dez."
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "ano"
+msgstr[1] "anos"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "mês"
+msgstr[1] "meses"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "semana"
+msgstr[1] "semanas"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "dia"
+msgstr[1] "dias"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "hora"
+msgstr[1] "horas"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minuto"
+msgstr[1] "minutos"
+
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Árabe"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Bengalês"
+
+#: conf/global_settings.py:41
+msgid "Czech"
+msgstr "Checo"
+
+#: conf/global_settings.py:42
+msgid "Welsh"
+msgstr "Galês"
+
+#: conf/global_settings.py:43
+msgid "Danish"
+msgstr "Dinamarquês"
+
+#: conf/global_settings.py:44
+msgid "German"
+msgstr "Alemão"
+
+#: conf/global_settings.py:45
+msgid "Greek"
+msgstr "Grego"
+
+#: conf/global_settings.py:46
+msgid "English"
+msgstr "Inglês"
+
+#: conf/global_settings.py:47
+msgid "Spanish"
+msgstr "Espanhol"
+
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "Espanhol Argentino"
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "Filandês"
+
+#: conf/global_settings.py:50
+msgid "French"
+msgstr "Francês"
+
+#: conf/global_settings.py:51
+msgid "Galician"
+msgstr "Galaciano"
+
+#: conf/global_settings.py:52
+msgid "Hungarian"
+msgstr "Húngaro"
+
+#: conf/global_settings.py:53
+msgid "Hebrew"
+msgstr "Hebraico"
+
+#: conf/global_settings.py:54
+msgid "Icelandic"
+msgstr "Islandês"
+
+#: conf/global_settings.py:55
+msgid "Italian"
+msgstr "Italiano"
+
+#: conf/global_settings.py:56
+msgid "Japanese"
+msgstr "Japonês"
+
+#: conf/global_settings.py:57
+msgid "Dutch"
+msgstr "Holandês"
+
+#: conf/global_settings.py:58
+msgid "Norwegian"
+msgstr "Norueguês"
+
+#: conf/global_settings.py:59
+msgid "Brazilian"
+msgstr "Brasileiro"
+
+#: conf/global_settings.py:60
+msgid "Romanian"
+msgstr "Romeno"
+
+#: conf/global_settings.py:61
+msgid "Russian"
+msgstr "Russo"
+
+#: conf/global_settings.py:62
+msgid "Slovak"
+msgstr "Eslovaco"
+
+#: conf/global_settings.py:63
+msgid "Slovenian"
+msgstr "Esloveno"
+
+#: conf/global_settings.py:64
+msgid "Serbian"
+msgstr "Sérvio"
+
+#: conf/global_settings.py:65
+msgid "Swedish"
+msgstr "Sueco"
+
+#: conf/global_settings.py:66
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:67
+msgid "Turkish"
+msgstr "Turco"
+
+#: conf/global_settings.py:68
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+#: conf/global_settings.py:69
+msgid "Simplified Chinese"
+msgstr "Chinês Simplificado"
+
+#: conf/global_settings.py:70
+msgid "Traditional Chinese"
+msgstr "Chinês Tradicional"
+
+#: core/validators.py:63
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Este valor apenas poderá conter letras, números ou underscores."
+
+#: core/validators.py:67
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr "Este valor apenas poderá conter letras, números, underscores ou traços."
+
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Este valor apenas poderá conter letras, números, undercores ou hífenes."
+
+#: core/validators.py:75
+msgid "Uppercase letters are not allowed here."
+msgstr "Letras em maiúsculas não são permitidas aqui."
+
+#: core/validators.py:79
+msgid "Lowercase letters are not allowed here."
+msgstr "Letras em minúsculas não são permitidas aqui."
+
+#: core/validators.py:86
+msgid "Enter only digits separated by commas."
+msgstr "Introduza apenas números separados por vírgulas."
+
+#: core/validators.py:98
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Introduza endereços de e-mail válidos separados por vírgulas."
+
+#: core/validators.py:102
+msgid "Please enter a valid IP address."
+msgstr "Por favor introduza um endereço IP válido."
+
+#: core/validators.py:106
+msgid "Empty values are not allowed here."
+msgstr "Valores em branco não são permitidos aqui."
+
+#: core/validators.py:110
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Caracteres não númericos não são permitidos aqui."
+
+#: core/validators.py:114
+msgid "This value can't be comprised solely of digits."
+msgstr "Este valor não pode ser constituido apenas por números."
+
+#: core/validators.py:119
+msgid "Enter a whole number."
+msgstr "Introduza um número inteiro."
+
+#: core/validators.py:123
+msgid "Only alphabetical characters are allowed here."
+msgstr "Apenas letras são válidas aqui."
+
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr "O ano deve ser 1900 ou superior."
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Data inválida: %s."
+
+#: core/validators.py:146 db/models/fields/__init__.py:415
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Introduza uma data válida no formato AAAA-MM-DD."
+
+#: core/validators.py:151
+msgid "Enter a valid time in HH:MM format."
+msgstr "Introduza uma hora válida no formato HH:MM."
+
+#: core/validators.py:155 db/models/fields/__init__.py:477
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Introduza uma data/hora válida no formato AAAA-MM-DD HH:MM."
+
+#: core/validators.py:160
+msgid "Enter a valid e-mail address."
+msgstr "Introduza um endereço de e-mail válido."
+
+#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Nenhum ficheiro foi submetido. Verifique o tipo de codificação do formulário."
+
+#: core/validators.py:176
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr "Introduza uma imagem válida. O ficheiro que introduziu ou não é uma imagem ou está corrompido."
+
+#: core/validators.py:183
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "O URL %s não aponta para uma imagem válida."
+
+#: core/validators.py:187
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "Os números de telefone deverão ser no formato XXX-XXX-XXXX. \"%s\" é inválido."
+
+#: core/validators.py:195
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "O URL %s não aponta para um QuickTime video válido."
+
+#: core/validators.py:199
+msgid "A valid URL is required."
+msgstr "É obrigatório um URL válido"
+
+#: core/validators.py:213
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"É obrigatório um HTML válido. Os erros específicos são:\n"
+"%s"
+
+#: core/validators.py:220
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML mal formatado: %s"
+
+#: core/validators.py:230
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL inválido: %s"
+
+#: core/validators.py:234 core/validators.py:236
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "O URL %s é um link quebrado."
+
+#: core/validators.py:242
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Introduza uma abreviação de um estado dos E.U.A. válido."
+
+#: core/validators.py:256
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Atenção à linguagem! A palavra %s não é permitida aqui."
+msgstr[1] "Atenção à linguagem! As palavras %s não são permitidas aqui."
+
+#: core/validators.py:263
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Este campo deve ser igual ao campo '%s'."
+
+#: core/validators.py:282
+msgid "Please enter something for at least one field."
+msgstr "Por favor preencha pelo menos um campo."
+
+#: core/validators.py:291 core/validators.py:302
+msgid "Please enter both fields or leave them both empty."
+msgstr "Por favor preencha ambos os campos ou deixe ambos vazios."
+
+#: core/validators.py:309
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Este campo deve ser preenchido se %(field)s for %(value)s"
+
+#: core/validators.py:321
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Este campo deve ser preenchido se %(field)s não é %(value)s"
+
+#: core/validators.py:340
+msgid "Duplicate values are not allowed."
+msgstr "Valores duplicados não são permitidos."
+
+#: core/validators.py:363
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Este valor deverá ser uma potência de %s."
+
+#: core/validators.py:374
+msgid "Please enter a valid decimal number."
+msgstr "Por favor introduza um número décimal válido."
+
+#: core/validators.py:378
+#, 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] "Por favor introduza um número décimal com um máximo de %s digito."
+msgstr[1] "Por favor introduza um número décimal com um máximo de %s digitos."
+
+#: core/validators.py:381
+#, python-format
+msgid ""
+"Please enter a valid decimal number with a whole part of at most %s digit."
+msgid_plural ""
+"Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr[0] "Por favor introduza um número décimal com o máximo de % digito na parte inteira."
+msgstr[1] "Por favor introduza um número décimal com o máximo de % digitos na parte inteira."
+
+#: core/validators.py:384
+#, 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] "Por favor introduza um número décimal com o máximo de %s digito na parte décimal."
+msgstr[1] "Por favor introduza um número décimal com o máximo de %s digitos na parte décimal."
+
+#: core/validators.py:394
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Verifique que o ficheiro introduzido tem pelo menos %s bytes."
+
+#: core/validators.py:395
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Verifique se o ficheiro introduzido tem no máximo %s bytes."
+
+#: core/validators.py:412
+msgid "The format for this field is wrong."
+msgstr "O formato deste campo é errado."
+
+#: core/validators.py:427
+msgid "This field is invalid."
+msgstr "Este campo é inválido."
+
+#: core/validators.py:463
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Não foi possível extrair nada de %s."
+
+#: core/validators.py:466
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "O URL %(url)s devolveu um tipo de conteúdo inválido no header: '%s(contenttype)s'."
+
+#: core/validators.py:499
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr "Por favor feche a tag %(tag)s na linha %(line)s. (A linha começa por \"%(start)s\".)"
+
+#: core/validators.py:503
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr "Algum texto começado na linha %(line)s não é permitido nesse contexto. (A linha começa por \"%(start)s\".)"
+
+#: core/validators.py:508
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr "\"%(attr)s\" na linha %(line)s é um atributo inválido. (A linha começa por \"%(start)s\".)"
+
+#: core/validators.py:513
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr "\"<%(tag)s>\" na linha %(line)s é um tag inválida. (A linha começa por \"%(start)s\".)"
+
+#: core/validators.py:517
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr "Uma tag na linha %(line)s não tem um o mais atributos obrigatórios. (A linha começa por \"%(start)s\".)"
+
+#: core/validators.py:522
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr "O atributo \"%(attr)s\" na linha %(line)s tem um valor inválido. (A linha começa por \"%(start)s\".)"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "O(A) %(verbose_name)s foi criado(a) com sucesso."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "O(A) %(verbose_name)s foi actualizado(a) com sucesso."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "O(A) %(verbose_name)s foi removido(a)."
+
+#: db/models/manipulators.py:302
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "O(A) %(object)s com este %(type)s já existe para o(a) %(field)s fornecido."
+
+#: db/models/fields/__init__.py:40
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s com %(fieldname)s já existe."
+
+#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
+#: forms/__init__.py:346
+msgid "This field is required."
+msgstr "Este campo é obrigatório."
+
+#: db/models/fields/__init__.py:340
+msgid "This value must be an integer."
+msgstr "Este campo deverá ser inteiro."
+
+#: db/models/fields/__init__.py:372
+msgid "This value must be either True or False."
+msgstr "Este valor deverá ser True ou False."
+
+#: db/models/fields/__init__.py:388
+msgid "This field cannot be null."
+msgstr "Este campo não pode ser nulo."
+
+#: db/models/fields/__init__.py:571
+msgid "Enter a valid filename."
+msgstr "Introduza um nome de ficheiro válido."
+
+#: db/models/fields/related.py:51
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Por favor introduza um %s válido."
+
+#: db/models/fields/related.py:618
+msgid "Separate multiple IDs with commas."
+msgstr "Separe múltiplos IDs através de vírgulas."
+
+#: db/models/fields/related.py:620
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Mantenha pressionado o \"Control\", or \"Command\" no Mac, para seleccionar mais do que um."
+
+#: db/models/fields/related.py:664
+#, 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] "Por favor introduza IDs de %(self)s válidos. O valor %(value)r é inválido."
+msgstr[1] "Por favor introduza IDs de %(self)s válidos. Os valores %(value)r são inválidos."
+
+#: forms/__init__.py:381
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Verifique se o seu texto tem menos de %s caracter."
+msgstr[1] "Verifique se o seu texto tem menos de %s caracteres."
+
+#: forms/__init__.py:386
+msgid "Line breaks are not allowed here."
+msgstr "Quebras de linha não são permitas aqui."
+
+#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Seleccione uma opção válida; '%(data)s' não se encontra em %(choices)s."
+
+#: forms/__init__.py:663
+msgid "The submitted file is empty."
+msgstr "O ficheiro submetido encontra-se vazio."
+
+#: forms/__init__.py:719
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Introduza um número entre -32,768 e 32,767."
+
+#: forms/__init__.py:729
+msgid "Enter a positive number."
+msgstr "Introduza um número positivo."
+
+#: forms/__init__.py:739
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Introduza um número entre 0 e 32,767."
+
+#: template/defaultfilters.py:401
+msgid "yes,no,maybe"
+msgstr "sim,não,talvez"

Added: vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/pt/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,108 @@
+# Portuguese translation of Django.
+# Copyright (C) 2007 the Lawrence Journal-World
+# This file is distributed under the same license as the PACKAGE package.
+# Nuno Mariz <nmariz at gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django 0.96pre\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-03-15 11:51+0100\n"
+"PO-Revision-Date: 2007-03-16 10:01+0000\n"
+"Last-Translator: Nuno Mariz <nmariz at gmail.com>\n"
+"Language-Team: pt_PT <nmariz at gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "Disponível %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Escolher todos"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Adicionar"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Remover"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Escolhido %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Seleccione a(s) sua(s) escolha(s) e clique "
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Limpar tudo"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr "Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Domingo Segunda Terça Quarta Quinta Sexta Sábado"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "D S T Q Q S S"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "Agora"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "Relógio"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "Escolha a hora"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "Meia-noite"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "6 a.m."
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "Meio-dia"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "Hoje"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "Calendário"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "Ontem"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "Amanhã"

Modified: vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,14 +2,15 @@
 # Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 # João Marcus Christ <joaoma at gmail.com>, 2006.
+# Carlos Eduardo de Paula <carlosedp at gmail.com>, 2006.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:11+0200\n"
-"PO-Revision-Date: 2006-01-23 19:54-0200\n"
-"Last-Translator: João Marcus Christ <joaoma at gmail.com>\n"
+"PO-Revision-Date: 2006-11-01 17:45-0300\n"
+"Last-Translator: Carlos Eduardo de Paula <carlosedp at gmail.com>\n"
 "Language-Team: Português do Brasil <pt-br at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -86,12 +87,12 @@
 "removed\" message will be displayed instead."
 msgstr ""
 "Selecione esta opção se o comentário é inapropriado. Uma mensagem \"Este "
-"comentário foi removido\" será mostrada no lugar."
+"comentário foi removido\" a mensagem será mostrada no lugar."
 
 #: contrib/comments/models.py:91
 #, fuzzy
 msgid "comments"
-msgstr "comentário"
+msgstr "comentários"
 
 #: contrib/comments/models.py:131 contrib/comments/models.py:207
 msgid "Content object"
@@ -150,7 +151,7 @@
 #: contrib/comments/models.py:238
 #, fuzzy
 msgid "karma scores"
-msgstr "Pontuação de Karma"
+msgstr "Pontuações de Karma"
 
 #: contrib/comments/models.py:242
 #, python-format
@@ -170,17 +171,17 @@
 
 #: contrib/comments/models.py:265
 msgid "flag date"
-msgstr "marca de data"
+msgstr "flag de data"
 
 #: contrib/comments/models.py:268
 #, fuzzy
 msgid "user flag"
-msgstr "Flag de usuário"
+msgstr "flag de usuário"
 
 #: contrib/comments/models.py:269
 #, fuzzy
 msgid "user flags"
-msgstr "Flags de usuário"
+msgstr "flags de usuário"
 
 #: contrib/comments/models.py:273
 #, python-format
@@ -189,22 +190,22 @@
 
 #: contrib/comments/models.py:278
 msgid "deletion date"
-msgstr "data de apagamento"
+msgstr "data de exclusão"
 
 #: contrib/comments/models.py:280
 #, fuzzy
 msgid "moderator deletion"
-msgstr "Apagamento feito por moderador"
+msgstr "Exclusão feita pelo moderador"
 
 #: contrib/comments/models.py:281
 #, fuzzy
 msgid "moderator deletions"
-msgstr "Apagamentos feitos por moderador"
+msgstr "Exclusões feitas pelo moderador"
 
 #: contrib/comments/models.py:285
 #, python-format
 msgid "Moderator deletion by %r"
-msgstr "Apagamento feito pelo moderador %r"
+msgstr "Exclusao feita pelo moderador %r"
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
@@ -237,12 +238,12 @@
 "\n"
 "%(text)s"
 msgstr[0] ""
-"Este comentário foi feito por um usuário esboço:\n"
-"\n"
+"Este comentário foi feito por um usuário que postou menos de %(count)s "
+"comentário:\n"
 "%(text)s"
 msgstr[1] ""
-"Este comentário foi feito por um usuário esboço:\n"
-"\n"
+"Este comentário foi feito por um usuário que postou menos de %(count)s "
+"comentários:\n"
 "%(text)s"
 
 #: contrib/comments/views/comments.py:117
@@ -252,7 +253,7 @@
 "\n"
 "%(text)s"
 msgstr ""
-"Este comentário foi feito por um usuário esboço:\n"
+"Este comentário foi feito por um usuário incompleto:\n"
 "\n"
 "%(text)s"
 
@@ -299,7 +300,7 @@
 #: contrib/comments/templates/comments/form.html:6
 #, fuzzy
 msgid "Forgotten your password?"
-msgstr "Alterar minha senha"
+msgstr "Esqueceu sua senha?"
 
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
@@ -325,21 +326,21 @@
 #: contrib/comments/templates/comments/form.html:12
 #, fuzzy
 msgid "Ratings"
-msgstr "avaliação #1"
+msgstr "Avaliações"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr ""
+msgstr "Requerido"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Optional"
-msgstr ""
+msgstr "Opcional"
 
 #: contrib/comments/templates/comments/form.html:23
 msgid "Post a photo"
-msgstr ""
+msgstr "Postar uma foto"
 
 #: contrib/comments/templates/comments/form.html:27
 #: contrib/comments/templates/comments/freeform.html:5
@@ -351,12 +352,12 @@
 #: contrib/comments/templates/comments/freeform.html:9
 #, fuzzy
 msgid "Preview comment"
-msgstr "Comentário livre"
+msgstr "Pré visualizar comentário"
 
 #: contrib/comments/templates/comments/freeform.html:4
 #, fuzzy
 msgid "Your name:"
-msgstr "usuário"
+msgstr "Seu nome:"
 
 #: contrib/admin/filterspecs.py:40
 #, python-format
@@ -443,7 +444,7 @@
 "sensitive."
 msgstr ""
 "Por favor entre usuário e senha corretos. Note que ambos os "
-"camposdiferenciam maiúsculas e minúsculas."
+"campos diferenciam maiúsculas e minúsculas."
 
 #: contrib/admin/views/decorators.py:23
 #: contrib/admin/templates/admin/login.html:25
@@ -468,7 +469,7 @@
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
-msgstr "Nomes de usuário não podem conter o caracter '@'."
+msgstr "Nomes de usuário não podem conter o caractere '@'."
 
 #: contrib/admin/views/decorators.py:84
 #, python-format
@@ -553,7 +554,7 @@
 #: contrib/admin/views/main.py:508
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "O(A) %(name)s \"%(obj)s\" foi adicionado com sucesso."
+msgstr "O(A) %(name)s \"%(obj)s\" foi excluído com sucesso."
 
 #: contrib/admin/views/main.py:511
 msgid "Are you sure?"
@@ -746,7 +747,7 @@
 "mail and should be fixed shortly. Thanks for your patience."
 msgstr ""
 "Houve um erro. Este foi reportado aos administradores do site através d e-"
-"mail e deve ser consertado em breve. Obrigado pela compreensão."
+"mail e deve ser corrigido em breve. Obrigado pela compreensão."
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
@@ -760,7 +761,7 @@
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modelos disponíveis na aplicação %(name)s"
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
@@ -794,7 +795,7 @@
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Você <a href=\"/password_reset/\"esqueceu a senha</a>?"
+msgstr "Você <a href=\"/password_reset/\">esqueceu sua senha</a>?"
 
 #: contrib/admin/templates/admin/base.html:23
 msgid "Welcome,"
@@ -836,7 +837,7 @@
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
-msgstr ""
+msgstr "Ir"
 
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
@@ -847,7 +848,7 @@
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Por favor, corrija o erro abaixo."
-msgstr[1] "Por favor, corrija o erro abaixo."
+msgstr[1] "Por favor, corrija os erros abaixo."
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
@@ -930,8 +931,8 @@
 "We've e-mailed a new password to the e-mail address you submitted. You "
 "should be receiving it shortly."
 msgstr ""
-"Nós enviamos uma nova senha para o e-mail que você informou. Você deve estar "
-"recebendo uma mensagem em breve."
+"Nós enviamos uma nova senha para o e-mail que você informou. Você deverá "
+"receber uma mensagem em breve."
 
 #: contrib/admin/templates/registration/password_change_form.html:12
 msgid ""
@@ -973,7 +974,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:7
 msgid "Feel free to change this password by going to this page:"
-msgstr "Sinta-se livre para alterar esta senha visitando esta página:"
+msgstr "Sinta-se a vontade para alterar esta senha visitando esta página:"
 
 #: contrib/admin/templates/registration/password_reset_email.html:11
 msgid "Your username, in case you've forgotten:"
@@ -1040,17 +1041,17 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
-msgstr "Edita este objeto (janela atual)"
+msgstr "Editar este objeto (janela atual)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
 msgstr ""
-"Vai para a página de administração para páginas que representam um objeto "
+"Vai para a página de administração que representam um objeto "
 "único."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
-msgstr "Edita este objeto (nova janela)"
+msgstr "Editar este objeto (nova janela)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:29
 msgid "As above, but opens the admin page in a new window."
@@ -1135,7 +1136,7 @@
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
-msgstr "é obrigatório registrar"
+msgstr "registro obrigatório"
 
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
@@ -1160,22 +1161,22 @@
 #: contrib/auth/models.py:17
 #, fuzzy
 msgid "permission"
-msgstr "Permissão"
+msgstr "permissão"
 
 #: contrib/auth/models.py:18 contrib/auth/models.py:27
 #, fuzzy
 msgid "permissions"
-msgstr "Permissões"
+msgstr "permissões"
 
 #: contrib/auth/models.py:29
 #, fuzzy
 msgid "group"
-msgstr "Grupo"
+msgstr "grupo"
 
 #: contrib/auth/models.py:30 contrib/auth/models.py:65
 #, fuzzy
 msgid "groups"
-msgstr "Grupos"
+msgstr "grupos"
 
 #: contrib/auth/models.py:55
 msgid "username"
@@ -1236,17 +1237,17 @@
 #: contrib/auth/models.py:67
 #, fuzzy
 msgid "user permissions"
-msgstr "Permissões"
+msgstr "permissões do usuário"
 
 #: contrib/auth/models.py:70
 #, fuzzy
 msgid "user"
-msgstr "Usuário"
+msgstr "usuário"
 
 #: contrib/auth/models.py:71
 #, fuzzy
 msgid "users"
-msgstr "Usuários"
+msgstr "usuários"
 
 #: contrib/auth/models.py:76
 msgid "Personal info"
@@ -1267,7 +1268,7 @@
 #: contrib/auth/models.py:219
 #, fuzzy
 msgid "message"
-msgstr "Mensagem"
+msgstr "mensagem"
 
 #: contrib/auth/forms.py:30
 msgid ""
@@ -1275,7 +1276,7 @@
 "required for logging in."
 msgstr ""
 "Seu navegador Web não parece estar com os cookies habilitados. Cookies são "
-"requeridos para acesssar."
+"requeridos para acessar."
 
 #: contrib/contenttypes/models.py:25
 #, fuzzy
@@ -1417,52 +1418,52 @@
 #: utils/dates.py:19
 #, fuzzy
 msgid "jan"
-msgstr "e"
+msgstr "jan"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "fev"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mar"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "abr"
 
 #: utils/dates.py:19
 #, fuzzy
 msgid "may"
-msgstr "dia"
+msgstr "mai"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "jun"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "jul"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "ago"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "set"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "out"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "dez"
 
 #: utils/dates.py:27
 msgid "Jan."
@@ -1497,45 +1498,45 @@
 msgid "year"
 msgid_plural "years"
 msgstr[0] "ano"
-msgstr[1] "ano"
+msgstr[1] "anos"
 
 #: utils/timesince.py:13
 #, fuzzy
 msgid "month"
 msgid_plural "months"
 msgstr[0] "mês"
-msgstr[1] "mês"
+msgstr[1] "meses"
 
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "semana"
+msgstr[1] "semanas"
 
 #: utils/timesince.py:15
 #, fuzzy
 msgid "day"
 msgid_plural "days"
 msgstr[0] "dia"
-msgstr[1] "dia"
+msgstr[1] "dias"
 
 #: utils/timesince.py:16
 #, fuzzy
 msgid "hour"
 msgid_plural "hours"
 msgstr[0] "hora"
-msgstr[1] "hora"
+msgstr[1] "horas"
 
 #: utils/timesince.py:17
 #, fuzzy
 msgid "minute"
 msgid_plural "minutes"
 msgstr[0] "minuto"
-msgstr[1] "minuto"
+msgstr[1] "minutos"
 
 #: conf/global_settings.py:37
 msgid "Bengali"
-msgstr ""
+msgstr "Bengalês"
 
 #: conf/global_settings.py:38
 msgid "Czech"
@@ -1548,7 +1549,7 @@
 #: conf/global_settings.py:40
 #, fuzzy
 msgid "Danish"
-msgstr "Espanhol"
+msgstr "Dinamarquês"
 
 #: conf/global_settings.py:41
 msgid "German"
@@ -1556,7 +1557,7 @@
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Grego"
 
 #: conf/global_settings.py:43
 msgid "English"
@@ -1576,11 +1577,11 @@
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Húngaro"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Hebraico"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
@@ -1604,7 +1605,7 @@
 
 #: conf/global_settings.py:54
 msgid "Brazilian"
-msgstr "Brazileiro"
+msgstr "Brasileiro"
 
 #: conf/global_settings.py:55
 msgid "Romanian"
@@ -1621,7 +1622,7 @@
 #: conf/global_settings.py:58
 #, fuzzy
 msgid "Slovenian"
-msgstr "Eslovaco"
+msgstr "Esloveno"
 
 #: conf/global_settings.py:59
 msgid "Serbian"
@@ -1634,7 +1635,7 @@
 #: conf/global_settings.py:61
 #, fuzzy
 msgid "Ukrainian"
-msgstr "Brazileiro"
+msgstr "Ucraniano"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
@@ -1689,7 +1690,7 @@
 
 #: core/validators.py:116
 msgid "Enter a whole number."
-msgstr "Informe um número inteiro."
+msgstr "Informe um número completo."
 
 #: core/validators.py:120
 msgid "Only alphabetical characters are allowed here."
@@ -1772,7 +1773,7 @@
 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] "Lave sua boca! A palavra %s não é permitida aqui."
-msgstr[1] "Lave sua boca! A palavra %s não é permitida aqui."
+msgstr[1] "Lave sua boca! As palavras %s não são permitidas aqui."
 
 #: core/validators.py:236
 #, python-format
@@ -1808,14 +1809,14 @@
 
 #: core/validators.py:347
 msgid "Please enter a valid decimal number."
-msgstr "Informe um número decimal."
+msgstr "Informe um número decimal válido."
 
 #: core/validators.py:349
 #, fuzzy, 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] "Por favor entre com um número decimal com no máximo %s digitos."
+msgstr[0] "Por favor entre com um número decimal com no máximo %s digito."
 msgstr[1] "Por favor entre com um número decimal com no máximo %s digitos."
 
 #: core/validators.py:352
@@ -1824,7 +1825,7 @@
 msgid_plural ""
 "Please enter a valid decimal number with at most %s decimal places."
 msgstr[0] "Informe um número decimal com no máximo %s casa decimal."
-msgstr[1] "Informe um número decimal com no máximo %s casa decimal."
+msgstr[1] "Informe um número decimal com no máximo %s casas decimais."
 
 #: core/validators.py:362
 #, python-format
@@ -1930,17 +1931,17 @@
 #: db/models/fields/__init__.py:337
 #, fuzzy
 msgid "This value must be an integer."
-msgstr "Este valor deve ser uma potência de %s."
+msgstr "Este valor deve ser um inteiro."
 
 #: db/models/fields/__init__.py:369
 #, fuzzy
 msgid "This value must be either True or False."
-msgstr "Este valor deve ser uma potência de %s."
+msgstr "Este valor deve ser Verdadeiro ou Falso."
 
 #: db/models/fields/__init__.py:385
 #, fuzzy
 msgid "This field cannot be null."
-msgstr "Este campo é inválido."
+msgstr "Este campo não pode ser nulo."
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
@@ -1954,14 +1955,14 @@
 #: db/models/fields/related.py:579
 #, fuzzy
 msgid "Separate multiple IDs with commas."
-msgstr " Separe IDs múltiplos com vírgulas."
+msgstr "Separe IDs múltiplos com vírgulas."
 
 #: db/models/fields/related.py:581
 #, fuzzy
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
-" Mantenha pressionado \"Control\", ou \"Command\" num Mac para selecionar "
+" Mantenha pressionado \"Control\", ou \"Command\" no Mac para selecionar "
 "mais de uma opção."
 
 #: db/models/fields/related.py:625
@@ -1972,18 +1973,18 @@
 msgstr[0] ""
 "Por favor, entre IDs válidos para %(self)s. O valor %(value)r é inválido."
 msgstr[1] ""
-"Por favor, entre IDs válidos para %(self)s. O valor %(value)r é inválido."
+"Por favor, entre IDs válidos para %(self)s. Os valores %(value)r são inválidos."
 
 #: forms/__init__.py:380
 #, fuzzy, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Certifique-se de que seu texto tenha menos que %s caracteres."
+msgstr[0] "Certifique-se de que seu texto tenha menos que %s caractere."
 msgstr[1] "Certifique-se de que seu texto tenha menos que %s caracteres."
 
 #: forms/__init__.py:385
 msgid "Line breaks are not allowed here."
-msgstr "Não são permitidas múltiplas linhas aqui."
+msgstr "Não são permitidas quebras de linha aqui."
 
 #: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
 #, python-format
@@ -2037,7 +2038,7 @@
 #~ "\n"
 #~ "%(text)s"
 #~ msgstr ""
-#~ "Este comentário foi envidao por um usuário que enviou menos de %(count)s "
+#~ "Este comentário foi enviado por um usuário que enviou menos de %(count)s "
 #~ "comentário:\n"
 #~ "\n"
 #~ "%(text)sEste comentário foi enviado por um usuário que enviou menos de %"
@@ -2047,4 +2048,4 @@
 
 #, fuzzy
 #~ msgid "count"
-#~ msgstr "conteúdo"
+#~ msgstr "contagem"

Modified: vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,15 +1,15 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# Português do Brasil translation of django.
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Carlos Eduardo de Paula <carlosedp at gmail.com>, 2006.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2006-01-23 19:54-0200\n"
-"Last-Translator: João Marcus Christ <joaoma at gmail.com>\n"
+"PO-Revision-Date: 2006-11-01 17:45-0300\n"
+"Last-Translator: Carlos Eduardo de Paula <carlosedp at gmail.com>\n"
 "Language-Team: Português do Brasil <pt-br at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -51,7 +51,7 @@
 "January February March April May June July August September October November "
 "December"
 msgstr ""
-"Janeiro Fevereiro Março Abrio Maio Junho Julho Agosto Setembro Outubro Novembro "
+"Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro "
 "Dezembro"
 #: contrib/admin/media/js/dateparse.js:27
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"

Modified: vendor/django/current/django/conf/locale/ru/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/ru/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/ru/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ru/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -5,97 +5,102 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: django\n"
+"Project-Id-Version: django 0.95\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:11+0200\n"
-"PO-Revision-Date: 2005-11-26 00:00\n"
-"Last-Translator: Dmitry Sorokin <ds at dial.com.ru>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"PO-Revision-Date: 2006-09-07 15:28+0300\n"
+"Last-Translator: Alexander Yakovlev <AYakovlev at rambler.ru>\n"
+"Language-Team: Dialcom Services <greg at dial.com.ru>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Poedit-Language: Russian\n"
+"X-Poedit-Country: RUSSIAN FEDERATION\n"
+"X-Poedit-SourceCharset: utf-8\n"
 
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
+#: contrib/comments/models.py:67
+#: contrib/comments/models.py:166
 msgid "object ID"
 msgstr "ID объекта"
 
 #: contrib/comments/models.py:68
 msgid "headline"
-msgstr "заголовок"
+msgstr "Заголовок"
 
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:69
+#: contrib/comments/models.py:90
 #: contrib/comments/models.py:167
 msgid "comment"
-msgstr "комментарий"
+msgstr "Комментарий"
 
 #: contrib/comments/models.py:70
 msgid "rating #1"
-msgstr "рейтинг #1"
+msgstr "рейтинг №1"
 
 #: contrib/comments/models.py:71
 msgid "rating #2"
-msgstr "рейтинг #2"
+msgstr "рейтинг №2"
 
 #: contrib/comments/models.py:72
 msgid "rating #3"
-msgstr "рейтинг #3"
+msgstr "рейтинг №3"
 
 #: contrib/comments/models.py:73
 msgid "rating #4"
-msgstr "рейтинг #4"
+msgstr "рейтинг №4"
 
 #: contrib/comments/models.py:74
 msgid "rating #5"
-msgstr "рейтинг #5"
+msgstr "рейтинг №5"
 
 #: contrib/comments/models.py:75
 msgid "rating #6"
-msgstr "рейтинг #6"
+msgstr "рейтинг №6"
 
 #: contrib/comments/models.py:76
 msgid "rating #7"
-msgstr "рейтинг #7"
+msgstr "рейтинг №7"
 
 #: contrib/comments/models.py:77
 msgid "rating #8"
-msgstr "рейтинг #8"
+msgstr "рейтинг №8"
 
 #: contrib/comments/models.py:82
 msgid "is valid rating"
-msgstr "доступный рейтинг"
+msgstr "Допустимый рейтинг"
 
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
+#: contrib/comments/models.py:83
+#: contrib/comments/models.py:169
 msgid "date/time submitted"
-msgstr "дата/время добавления"
+msgstr "Дата/время добавления"
 
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
+#: contrib/comments/models.py:84
+#: contrib/comments/models.py:170
 msgid "is public"
-msgstr "публичный"
+msgstr "Публичный"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85
+#: contrib/admin/views/doc.py:289
 msgid "IP address"
-msgstr "IP адрес"
+msgstr "IP-адрес"
 
 #: contrib/comments/models.py:86
 msgid "is removed"
-msgstr "удален"
+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 ""
-"Отметте, если комментарий нежелателен. Сообщение \"Этот комментарий был "
-"удалён\" будет показано взамен."
+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
-#, fuzzy
 msgid "comments"
-msgstr "комментарий"
+msgstr "Комментарии"
 
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
+#: contrib/comments/models.py:131
+#: contrib/comments/models.py:207
 msgid "Content object"
-msgstr "Объект наполнения"
+msgstr "Объект содержимого"
 
 #: contrib/comments/models.py:159
 #, python-format
@@ -106,7 +111,7 @@
 "\n"
 "http://%(domain)s%(url)s"
 msgstr ""
-"Добавил  %(user)s  %(date)s\n"
+"Добавил %(user)s %(date)s\n"
 "\n"
 "%(comment)s\n"
 "\n"
@@ -114,15 +119,15 @@
 
 #: contrib/comments/models.py:168
 msgid "person's name"
-msgstr "имя человека"
+msgstr "Имя человека"
 
 #: contrib/comments/models.py:171
 msgid "ip address"
-msgstr "ip адрес:"
+msgstr "IP-адрес:"
 
 #: contrib/comments/models.py:173
 msgid "approved by staff"
-msgstr "одобрено администрацией"
+msgstr "Одобрено администрацией"
 
 #: contrib/comments/models.py:176
 msgid "free comment"
@@ -134,24 +139,24 @@
 
 #: contrib/comments/models.py:233
 msgid "score"
-msgstr "счёт"
+msgstr "Счёт"
 
 #: contrib/comments/models.py:234
 msgid "score date"
-msgstr "счёт времени"
+msgstr "Время счёта"
 
 #: contrib/comments/models.py:237
 msgid "karma score"
-msgstr "Карма счёт"
+msgstr "Кармический счёт"
 
 #: contrib/comments/models.py:238
 msgid "karma scores"
-msgstr "Карма счета"
+msgstr "Кармические счета"
 
 #: contrib/comments/models.py:242
 #, python-format
 msgid "%(score)d rating by %(user)s"
-msgstr ""
+msgstr "%(score)d рейтинг пользователя %(user)s"
 
 #: contrib/comments/models.py:258
 #, python-format
@@ -160,21 +165,21 @@
 "\n"
 "%(text)s"
 msgstr ""
-"Этот комментарий был отмечен %(user)s:\n"
+"Этот комментарий был отмечен пользователем %(user)s:\n"
 "\n"
 "%(text)s"
 
 #: contrib/comments/models.py:265
 msgid "flag date"
-msgstr "отметка даты"
+msgstr "Дата отметки"
 
 #: contrib/comments/models.py:268
 msgid "user flag"
-msgstr "Признак пользователя"
+msgstr "Отметка пользователя"
 
 #: contrib/comments/models.py:269
 msgid "user flags"
-msgstr "Признаки пользователя"
+msgstr "Отметки пользователя"
 
 #: contrib/comments/models.py:273
 #, python-format
@@ -183,11 +188,11 @@
 
 #: contrib/comments/models.py:278
 msgid "deletion date"
-msgstr "дата удаления"
+msgstr "Дата удаления"
 
 #: contrib/comments/models.py:280
 msgid "moderator deletion"
-msgstr "Удаленно модератором"
+msgstr "Удаление модератором"
 
 #: contrib/comments/models.py:281
 msgid "moderator deletions"
@@ -196,7 +201,7 @@
 #: contrib/comments/models.py:285
 #, python-format
 msgid "Moderator deletion by %r"
-msgstr ""
+msgstr "Удаления модератора %r"
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
@@ -211,24 +216,31 @@
 msgstr "Нельзя голосовать за себя"
 
 #: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr ""
+msgid "This rating is required because you've entered at least one other rating."
+msgstr "Этот рейтинг обязателен, так как вы уже ввели как минимум еще один рейтинг."
 
 #: 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"
+"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"
+"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
 "\n"
 "%(text)s"
 msgstr[0] ""
+"Этот комментарий сделан пользователем, который отправил меньше %(count)s комментария:\n"
+"\n"
+"%(text)s"
 msgstr[1] ""
+"Этот комментарий сделан пользователем, который отправил меньше %(count)s комментариев:\n"
+"\n"
+"%(text)s"
+msgstr[2] ""
+"Этот комментарий сделан пользователем, который отправил меньше %(count)s комментариев:\n"
+"\n"
+"%(text)s"
 
 #: contrib/comments/views/comments.py:117
 #, python-format
@@ -237,14 +249,14 @@
 "\n"
 "%(text)s"
 msgstr ""
-"Коментарий был добавлен ндоверенным пользователем:\n"
+"Коментарий был добавлен недоверенным пользователем:\n"
 "\n"
 "%(text)s"
 
 #: contrib/comments/views/comments.py:189
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
-msgstr "Только POSTы разрешены"
+msgstr "Разрешены только POSTы"
 
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
@@ -254,20 +266,17 @@
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Кто-то вмешивается в форму комментария (нарушение безопасности)"
+msgstr "Кто-то вмешался в форму комментария (нарушение безопасности)"
 
 #: contrib/comments/views/comments.py:207
 #: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"Форма комментария имеет неверный 'target' параметр -- ID объекта неверно"
+msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
+msgstr "Форма комментария имела неверный параметр 'target' -- ID объекта неверен"
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Форма комментария не обеспечивает и 'preview' или 'post'"
+msgstr "Форма комментария не предоставила ни 'предпросмотр', ни 'отправить'"
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
@@ -312,7 +321,7 @@
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr "Необходимое"
+msgstr "Обязательное"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
@@ -331,11 +340,11 @@
 #: contrib/comments/templates/comments/form.html:32
 #: contrib/comments/templates/comments/freeform.html:9
 msgid "Preview comment"
-msgstr "Просмотр комментария"
+msgstr "Предпросмотр комментария"
 
 #: contrib/comments/templates/comments/freeform.html:4
 msgid "Your name:"
-msgstr "имя пользователя:"
+msgstr "Имя пользователя:"
 
 #: contrib/admin/filterspecs.py:40
 #, python-format
@@ -343,8 +352,11 @@
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
+"<h3>По %s:</h3>\n"
+"<ul>\n"
 
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:70
+#: contrib/admin/filterspecs.py:88
 #: contrib/admin/filterspecs.py:143
 msgid "All"
 msgstr "Все"
@@ -383,7 +395,7 @@
 
 #: contrib/admin/models.py:16
 msgid "action time"
-msgstr "время действия"
+msgstr "Время действия"
 
 #: contrib/admin/models.py:19
 msgid "object id"
@@ -391,36 +403,33 @@
 
 #: contrib/admin/models.py:20
 msgid "object repr"
-msgstr "представление обьекта"
+msgstr "Представление обьекта"
 
 #: contrib/admin/models.py:21
 msgid "action flag"
-msgstr "отметка действия"
+msgstr "Отметка действия"
 
 #: contrib/admin/models.py:22
 msgid "change message"
-msgstr "изменить сообщение"
+msgstr "Изменить сообщение"
 
 #: contrib/admin/models.py:25
 msgid "log entry"
-msgstr "журнальная запись"
+msgstr "Журнальная запись"
 
 #: contrib/admin/models.py:26
 msgid "log entries"
-msgstr "журнальные записи"
+msgstr "Журнальные записи"
 
 #: contrib/admin/templatetags/admin_list.py:228
 msgid "All dates"
 msgstr "Все даты"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
+#: contrib/admin/views/decorators.py:9
+#: contrib/auth/forms.py:36
 #: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Пожалуйста, вводите верные данные именя пользователя и пароль. Помните, оба "
-"поля чувствительны к регистру."
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Пожалуйста, введите верные имя пользователя и пароль. Помните, оба поля чувствительны к регистру."
 
 #: contrib/admin/views/decorators.py:23
 #: contrib/admin/templates/admin/login.html:25
@@ -428,20 +437,12 @@
 msgstr "Вход"
 
 #: contrib/admin/views/decorators.py:61
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Пожалуйста войдите снова, посколькук ваша сессия устарела. Не беспокойтесь:"
-"введенные вами данные сохранены."
+msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
+msgstr "Пожалуйста, войдите снова, поскольку ваша сессия устарела. Не беспокойтесь: введенные вами данные сохранены."
 
 #: contrib/admin/views/decorators.py:68
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Похоже, что ваш броузер не настроен на прием cookies. Пожалуйства включите "
-"cookie, перезагрузите страницу и попытайтесь снова. "
+msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
+msgstr "Похоже, ваш броузер не настроен на прием cookies. Пожалуйства, включите cookie, перезагрузите страницу и попытайтесь снова."
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
@@ -450,7 +451,7 @@
 #: contrib/admin/views/decorators.py:84
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
+msgstr "Ваш адрес электронной почты не является вашим именем пользователя. Попробуйте '%s' взамен."
 
 #: contrib/admin/views/main.py:226
 msgid "Site administration"
@@ -459,13 +460,15 @@
 #: contrib/admin/views/main.py:260
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" были успешно добавлены."
+msgstr "%(name)s \"%(obj)s\" был успешно добавлен."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:264
+#: contrib/admin/views/main.py:348
 msgid "You may edit it again below."
-msgstr "Вы снова можете редактировать их внизу"
+msgstr "Ниже можно снова редактировать его"
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:272
+#: contrib/admin/views/main.py:357
 #, python-format
 msgid "You may add another %s below."
 msgstr "Вы можете добавить %s внизу."
@@ -478,9 +481,10 @@
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
-msgstr "Добавлено %s"
+msgstr "Добавлен %s."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
 msgid "and"
 msgstr "и"
@@ -488,27 +492,26 @@
 #: contrib/admin/views/main.py:338
 #, python-format
 msgid "Changed %s."
-msgstr "Изменено %s."
+msgstr "Изменен %s."
 
 #: contrib/admin/views/main.py:340
 #, python-format
 msgid "Deleted %s."
-msgstr "Удалено %s."
+msgstr "Удален %s."
 
 #: contrib/admin/views/main.py:343
 msgid "No fields changed."
-msgstr ""
+msgstr "Ни одно поле не изменено."
 
 #: contrib/admin/views/main.py:346
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" был успешно изменен."
 
 #: contrib/admin/views/main.py:354
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" был успешно добавлен. Ниже можно снова редактировать его."
 
 #: contrib/admin/views/main.py:392
 #, python-format
@@ -518,17 +521,17 @@
 #: contrib/admin/views/main.py:470
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Одно или более  %(fieldname)s в %(name)s: %(obj)s"
+msgstr "Один или более  %(fieldname)s в %(name)s: %(obj)s"
 
 #: contrib/admin/views/main.py:475
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Одно или более %(fieldname)s в %(name)s:"
+msgstr "Один или более %(fieldname)s в %(name)s:"
 
 #: contrib/admin/views/main.py:508
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" было успешно удалено."
+msgstr "%(name)s \"%(obj)s\" был успешно удален."
 
 #: contrib/admin/views/main.py:511
 msgid "Are you sure?"
@@ -537,7 +540,7 @@
 #: contrib/admin/views/main.py:533
 #, python-format
 msgid "Change history: %s"
-msgstr "Измени историю: %s"
+msgstr "История изменений: %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
@@ -549,9 +552,12 @@
 msgid "Select %s to change"
 msgstr "Выберите %s для изменения"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/doc.py:277
+#: contrib/admin/views/doc.py:286
+#: contrib/admin/views/doc.py:288
+#: contrib/admin/views/doc.py:294
+#: contrib/admin/views/doc.py:295
+#: contrib/admin/views/doc.py:297
 msgid "Integer"
 msgstr "Целое"
 
@@ -559,7 +565,8 @@
 msgid "Boolean (Either True or False)"
 msgstr "Логическое (True или False)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:279
+#: contrib/admin/views/doc.py:296
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Строка (до %(maxlength)s символов)"
@@ -578,9 +585,10 @@
 
 #: contrib/admin/views/doc.py:283
 msgid "E-mail address"
-msgstr "E-mail адрес"
+msgstr "Адрес электронной почты"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:284
+#: contrib/admin/views/doc.py:287
 msgid "File path"
 msgstr "Путь к файлу"
 
@@ -594,7 +602,7 @@
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr ""
+msgstr "Связь с родительской моделью"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
@@ -608,17 +616,18 @@
 msgid "Time"
 msgstr "Время"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:300
+#: contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
 #: contrib/admin/views/doc.py:301
 msgid "U.S. state (two uppercase letters)"
-msgstr "Штат США (два заглавных символа)"
+msgstr "Штат США (две заглавные буквы)"
 
 #: contrib/admin/views/doc.py:302
 msgid "XML text"
-msgstr "XML текст"
+msgstr "Текст XML"
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
@@ -685,15 +694,11 @@
 
 #: contrib/admin/templates/admin/object_history.html:26
 msgid "DATE_WITH_TIME_FULL"
-msgstr "j. N Y, H:i"
+msgstr "j N Y H:i"
 
 #: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Данный обьект не имеет истории изменения. Возможно он не был добавлен через "
-"данный административный сайт."
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Данный обьект не имеет истории изменений. Возможно, он был добавлен не через данный административный сайт."
 
 #: contrib/admin/templates/admin/base_site.html:4
 msgid "Django site admin"
@@ -716,12 +721,8 @@
 msgstr "Ошибка сервера <em>(500)</em>"
 
 #: 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 ""
-"Произошла ошибка. Отчет об ошибке отправлен администраторам сайта по e-mailи "
-"она должна быть вскоре исправлена. Благодарим вас на терпение и помощь."
+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/404.html:4
 #: contrib/admin/templates/admin/404.html:8
@@ -735,7 +736,7 @@
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr "Модели доступны в %(name)s приложении."
+msgstr "Модели доступны в приложении %(name)s."
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
@@ -752,11 +753,11 @@
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
-msgstr "Последние Действия"
+msgstr "Последние действия"
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "My Actions"
-msgstr "Мои Действия"
+msgstr "Мои действия"
 
 #: contrib/admin/templates/admin/index.html:57
 msgid "None available"
@@ -782,23 +783,13 @@
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr ""
-"Удаление объекта %(object_name)s '%(object)s' приведет к удалению зависимых  "
-"элементов, но предоставленных вам прав недостаточно для удаления следующих "
-"типов объектов:"
+msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Удаление объекта %(object_name)s '%(object)s' привело бы к удалению связанных элементов, но предоставленных вам прав недостаточно для удаления следующих типов объектов:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"Вы уверены, что хотите удалить  %(object_name)s \"%(object)s\"? Все "
-"следующие объекты также будут удалены:"
+msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
+msgstr "Вы уверены, что хотите удалить %(object_name)s \"%(object)s\"? Все следующие связанные объекты также будут удалены:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -807,12 +798,24 @@
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
 msgid " By %(title)s "
-msgstr ""
+msgstr " По %(title)s "
 
 #: 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] "1 результат"
+msgstr[1] "%(counter)s результата"
+msgstr[2] "%(counter)s результатов"
+
+#: contrib/admin/templates/admin/search_form.html:10
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s всего"
+
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
 msgstr "Смотреть сайт"
@@ -820,8 +823,9 @@
 #: contrib/admin/templates/admin/change_form.html:30
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
-msgstr[0] "Пожалуйста исправьте ошибку ниже."
-msgstr[1] "Пожалуйста исправьте ошибки ниже."
+msgstr[0] "Пожалуйста, исправьте ошибку ниже."
+msgstr[1] "Пожалуйста, исправьте ошибки ниже."
+msgstr[2] "Пожалуйста, исправьте ошибки ниже."
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
@@ -871,16 +875,12 @@
 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 ""
-"Забыли пароль? Введите ваш e-mail адрес ниже и мы очистим ваш старый пароль, "
-"и вышлем вам по e-mail новый."
+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 "Забыли пароль? Введите свой адрес электронной почты ниже, мы очистим ваш старый пароль и вышлем вам по e-mail новый."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
-msgstr "E-mail адрес:"
+msgstr "Адрес электронной почты:"
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
@@ -900,20 +900,12 @@
 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 ""
-"Мы отправили новый пароль по указанному вами адресу электронной почты. Вы "
-"должны его вскоре получить."
+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: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 ""
-"В целях безопасности, пожалуйста, введите ваш старый пароль, затем - новый "
-"пароль дважды, с тем, чтобы мы могли убедиться в правильности написания."
+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:"
@@ -933,12 +925,12 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Вы получили это сообщение потому что была запрошена очистка пароля"
+msgstr "Вы получили это сообщение, потому что была запрошена очистка пароля"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
 msgid "for your user account at %(site_name)s"
-msgstr "для вашего пользовательского аккаунта на %(site_name)s"
+msgstr "Для вашей учетной записи на %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_email.html:5
 #, python-format
@@ -947,7 +939,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:7
 msgid "Feel free to change this password by going to this page:"
-msgstr "Вы всегда можете изменить этот пароль перейдя на страницу:"
+msgstr "Вы всегда можете изменить этот пароль, перейдя на страницу:"
 
 #: contrib/admin/templates/registration/password_reset_email.html:11
 msgid "Your username, in case you've forgotten:"
@@ -968,7 +960,7 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:5
 msgid "Documentation bookmarklets"
-msgstr "Документация по bookmarklets"
+msgstr "Закладки документации"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:9
 msgid ""
@@ -980,30 +972,29 @@
 "as \"internal\" (talk to your system administrator if you aren't sure if\n"
 "your computer is \"internal\").</p>\n"
 msgstr ""
+"\n"
+"<p class=\"help\">Для установки закладок перетащите ссылку к себе на панель\n"
+"закладок или щелкните правой кнопкой мыши по ссылке и добавьте ее в закладки. Теперь у вас есть возможность\n"
+"выбрать закладку с любой страницы сайта. Обратите внимание: некоторые из этих\n"
+"закладок требуют, чтобы вы просматривали сайт с компьютера, определенного\n"
+"как \"внутренний\" (уточните у своего системного администратора, если не уверены, является ли\n"
+"ваш компьютер \"внутренним\").</p>\n"
 
 #: 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 ""
-"Перенаправит вас с любой страницы к просмотру документа, который генерирует "
-"эту страницу."
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Перенаправляет вас с любой страницы к документации view, который генерирует эту страницу."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
 msgid "Show object ID"
 msgstr "Показать ID обьекта"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Показывает тип наполнения и уникальный ID для страниц, которые означают "
-"одинокий объект."
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Показывает тип наполнения и уникальный ID для страниц, представляющих один объект."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
@@ -1011,7 +1002,7 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Перейти на страницу администратор для страниц представляющих один объект."
+msgstr "Перейдет на административную страницу для страниц, представляющих один объект."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
@@ -1019,7 +1010,7 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:29
 msgid "As above, but opens the admin page in a new window."
-msgstr "То же что и выше, но откроет административную страницу в новом окне"
+msgstr "То же что и выше, но откроет административную страницу в новом окне."
 
 #: contrib/admin/templates/widget/date_time.html:3
 msgid "Date:"
@@ -1039,67 +1030,55 @@
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
-msgstr "перенаправить из"
+msgstr "Перенаправить из"
 
 #: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Это должен быть абсолютный путь, исключая доменное имя. Пример: '/events/"
-"search/'."
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Это должен быть абсолютный путь без доменного имени. Пример: '/events/search/'."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
-msgstr "перенаправить на"
+msgstr "Перенаправить на"
 
 #: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Это должен быть, либо абсолютный путь (как выше) или полный URL начинающийся "
-"с 'http://'."
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgstr "Это должен быть абсолютный путь (как выше) или полный URL, начинающийся с 'http://'."
 
 #: contrib/redirects/models.py:12
 msgid "redirect"
-msgstr "перенаправить"
+msgstr "Перенаправление"
 
 #: contrib/redirects/models.py:13
 msgid "redirects"
-msgstr "перенаправления"
+msgstr "Перенаправления"
 
 #: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Пример: '/about/contact/'. Будьте уверенны, что вставили завепршающий слэш."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Пример: '/about/contact/'. Будьте уверенны, что вставили завепршающий слэш."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
-msgstr "заголовок"
+msgstr "Заголовок"
 
 #: contrib/flatpages/models.py:10
 msgid "content"
-msgstr "наполнение"
+msgstr "Содержимое"
 
 #: contrib/flatpages/models.py:11
 msgid "enable comments"
-msgstr "активировать комментарии"
+msgstr "Активировать комментарии"
 
 #: contrib/flatpages/models.py:12
 msgid "template name"
-msgstr "имя шаблона"
+msgstr "Имя шаблона"
 
 #: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
+msgid "Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."
+msgstr "Пример: 'flatpages/contact_page'. Если этот файл не присутствует, система будет использовать 'flatpages/default'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
-msgstr "регистрация обязательна"
+msgstr "Регистрация обязательна"
 
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
@@ -1107,25 +1086,27 @@
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
-msgstr "простая страница"
+msgstr "Простая страница"
 
 #: contrib/flatpages/models.py:19
 msgid "flat pages"
-msgstr "простые страницы"
+msgstr "Простые страницы"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/models.py:13
+#: contrib/auth/models.py:26
 msgid "name"
-msgstr "имя"
+msgstr "Имя"
 
 #: contrib/auth/models.py:15
 msgid "codename"
-msgstr "код"
+msgstr "Кодовое название"
 
 #: contrib/auth/models.py:17
 msgid "permission"
-msgstr "Права"
+msgstr "Право"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: contrib/auth/models.py:18
+#: contrib/auth/models.py:27
 msgid "permissions"
 msgstr "Права"
 
@@ -1133,37 +1114,38 @@
 msgid "group"
 msgstr "Группа"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: contrib/auth/models.py:30
+#: contrib/auth/models.py:65
 msgid "groups"
 msgstr "Группы"
 
 #: contrib/auth/models.py:55
 msgid "username"
-msgstr "имя пользователя"
+msgstr "Имя пользователя"
 
 #: contrib/auth/models.py:56
 msgid "first name"
-msgstr "имя"
+msgstr "Имя"
 
 #: contrib/auth/models.py:57
 msgid "last name"
-msgstr "фамилия"
+msgstr "Фамилия"
 
 #: contrib/auth/models.py:58
 msgid "e-mail address"
-msgstr "e-mail адрес"
+msgstr "Адрес электронной почты"
 
 #: contrib/auth/models.py:59
 msgid "password"
-msgstr "пароль"
+msgstr "Пароль"
 
 #: contrib/auth/models.py:59
 msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr ""
+msgstr "Используйте '[algo]$[salt]$[hexdigest]'"
 
 #: contrib/auth/models.py:60
 msgid "staff status"
-msgstr "статус персонала"
+msgstr "Статус персонала"
 
 #: contrib/auth/models.py:60
 msgid "Designates whether the user can log into this admin site."
@@ -1171,31 +1153,27 @@
 
 #: contrib/auth/models.py:61
 msgid "active"
-msgstr "активен"
+msgstr "Активный"
 
 #: contrib/auth/models.py:62
 msgid "superuser status"
-msgstr "статус админа"
+msgstr "Статус суперпользователя"
 
 #: contrib/auth/models.py:63
 msgid "last login"
-msgstr "последний вход"
+msgstr "Последний вход"
 
 #: contrib/auth/models.py:64
 msgid "date joined"
-msgstr "дата регистрации"
+msgstr "Дата регистрации"
 
 #: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"К добавлению к перавам выбрнанным вуручную, этот пользователь может получить "
-"все права группы, к которой он принадлежит."
+msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
+msgstr "В добавление к правам, присвоенным вручную, этот пользователь получит все права групп, к которым он принадлежит."
 
 #: contrib/auth/models.py:67
 msgid "user permissions"
-msgstr "Права пользователя"
+msgstr "права пользователя"
 
 #: contrib/auth/models.py:70
 msgid "user"
@@ -1226,10 +1204,8 @@
 msgstr "Сообщение"
 
 #: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "У вашего браузера не включены cookies. Cookies необходимы для входа."
 
 #: contrib/contenttypes/models.py:25
 msgid "python model class name"
@@ -1237,59 +1213,59 @@
 
 #: contrib/contenttypes/models.py:28
 msgid "content type"
-msgstr "тип наполнения"
+msgstr "Тип содержимого"
 
 #: contrib/contenttypes/models.py:29
 msgid "content types"
-msgstr "типы наполнения"
+msgstr "Типы содержимого"
 
 #: contrib/sessions/models.py:35
 msgid "session key"
-msgstr "ключ сессии"
+msgstr "Ключ сессии"
 
 #: contrib/sessions/models.py:36
 msgid "session data"
-msgstr "данные сессии"
+msgstr "Данные сессии"
 
 #: contrib/sessions/models.py:37
 msgid "expire date"
-msgstr "дата окончания"
+msgstr "Дата окончания"
 
 #: contrib/sessions/models.py:41
 msgid "session"
-msgstr "сессия"
+msgstr "Сессия"
 
 #: contrib/sessions/models.py:42
 msgid "sessions"
-msgstr "сессии"
+msgstr "Сессии"
 
 #: contrib/sites/models.py:10
 msgid "domain name"
-msgstr "домен"
+msgstr "Доменное имя"
 
 #: contrib/sites/models.py:11
 msgid "display name"
-msgstr "выводимое имя"
+msgstr "Выводимое имя"
 
 #: contrib/sites/models.py:15
 msgid "site"
-msgstr "сайт"
+msgstr "Сайт"
 
 #: contrib/sites/models.py:16
 msgid "sites"
-msgstr "сайты"
+msgstr "Сайты"
 
 #: utils/translation.py:360
 msgid "DATE_FORMAT"
-msgstr ""
+msgstr "d.m.Y"
 
 #: utils/translation.py:361
 msgid "DATETIME_FORMAT"
-msgstr ""
+msgstr "d.m.Y H:i"
 
 #: utils/translation.py:362
 msgid "TIME_FORMAT"
-msgstr ""
+msgstr "H:i"
 
 #: utils/dates.py:6
 msgid "Monday"
@@ -1327,23 +1303,28 @@
 msgid "February"
 msgstr "Февраль"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "March"
 msgstr "Март"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "April"
 msgstr "Апрель"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "May"
 msgstr "Май"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "June"
 msgstr "Июнь"
 
-#: utils/dates.py:15 utils/dates.py:27
+#: utils/dates.py:15
+#: utils/dates.py:27
 msgid "July"
 msgstr "Июль"
 
@@ -1357,7 +1338,7 @@
 
 #: utils/dates.py:15
 msgid "October"
-msgstr "Остябрь"
+msgstr "Октябрь"
 
 #: utils/dates.py:15
 msgid "November"
@@ -1417,143 +1398,149 @@
 
 #: utils/dates.py:27
 msgid "Jan."
-msgstr "Янв."
+msgstr "янв."
 
 #: utils/dates.py:27
 msgid "Feb."
-msgstr "Фев."
+msgstr "фев."
 
 #: utils/dates.py:28
 msgid "Aug."
-msgstr "Авг."
+msgstr "авг."
 
 #: utils/dates.py:28
 msgid "Sept."
-msgstr "Сен."
+msgstr "сен."
 
 #: utils/dates.py:28
 msgid "Oct."
-msgstr "Окт."
+msgstr "окт."
 
 #: utils/dates.py:28
 msgid "Nov."
-msgstr "Нояб."
+msgstr "нояб."
 
 #: utils/dates.py:28
 msgid "Dec."
-msgstr "Дек."
+msgstr "дек."
 
 #: utils/timesince.py:12
 msgid "year"
 msgid_plural "years"
 msgstr[0] "год"
-msgstr[1] "лет"
+msgstr[1] "года"
+msgstr[2] "лет"
 
 #: utils/timesince.py:13
 msgid "month"
 msgid_plural "months"
 msgstr[0] "месяц"
-msgstr[1] "месяцев"
+msgstr[1] "месяца"
+msgstr[2] "месяцев"
 
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
 msgstr[0] "неделя"
-msgstr[1] "недель"
+msgstr[1] "недели"
+msgstr[2] "недель"
 
 #: utils/timesince.py:15
 msgid "day"
 msgid_plural "days"
 msgstr[0] "день"
-msgstr[1] "дней"
+msgstr[1] "дня"
+msgstr[2] "дней"
 
 #: utils/timesince.py:16
 msgid "hour"
 msgid_plural "hours"
 msgstr[0] "час"
-msgstr[1] "часов"
+msgstr[1] "часа"
+msgstr[2] "часов"
 
 #: utils/timesince.py:17
 msgid "minute"
 msgid_plural "minutes"
 msgstr[0] "минута"
-msgstr[1] "минут"
+msgstr[1] "минуты"
+msgstr[2] "минут"
 
 #: conf/global_settings.py:37
 msgid "Bengali"
-msgstr ""
+msgstr "Бенгальский"
 
 #: conf/global_settings.py:38
 msgid "Czech"
-msgstr ""
+msgstr "Чешский"
 
 #: conf/global_settings.py:39
 msgid "Welsh"
-msgstr ""
+msgstr "Уэльский"
 
 #: conf/global_settings.py:40
 msgid "Danish"
-msgstr ""
+msgstr "Датский"
 
 #: conf/global_settings.py:41
 msgid "German"
-msgstr ""
+msgstr "Немецкий"
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Греческий"
 
 #: conf/global_settings.py:43
 msgid "English"
-msgstr ""
+msgstr "Английский"
 
 #: conf/global_settings.py:44
 msgid "Spanish"
-msgstr ""
+msgstr "Испанский"
 
 #: conf/global_settings.py:45
 msgid "French"
-msgstr ""
+msgstr "Французский"
 
 #: conf/global_settings.py:46
 msgid "Galician"
-msgstr ""
+msgstr "Галльский"
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Венгерский"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Иврит"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
-msgstr ""
+msgstr "Исландский"
 
 #: conf/global_settings.py:50
 msgid "Italian"
-msgstr ""
+msgstr "Итальянский"
 
 #: conf/global_settings.py:51
 msgid "Japanese"
-msgstr ""
+msgstr "Японский"
 
 #: conf/global_settings.py:52
 msgid "Dutch"
-msgstr ""
+msgstr "Голландский"
 
 #: conf/global_settings.py:53
 msgid "Norwegian"
-msgstr ""
+msgstr "Норвежский"
 
 #: conf/global_settings.py:54
 msgid "Brazilian"
-msgstr ""
+msgstr "Бразильский"
 
 #: conf/global_settings.py:55
 msgid "Romanian"
-msgstr ""
+msgstr "Румынский"
 
 #: conf/global_settings.py:56
 msgid "Russian"
@@ -1561,106 +1548,100 @@
 
 #: conf/global_settings.py:57
 msgid "Slovak"
-msgstr ""
+msgstr "Словацкий"
 
 #: conf/global_settings.py:58
 msgid "Slovenian"
-msgstr ""
+msgstr "Словенский"
 
 #: conf/global_settings.py:59
 msgid "Serbian"
-msgstr ""
+msgstr "Сербский"
 
 #: conf/global_settings.py:60
 msgid "Swedish"
-msgstr ""
+msgstr "Шведский"
 
 #: conf/global_settings.py:61
 msgid "Ukrainian"
-msgstr ""
+msgstr "Украинский"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
-msgstr ""
+msgstr "Упрощенный китайский"
 
 #: conf/global_settings.py:63
 msgid "Traditional Chinese"
-msgstr ""
+msgstr "Традиционный китайский"
 
 #: core/validators.py:60
 msgid "This value must contain only letters, numbers and underscores."
-msgstr "Значение может содержать только буквы, цифры и подчеркивания."
+msgstr "Значение должно состоять только из букв, цифр и знаков подчеркивания."
 
 #: core/validators.py:64
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "Значение может содержать только буквы, цифры, подчеркивания, дифисы или "
-"тере."
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgstr "Значение должно состоять только из букв, цифр, знаков подчеркивания, тире или наклонной черты вправо."
 
 #: core/validators.py:72
 msgid "Uppercase letters are not allowed here."
-msgstr "Заглавные буквы не разрешены"
+msgstr "Заглавные буквы недопустимы."
 
 #: core/validators.py:76
 msgid "Lowercase letters are not allowed here."
-msgstr "Строчные буквы не разрешены"
+msgstr "Строчные буквы здесь недопустимы."
 
 #: core/validators.py:83
 msgid "Enter only digits separated by commas."
-msgstr "Вводите только цифры разделённые запятыми"
+msgstr "Введите цифры, разделённые запятыми."
 
 #: core/validators.py:95
 msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Вводите реальные e-mail адреса разделённые запятыми"
+msgstr "Введите правильные адреса электронной почты, разделённые запятыми."
 
 #: core/validators.py:99
 msgid "Please enter a valid IP address."
-msgstr "Пожалуйста, вводите реальный IP адрес"
+msgstr "Пожалуйста, введите правильный IP-адрес."
 
 #: core/validators.py:103
 msgid "Empty values are not allowed here."
-msgstr "Пустое значение не разрешено"
+msgstr "Пустое значение здесь недопустимо."
 
 #: core/validators.py:107
 msgid "Non-numeric characters aren't allowed here."
-msgstr "Не цифровые символы не рназрешены"
+msgstr "Нецифровые символы здесь недопустимы."
 
 #: core/validators.py:111
 msgid "This value can't be comprised solely of digits."
-msgstr ""
+msgstr "Это значение не может быть составлено только из цифр."
 
 #: core/validators.py:116
 msgid "Enter a whole number."
-msgstr "Введите номер"
+msgstr "Введите целое число."
 
 #: core/validators.py:120
 msgid "Only alphabetical characters are allowed here."
-msgstr "Только буквы можно использовать"
+msgstr "Здесь разрешены только алфавитные символы."
 
 #: core/validators.py:124
 msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Вводите реальную дату в формате YYYY-MM-DD."
+msgstr "Вводите правильную дату в формате YYYY-MM-DD."
 
 #: core/validators.py:128
 msgid "Enter a valid time in HH:MM format."
-msgstr "Вводите реальное время в формате HH:MM."
+msgstr "Введите правильное время в формате HH:MM."
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: core/validators.py:132
+#: db/models/fields/__init__.py:468
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Вводите реальные дата/время в формате YYYY-MM-DD HH:MM."
+msgstr "Введите правильные дату/время в формате YYYY-MM-DD HH:MM."
 
 #: core/validators.py:136
 msgid "Enter a valid e-mail address."
-msgstr "Укажите реальный e-mail адрес."
+msgstr "Укажите правильный адрес электронной почты."
 
 #: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Загрузите реальное изображение. Файл, который вы загружали, не был "
-"изображением или был поврежден."
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Загрузите реальное изображение. Файл, который вы загрузили, не является изображением или был поврежден."
 
 #: core/validators.py:155
 #, python-format
@@ -1670,7 +1651,7 @@
 #: core/validators.py:159
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Телефонный номер должен быть в формате XXX-XXX-XXXX. \"%s\" не верен."
+msgstr "Телефонные номера должен быть в формате XXX-XXX-XXXX. \"%s\" неверен."
 
 #: core/validators.py:167
 #, python-format
@@ -1679,7 +1660,7 @@
 
 #: core/validators.py:171
 msgid "A valid URL is required."
-msgstr "Реальный URL обязателен."
+msgstr "Правильный URL обязателен."
 
 #: core/validators.py:185
 #, python-format
@@ -1687,7 +1668,7 @@
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
-"Реальный HTML обязателен. Специфичные ошибки:\n"
+"Правильный HTML обязателен. Специфичные ошибки:\n"
 "%s"
 
 #: core/validators.py:192
@@ -1700,14 +1681,15 @@
 msgid "Invalid URL: %s"
 msgstr "Неверный URL: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:206
+#: core/validators.py:208
 #, python-format
 msgid "The URL %s is a broken link."
-msgstr "URL %s сломанная ссылка."
+msgstr "URL %s - сломанная ссылка."
 
 #: core/validators.py:214
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "Вводите реальную абревиатуру штатов США."
+msgstr "Введите правильную аббревиатуру штата США."
 
 #: core/validators.py:229
 #, python-format
@@ -1715,6 +1697,7 @@
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Следите за своими словами! Слово %s здесь запрещено."
 msgstr[1] "Следите за своими словами! Слова %s здесь запрещены."
+msgstr[2] "Следите за своими словами! Слова %s здесь запрещены."
 
 #: core/validators.py:236
 #, python-format
@@ -1725,70 +1708,63 @@
 msgid "Please enter something for at least one field."
 msgstr "Пожалуйста, заполните хотя бы одно поле."
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:264
+#: core/validators.py:275
 msgid "Please enter both fields or leave them both empty."
-msgstr "Пожалуйста, заполните оба поля либо оставьте их пустыми."
+msgstr "Пожалуйста, заполните оба поля или оставьте их оба пустыми."
 
 #: core/validators.py:282
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Это поле должно быть заполнено если %(field)s равно %(value)s"
+msgstr "Это поле должно быть заполнено, если %(field)s равно %(value)s"
 
 #: core/validators.py:294
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Это поле должно быть заполнено если %(field)s не равно %(value)s"
+msgstr "Это поле должно быть заполнено, если %(field)s не равно %(value)s"
 
 #: core/validators.py:313
 msgid "Duplicate values are not allowed."
-msgstr "Двойные значения запрещенны."
+msgstr "Двойные значения запрещены."
 
 #: core/validators.py:336
 #, python-format
 msgid "This value must be a power of %s."
-msgstr ""
+msgstr "Это значение должно быть степенью %s."
 
 #: core/validators.py:347
 msgid "Please enter a valid decimal number."
-msgstr "Пожалуйста, вводите корректное десятичное число."
+msgstr "Пожалуйста, введите корректное десятичное число."
 
 #: core/validators.py:349
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] ""
-"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
-"знаков %s."
-msgstr[1] ""
-"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
-"знаков %s."
+msgid_plural "Please enter a valid decimal number with at most %s total digits."
+msgstr[0] "Пожалуйста, введите корректное десятичное число максимально с %s знаком."
+msgstr[1] "Пожалуйста, введите корректное десятичное число максимально с %s знаками."
+msgstr[2] "Пожалуйста, введите корректное десятичное число максимально с %s знаками."
 
 #: core/validators.py:352
 #, python-format
 msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] ""
-"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
-"знаков после запятой %s."
-msgstr[1] ""
-"Пожалуйста, вводите корректное десятичное число с максимальным количеством "
-"знаков после запятой %s."
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] "Пожалуйста, введите корректное десятичное число максимально с %s знаком после запятой."
+msgstr[1] "Пожалуйста, введите корректное десятичное число максимально с %s знаками после запятой."
+msgstr[2] "Пожалуйста, введите корректное десятичное число максимально с %s знаками после запятой."
 
 #: core/validators.py:362
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Убедитесь, что загруженный файл по крайней мере не меньше %s байт."
+msgstr "Убедитесь, что загруженный файл не меньше %s байт."
 
 #: core/validators.py:363
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Убедитесь, что загруженный файл больше чем %s байт."
+msgstr "Убедитесь, что загруженный файл не больше %s байт."
 
 #: core/validators.py:376
 msgid "The format for this field is wrong."
-msgstr "Формат этого поля неверен"
+msgstr "Формат этого поля неверен."
 
 #: core/validators.py:391
 msgid "This field is invalid."
@@ -1797,85 +1773,72 @@
 #: core/validators.py:426
 #, python-format
 msgid "Could not retrieve anything from %s."
-msgstr "Невозможно получить что-либо с %s."
+msgstr "Невозможно получить ничего с %s."
 
 #: core/validators.py:429
 #, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "URL %(url) вернул неверный заголовок Content-Type '%(contenttype)'."
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "URL %(url)s вернул неверный заголовок Content-Type '%(contenttype)s'."
 
 #: core/validators.py:462
 #, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
+msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
+msgstr "Пожалуйста, закройте незакрытый тэг %(tag)s на строке %(line)s. (Строка начинается с \"%(start)s\".)"
 
 #: core/validators.py:466
 #, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
+msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
+msgstr "Что-то из текста, начинающегося на строке %(line)s, недопустимо в том контексте. (Строка начинается с \"%(start)s\".)"
 
 #: core/validators.py:471
 #, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
+msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
+msgstr "\"%(attr)s\" на строке %(line)s - неправильный атрибут. (Строка начинается с \"%(start)s\".)"
 
 #: core/validators.py:476
 #, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
+msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
+msgstr "\"<%(tag)s>\" на строке %(line)s - неправильный тег. (Строка начинается с \"%(start)s\".)"
 
 #: core/validators.py:480
 #, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
+msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
+msgstr "В теге на строке %(line)s не хватает одного или более обязательных атрибутов. (Строка начинается с \"%(start)s\".)"
 
 #: core/validators.py:485
 #, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
+msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
+msgstr "Атрибут \"%(attr)s\" на строке %(line)s имеет недопустимое значение. (Строка начинается с \"%(start)s\".)"
 
 #: db/models/manipulators.py:302
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
+msgstr "%(object)s с типом %(type)s уже существует для данного %(field)s."
 
 #: db/models/fields/__init__.py:40
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr ""
+msgstr "%(optname)s с %(fieldname)s уже существует."
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
+#: db/models/fields/__init__.py:114
+#: db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:542
+#: db/models/fields/__init__.py:553
 #: forms/__init__.py:346
 msgid "This field is required."
 msgstr "Обязательное поле."
 
 #: db/models/fields/__init__.py:337
 msgid "This value must be an integer."
-msgstr ""
+msgstr "Это значение должно быть целым числом."
 
 #: db/models/fields/__init__.py:369
-#, fuzzy
 msgid "This value must be either True or False."
-msgstr "Логическое (True или False)"
+msgstr "Значение должно либо True, либо False."
 
 #: db/models/fields/__init__.py:385
-#, fuzzy
 msgid "This field cannot be null."
-msgstr "Это поле неверно."
+msgstr "Это поле не может быть нулевым."
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
@@ -1884,52 +1847,50 @@
 #: db/models/fields/related.py:43
 #, python-format
 msgid "Please enter a valid %s."
-msgstr ""
+msgstr "Пожалуйста, введите правильный %s."
 
 #: db/models/fields/related.py:579
-#, fuzzy
 msgid "Separate multiple IDs with commas."
-msgstr "Несколько значений ID разделяйте запятыми."
+msgstr "Несколько значений ID разделите запятыми."
 
 #: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Удерживайте \"Control\", или \"Command\" на Макинтош, для выбора больше чем "
-"одного."
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Удерживайте \"Control\" (или \"Command\" на Mac) для выбора нескольких."
 
 #: db/models/fields/related.py:625
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-msgstr[1] ""
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Пожалуйста, введите корректный ID для %(self)s. Значение %(value)r недопустимо."
+msgstr[1] "Пожалуйста, введите корректные ID для %(self)s. Значения %(value)r недопустимы."
+msgstr[2] "Пожалуйста, введите корректные ID для %(self)s. Значения %(value)r недопустимы."
 
 #: forms/__init__.py:380
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Убедитесь, что длина вашего текста меньше %s символа."
+msgstr[1] "Убедитесь, что длина вашего текста меньше %s символов."
+msgstr[2] "Убедитесь, что длина вашего текста меньше %s символов."
 
 #: forms/__init__.py:385
 msgid "Line breaks are not allowed here."
-msgstr "Переносы строк не допускаются здесь."
+msgstr "Переносы строк здесь не допускаются."
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: forms/__init__.py:480
+#: forms/__init__.py:551
+#: forms/__init__.py:589
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr ""
+msgstr "Выберите корректный вариант; '%(data)s' нет в %(choices)s."
 
 #: forms/__init__.py:645
 msgid "The submitted file is empty."
-msgstr "Указанный файл - пуст."
+msgstr "Указанный файл пуст."
 
 #: forms/__init__.py:699
 msgid "Enter a whole number between -32,768 and 32,767."
-msgstr ""
+msgstr "Введите целое число в диапазоне от -32768 до 32767."
 
 #: forms/__init__.py:708
 msgid "Enter a positive number."
@@ -1943,30 +1904,3 @@
 msgid "yes,no,maybe"
 msgstr "да,нет,может быть"
 
-#~ msgid "Comment"
-#~ msgstr "Комментарий"
-
-#~ msgid "Comments"
-#~ msgstr "Комментарии"
-
-#~ msgid "label"
-#~ msgstr "метка"
-
-#~ msgid "package"
-#~ msgstr "пакет"
-
-#~ msgid "packages"
-#~ msgstr "пакеты"
-
-#~ msgid "String (up to 50)"
-#~ msgstr "Строка (до 50 символов)"
-
-#~ msgid ""
-#~ "Example: 'flatfiles/contact_page'. If this isn't provided, the system "
-#~ "will use 'flatfiles/default'."
-#~ msgstr ""
-#~ "Пример: 'flatfiles/contact_page'. Если не предусмотрена, система будет "
-#~ "использовать 'flatfiles/default'."
-
-#~ msgid "Server error <em>(500)</em>"
-#~ msgstr "Ошибка сервера <em>(500)</em>"

Modified: vendor/django/current/django/conf/locale/sl/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/sl/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/sl/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/sl/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,21 +1,27 @@
-# SOME DESCRIPTIVE TITLE.
+# translation of django.po to Slovenian
+# Igor Kolar <ike at email.si), 2006.
+# Nena Kojadin <nena at kiberpipa.org), 2006.
+# Jure Cuhalev <gandalf at owca.info>, 2006, 2007.
+# Gasper Koren <gasper at fdvinfo.net>, 2007.
+# Jozko Skrablin <jozko.skrablin at gmail.com>, 2007.
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
-# Igor Kolar <ike at email.si), 2006.
-# Nena Kojadin <nena at kiberpipa.org), 2006
 msgid ""
 msgstr ""
-"Project-Id-Version: Django Slovenian 0.92+svn translation\n"
+"Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:13+0200\n"
-"PO-Revision-Date: 2006-03-19 17:30+0100\n"
-"Last-Translator: Jure ÄŒuhalev <gandalf at owca.info>\n"
-"Language-Team: Slovenian <sl at li.org>\n"
+"PO-Revision-Date: 2007-02-15 21:47+0100\n"
+"Last-Translator: Gasper Koren <gasper at fdvinfo.net>\n"
+"Language-Team: Slovenian <lugos-slo at lugos.si>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
 
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
+#: contrib/comments/models.py:67
+#: contrib/comments/models.py:166
 msgid "object ID"
 msgstr "ID objekta"
 
@@ -23,7 +29,8 @@
 msgid "headline"
 msgstr "naslov"
 
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:69
+#: contrib/comments/models.py:90
 #: contrib/comments/models.py:167
 msgid "comment"
 msgstr "komentar"
@@ -64,15 +71,18 @@
 msgid "is valid rating"
 msgstr "je veljavni rating"
 
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
+#: contrib/comments/models.py:83
+#: contrib/comments/models.py:169
 msgid "date/time submitted"
-msgstr "podatek datum/čas poslan"
+msgstr "datum/čas vnosa"
 
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
+#: contrib/comments/models.py:84
+#: contrib/comments/models.py:170
 msgid "is public"
 msgstr "je javno"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85
+#: contrib/admin/views/doc.py:289
 msgid "IP address"
 msgstr "IP naslov"
 
@@ -81,21 +91,17 @@
 msgstr "je odstranjen/-a"
 
 #: 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 ""
-"Odkljukaj, če je komntar neprimeren. Namesto komentarja bo vidno obvestilo "
-"\"Ta komentar je bil odstranjen\"."
+msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
+msgstr "Odkljukaj, če je komentar neprimeren. Namesto komentarja bo vidno obvestilo \"Ta komentar je bil odstranjen\"."
 
 #: contrib/comments/models.py:91
-#, fuzzy
 msgid "comments"
-msgstr "komentar"
+msgstr "komentarji"
 
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
+#: contrib/comments/models.py:131
+#: contrib/comments/models.py:207
 msgid "Content object"
-msgstr "Objekt s vsebino"
+msgstr "Objekt z vsebino"
 
 #: contrib/comments/models.py:159
 #, python-format
@@ -122,17 +128,15 @@
 
 #: contrib/comments/models.py:173
 msgid "approved by staff"
-msgstr "potrjeno s strani osebja"
+msgstr "osebje je potrdilo"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
-msgstr "Zastonj komentar"
+msgstr "anonimen komentar"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
-msgstr "Zastonj komentarji"
+msgstr "anonimni komentarji"
 
 #: contrib/comments/models.py:233
 msgid "score"
@@ -143,14 +147,12 @@
 msgstr "datum ocene"
 
 #: contrib/comments/models.py:237
-#, fuzzy
 msgid "karma score"
-msgstr "Karma"
+msgstr "karma točke"
 
 #: contrib/comments/models.py:238
-#, fuzzy
 msgid "karma scores"
-msgstr "Skrivnosti karme"
+msgstr "karma točke"
 
 #: contrib/comments/models.py:242
 #, python-format
@@ -173,14 +175,12 @@
 msgstr "datum označitve (zastavice)"
 
 #: contrib/comments/models.py:268
-#, fuzzy
 msgid "user flag"
-msgstr "Uporabniška zastavica"
+msgstr "uporabniška zastavica"
 
 #: contrib/comments/models.py:269
-#, fuzzy
 msgid "user flags"
-msgstr "Uporabniške zastavice"
+msgstr "uporabniške zastavice"
 
 #: contrib/comments/models.py:273
 #, python-format
@@ -192,14 +192,12 @@
 msgstr "datum izbrisa"
 
 #: contrib/comments/models.py:280
-#, fuzzy
 msgid "moderator deletion"
-msgstr "Izbris s strani moderatorja"
+msgstr "izbris s strani moderatorja"
 
 #: contrib/comments/models.py:281
-#, fuzzy
 msgid "moderator deletions"
-msgstr "Izbrisi s strani moderatorja"
+msgstr "izbrisi s strani moderatorja"
 
 #: contrib/comments/models.py:285
 #, python-format
@@ -208,7 +206,7 @@
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
-msgstr "Anonimni upirabniki ne morejo glasovati"
+msgstr "Anonimni uporabniki ne morejo glasovati"
 
 #: contrib/comments/views/karma.py:23
 msgid "Invalid comment ID"
@@ -219,32 +217,35 @@
 msgstr "Ni mogoče glasovati zase"
 
 #: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr "Moraš podati tole oceno, ker si podal vsaj še eno drugo oceno."
+msgid "This rating is required because you've entered at least one other rating."
+msgstr "To oceno moraš podati, ker si podal vsaj še eno drugo oceno."
 
 #: 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"
+"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"
+"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
 "\n"
 "%(text)s"
 msgstr[0] ""
-"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s "
-"komentarjev Komentar:\n"
+"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s komentarjev:\n"
 "\n"
 "%(text)s"
 msgstr[1] ""
-"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s "
-"komentarjev Komentar:\n"
+"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s komentarja:\n"
 "\n"
 "%(text)s"
+msgstr[2] ""
+"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s komentarje:\n"
+"\n"
+"%(text)s"
+msgstr[3] ""
+"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s komentarjev:\n"
+"\n"
+"%(text)s"
 
 #: contrib/comments/views/comments.py:117
 #, python-format
@@ -260,12 +261,12 @@
 #: contrib/comments/views/comments.py:189
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
-msgstr "Dovoljena je le metoda HTTP POST"
+msgstr "Dovoljena je le POST metoda"
 
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr "Eden ali več obveznih polj ni vpisanih"
+msgstr "Eno ali več obveznih polj ni vpisanih"
 
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
@@ -274,17 +275,13 @@
 
 #: contrib/comments/views/comments.py:207
 #: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"Obrazec s komentarji ima neveljavni parameter 'target' -- ID objekta je "
-"neveljaven."
+msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
+msgstr "Obrazec s komentarji ima neveljavni parameter 'target' -- ID objekta je neveljaven."
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Obrazec s komentarji ne zahteva niti 'preview' niti 'post' akcije."
+msgstr "Obrazec s komentarji ni podal niti 'preview' niti 'post' akcije."
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
@@ -363,7 +360,8 @@
 "<h3>Avtor: %s</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:70
+#: contrib/admin/filterspecs.py:88
 #: contrib/admin/filterspecs.py:143
 msgid "All"
 msgstr "Vse"
@@ -390,7 +388,7 @@
 
 #: contrib/admin/filterspecs.py:143
 msgid "Yes"
-msgstr "Ja"
+msgstr "Da"
 
 #: contrib/admin/filterspecs.py:143
 msgid "No"
@@ -402,7 +400,7 @@
 
 #: contrib/admin/models.py:16
 msgid "action time"
-msgstr "čas oprave dejanja"
+msgstr "čas dejanja"
 
 #: contrib/admin/models.py:19
 msgid "object id"
@@ -414,7 +412,7 @@
 
 #: contrib/admin/models.py:21
 msgid "action flag"
-msgstr "zastavica za določeno dejanje"
+msgstr "zastavica dejanja"
 
 #: contrib/admin/models.py:22
 msgid "change message"
@@ -432,46 +430,33 @@
 msgid "All dates"
 msgstr "Vsi datumi"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
+#: contrib/admin/views/decorators.py:9
+#: contrib/auth/forms.py:36
 #: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Prosimo, vnesite veljavno uporabniško ime in geslo. Opomba: obe polji sta "
-"občutljivi na velikost črk"
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Prosimo, vnesite veljavno uporabniško ime in geslo. Opomba: obe polji upoštevata velikost črk."
 
 #: contrib/admin/views/decorators.py:23
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
-msgstr "Prijate se"
+msgstr "Prijavite se"
 
 #: contrib/admin/views/decorators.py:61
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Vaša seja je pretekla; prosimo, prijavite se znova. Opomba: Vse vaše objave "
-"so varno shranjene."
+msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
+msgstr "Vaša seja je pretekla; prosimo da se ponovno prijavite. Brez skrbi, vaše objave so varno shranjene."
 
 #: contrib/admin/views/decorators.py:68
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Izgleda, da vaš brskalnik nima podpore za piškotke. Prosimo, vključite "
-"piškotke, znova naložite to stran in poskusite še enkrat."
+msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
+msgstr "Izgleda, da vaš brskalnik nima podpore za piškotke. Prosimo, vključite piškotke, osvežite stran in poskusite še enkrat."
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
-msgstr "Uporabniška imena ne smejo vsebovati znaka '@'"
+msgstr "Uporabniška imena ne smejo vsebovati znaka '@'."
 
 #: contrib/admin/views/decorators.py:84
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Vaš e-mail naslov ne morete uporabljati kot uporabniško ime. Namesto tega "
-"uporabite '%s'"
+msgstr "Vaš e-main naslov ni vaše uporabniško ime. Poskusite uporabiti '%s'."
 
 #: contrib/admin/views/main.py:226
 msgid "Site administration"
@@ -482,11 +467,13 @@
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" je bil uspešno dodan."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:264
+#: contrib/admin/views/main.py:348
 msgid "You may edit it again below."
 msgstr "Vsebino lahko znova uredite spodaj."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:272
+#: contrib/admin/views/main.py:357
 #, python-format
 msgid "You may add another %s below."
 msgstr "Spodaj lahko dodate Å¡e en %s."
@@ -499,9 +486,10 @@
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
-msgstr "Dodal %s."
+msgstr "Dodan %s."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
 msgid "and"
 msgstr "in"
@@ -509,12 +497,12 @@
 #: contrib/admin/views/main.py:338
 #, python-format
 msgid "Changed %s."
-msgstr "Spremenil %s"
+msgstr "Spremenjen %s."
 
 #: contrib/admin/views/main.py:340
 #, python-format
 msgid "Deleted %s."
-msgstr "Izbrisal %s."
+msgstr "Izbrisn %s."
 
 #: contrib/admin/views/main.py:343
 msgid "No fields changed."
@@ -523,14 +511,12 @@
 #: contrib/admin/views/main.py:346
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "%(name)s \"%(obj)s\" je bilo uspešno spremenjeno."
+msgstr "%(name)s \"%(obj)s\" je bil uspešno spremenjeno."
 
 #: contrib/admin/views/main.py:354
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" je bilo uspešno dodano. Znova ga lahko urejate spodaj."
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" je bil uspešno dodano. Ponovno ga lahko urejdite spodaj."
 
 #: contrib/admin/views/main.py:392
 #, python-format
@@ -550,7 +536,7 @@
 #: contrib/admin/views/main.py:508
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" je bilo uspešno izbrisano."
+msgstr "%(name)s \"%(obj)s\" je bilo uspešno izbrisan."
 
 #: contrib/admin/views/main.py:511
 msgid "Are you sure?"
@@ -564,45 +550,50 @@
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s"
-msgstr "Izberi %s"
+msgstr "Izberite %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s to change"
-msgstr "Izberi %s, ki ga želite spremeniti"
+msgstr "Izberite %s, ki ga želite spremeniti"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/doc.py:277
+#: contrib/admin/views/doc.py:286
+#: contrib/admin/views/doc.py:288
+#: contrib/admin/views/doc.py:294
+#: contrib/admin/views/doc.py:295
+#: contrib/admin/views/doc.py:297
 msgid "Integer"
-msgstr "Integer (Å¡tevilo)"
+msgstr "Celo Å¡tevilo (integer)"
 
 #: contrib/admin/views/doc.py:278
 msgid "Boolean (Either True or False)"
-msgstr "Boolean (ali True ali False)"
+msgstr "Boolean (True ali False)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:279
+#: contrib/admin/views/doc.py:296
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Niz (vse do %(maxlength)s)"
 
 #: contrib/admin/views/doc.py:280
 msgid "Comma-separated integers"
-msgstr "Z vejico ločeni integerji"
+msgstr "Z vejico ločena cela števila (integer)"
 
 #: contrib/admin/views/doc.py:281
 msgid "Date (without time)"
-msgstr "Datum (brez časa)"
+msgstr "Datum (brez ure)"
 
 #: contrib/admin/views/doc.py:282
 msgid "Date (with time)"
-msgstr "Datum (s časom)"
+msgstr "Datum (z uro)"
 
 #: contrib/admin/views/doc.py:283
 msgid "E-mail address"
-msgstr "E-naslov"
+msgstr "E-mail naslov"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:284
+#: contrib/admin/views/doc.py:287
 msgid "File path"
 msgstr "Pot do datoteke"
 
@@ -612,11 +603,11 @@
 
 #: contrib/admin/views/doc.py:291
 msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (ali True ali False ali None)"
+msgstr "Boolean (True, False ali None)"
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr "Razmerje z starševskim modelom"
+msgstr "Razmerje s starševskim modelom"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
@@ -630,7 +621,8 @@
 msgid "Time"
 msgstr "ÄŒas"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:300
+#: contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL (spletni naslov)"
 
@@ -707,19 +699,15 @@
 
 #: contrib/admin/templates/admin/object_history.html:26
 msgid "DATE_WITH_TIME_FULL"
-msgstr "N j, Y, P"
+msgstr "N j, Y, H:i"
 
 #: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Ta objekt nima zgodovine. Verjetno ni bil dodan preko te administratorske "
-"strani."
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Ta objekt nima zgodovine sprememb. Verjetno ni bil dodan preko te strani za administracijo."
 
 #: contrib/admin/templates/admin/base_site.html:4
 msgid "Django site admin"
-msgstr "Django site admin"
+msgstr "Vmesnik za administracijo Django strani"
 
 #: contrib/admin/templates/admin/base_site.html:7
 msgid "Django administration"
@@ -731,19 +719,15 @@
 
 #: contrib/admin/templates/admin/500.html:6
 msgid "Server error (500)"
-msgstr "Django napaka (500)"
+msgstr "Napaka strežnika (500)"
 
 #: contrib/admin/templates/admin/500.html:9
 msgid "Server Error <em>(500)</em>"
 msgstr "Napaka strežnika <em>(500)</em>"
 
 #: 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 ""
-"Prišlo je do nepričakovane napake. Administratorji strani so že obveščeni "
-"prekoe-pošte in naj bi jo v kratkem odpravili. Hvala za vaše potrpljenje."
+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 "Prišlo je do nepričakovane napake. Administrator je preko e-pošte prejel obvestilo o napaki in jo bo v kratkem odpravil. Hvala za potrpljenje."
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
@@ -752,12 +736,12 @@
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
-msgstr "Se opraivčujemo, a zahtevane strani ni mogoče najti."
+msgstr "Opravičujemo se, a zahtevane strani ni mogoče najti."
 
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modeli na voljo v %(name)s aplikaciji"
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
@@ -776,7 +760,7 @@
 msgid "Recent Actions"
 msgstr "Zadnja dejanja"
 
-#: contrib/admin/templates/admin/index.html:53
+#: contrib/admin/tempalates/admin/index.html:53
 msgid "My Actions"
 msgstr "Moja dejanja"
 
@@ -791,7 +775,7 @@
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Ste <a href=\"/password_reset/\">pozabili geslo</a>"
+msgstr "Ste <a href=\"/password_reset/\">pozabili geslo</a>?"
 
 #: contrib/admin/templates/admin/base.html:23
 msgid "Welcome,"
@@ -804,22 +788,13 @@
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr ""
-"Izbris %(object_name)s '%(object)s' bi pomenil izbris povezanih objektov, "
-"vendarvi nimate dovoljenja za izbris naslednjih tipov objektov:"
+msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Izbris %(object_name)s '%(object)s' bi pomenil izbris povezanih objektov, vendar nimate dovoljenja za izbris naslednjih tipov objektov:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"Ste prepričani, da želite izbrisati %(object_name)s \"%(object)s\"?Vsi "
-"naslednji povezani elementi bodo izbrisani:"
+msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
+msgstr "Ste prepričani, da želite izbrisati %(object_name)s \"%(object)s\"?Vsi naslednji povezani elementi bodo izbrisani:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -842,15 +817,17 @@
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Prosimo, odpravite sledečo napako."
-msgstr[1] "Prosimo, odpravite sledeče napake."
+msgstr[1] "Prosimo, odpravite sledeči napaki."
+msgstr[2] "Prosimo, odpravite sledeče napake."
+msgstr[3] "Prosimo, odpravite sledeče napake."
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
-msgstr "Urejanje"
+msgstr "Razvrščanje"
 
 #: contrib/admin/templates/admin/change_form.html:51
 msgid "Order:"
-msgstr "Uredi:"
+msgstr "Razvrsti:"
 
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
@@ -878,7 +855,7 @@
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
 msgid "Password change successful"
-msgstr "Geslo uspešno spremenjeno"
+msgstr "Sprememba gesla je uspela"
 
 #: contrib/admin/templates/registration/password_change_done.html:12
 msgid "Your password was changed."
@@ -889,27 +866,23 @@
 #: contrib/admin/templates/registration/password_reset_form.html:10
 #: contrib/admin/templates/registration/password_reset_done.html:4
 msgid "Password reset"
-msgstr "Obnova gesla"
+msgstr "Ponastavitev gesla"
 
 #: 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 ""
-"Ste pozabili geslo? Vnesite vaš e-naslov spodaj in mi vam bomo poslali novo "
-"geslo."
+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 "Ste pozabili geslo? Vnesite vaš e-mail naslov in poslali vam bomo novo geslo."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
-msgstr "E-naslov"
+msgstr "Naslov e-pošte:"
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
-msgstr "Obnova gesla"
+msgstr "Ponastavi moje geslo"
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Hvala, ker ste si vzeli nekaj časa za to spletno stran."
+msgstr "Hvala, ker ste si danes vzeli nekaj časa za to spletno stran."
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
@@ -918,21 +891,15 @@
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
 msgid "Password reset successful"
-msgstr "Geslo je bilo uspešno obnovljeno"
+msgstr "Ponastavitev gesla je uspela"
 
 #: 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 "Po e-pošti smo vam poslali novo geslo.Morali bi ga prejeti v kratkem"
+msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Po e-pošti smo vam poslali novo geslo. Morali bi ga prejeti v kratkem"
 
 #: 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 ""
-"Prosim, vnesite vaše staro geslo (zaradi varnosti) in nato še dvakrat novo"
-"(da preverimo, da se niste zatipkali)"
+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 "Prosim, vnesite vaše staro geslo (zaradi varnosti) in nato še dvakrat novo (da preverimo, da se niste zatipkali)"
 
 #: contrib/admin/templates/registration/password_change_form.html:17
 msgid "Old password:"
@@ -948,16 +915,16 @@
 
 #: contrib/admin/templates/registration/password_change_form.html:23
 msgid "Change my password"
-msgstr "Sprememba gesla"
+msgstr "Spremeni moje geslo"
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "To pošto ste dobili, ker ste zahtevali spremembo gesla"
+msgstr "Ta e-mail ste dobili, ker ste zahtevali ponastavitev gesla"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
 msgid "for your user account at %(site_name)s"
-msgstr "za vaš uporabniški račun pri %(site_name)s"
+msgstr "za vaš uporabniški račun na %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_email.html:5
 #, python-format
@@ -970,7 +937,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:11
 msgid "Your username, in case you've forgotten:"
-msgstr "Vaše uporabniško ime (za vsak primer)"
+msgstr "Vaše uporabniško ime (za vsak primer):"
 
 #: contrib/admin/templates/registration/password_reset_email.html:13
 msgid "Thanks for using our site!"
@@ -990,6 +957,7 @@
 msgstr "Dokumentacijske zaznamkice"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:9
+#, fuzzy
 msgid ""
 "\n"
 "<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
@@ -1000,43 +968,32 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Za inštalacijo zaznamkic povlečite povezavo v orodno "
-"vrstico\n"
-"z zaznamki, ali kliknite z desno miškino tipko na povezavo in jo dodajte med "
-"zaznamkeZdaj lahko uporabite zaznamek s katere koli strani. Opomba: nekatere "
-"teh stranilahko gledate le z internega računalnika (preverite s sistemskim "
-"administratorjem)</p>\n"
+"<p class=\"help\">Za inštalacijo zaznamkic povlečite povezavo v orodno vrstico\n"
+"z zaznamki, ali kliknite z desno miškino tipko na povezavo in jo dodajte med zaznamke. Zdaj lahko izberete zaznamkico s katerekoli strani. Opomba: nekatere izmed teh strani lahko gledate le z računalnika, ki je označen kot \"notranji\" (v kolikor niste prepričani, če je vaš računalnik označen kot \"notranji\"se obrnite na sistemskega administratorja).</p>\n"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:19
 msgid "Documentation for this page"
-msgstr "Dokumentacija za to stran"
+msgstr "Dokumentacija te strani"
 
 #: 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 ""
-"Skok na stran z dokumentacijo za pogled (view), ki generira trenutno stran."
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Skok na stran z dokumentacijo za pogled (view), ki generira trenutno stran."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
 msgid "Show object ID"
 msgstr "Pokaži ID objekta"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Pokaže content-type in unikatni ID za strani, ki predstavljajo en objekt."
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Pokaže content-type in unikatni ID za strani, ki predstavljajo en objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
-msgstr "Uredi trenutni objekt (v trenutnem oknu)"
+msgstr "Uredi objekt (v trenutnem oknu)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Skok na administracijsko stran za vse strani, ki predstavljajo en objekt."
+msgstr "Skok na administracijsko stran za vse strani, ki predstavljajo en objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
@@ -1052,7 +1009,7 @@
 
 #: contrib/admin/templates/widget/date_time.html:4
 msgid "Time:"
-msgstr "ÄŒas:"
+msgstr "Ura:"
 
 #: contrib/admin/templates/widget/file.html:2
 msgid "Currently:"
@@ -1067,23 +1024,16 @@
 msgstr "preusmeritev iz"
 
 #: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"To mora biti absolutna pot, izključujoč domeno. Primer: '/events/search'-"
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Ta pot mora biti absolutna, brez imena domene. Primer: '/events/search'"
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
 msgstr "preusmeri na"
 
 #: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"To je ali absolutna pot (kot zgoraj) ali popoln URL naslov (začne se z "
-"'http://')"
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgstr "To je lahko absolutna pot (kot zgoraj) ali popoln URL naslov (ki se začne s 'http://')"
 
 #: contrib/redirects/models.py:12
 msgid "redirect"
@@ -1094,10 +1044,8 @@
 msgstr "preusmeritve"
 
 #: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Primer: '/about/contact/'. Mora vsebovati / (poševnico) na začetku in koncu."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Primer: '/about/contact/'. Preverite ali vsebuje / (poševnico) na začetku in koncu vnosa."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
@@ -1116,12 +1064,8 @@
 msgstr "ime predloge"
 
 #: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Primer: 'flatpages/contact_page'. ÄŒe to polje ni izpolnjeno, bo sistem "
-"uporabil 'flatpages/default'."
+msgid "Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."
+msgstr "Primer: 'flatpages/contact_page'. ÄŒe to polje ni izpolnjeno, bo sistem uporabil 'flatpages/default'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1129,19 +1073,18 @@
 
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"ÄŒe je to polje odkljukano, si lahko to stran ogledajo le registrirani "
-"uporabniki."
+msgstr "ÄŒe je to polje izbrano, si bodo to stran lahko ogledali le prijavljeni uporabniki."
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
-msgstr "ploh stran :)"
+msgstr "enostavna stran"
 
 #: contrib/flatpages/models.py:19
 msgid "flat pages"
-msgstr "ploh strani :)"
+msgstr "enostavne strani"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/models.py:13
+#: contrib/auth/models.py:26
 msgid "name"
 msgstr "ime"
 
@@ -1150,24 +1093,22 @@
 msgstr "kodno ime"
 
 #: contrib/auth/models.py:17
-#, fuzzy
 msgid "permission"
-msgstr "Dovoljenje"
+msgstr "dovoljenje"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
+#: contrib/auth/models.py:18
+#: contrib/auth/models.py:27
 msgid "permissions"
-msgstr "Dovoljenja"
+msgstr "dovoljenja"
 
 #: contrib/auth/models.py:29
-#, fuzzy
 msgid "group"
-msgstr "Skupina"
+msgstr "skupina"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
+#: contrib/auth/models.py:30
+#: contrib/auth/models.py:65
 msgid "groups"
-msgstr "Skupine"
+msgstr "skupine"
 
 #: contrib/auth/models.py:55
 msgid "username"
@@ -1183,7 +1124,7 @@
 
 #: contrib/auth/models.py:58
 msgid "e-mail address"
-msgstr "e-naslov"
+msgstr "e-mail naslov"
 
 #: contrib/auth/models.py:59
 msgid "password"
@@ -1218,27 +1159,20 @@
 msgstr "član od"
 
 #: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Polek ročno določenih dovoljenj bo ta uporabnik dobil tudi vsa dovoljenja,ki "
-"pripadajo vsem skupinah, v katerih je."
+msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
+msgstr "Poleg ročno določenih dovoljenj bo ta uporabnik dobil tudi vsa dovoljenja, ki pripadajo skupinam, katerih član je."
 
 #: contrib/auth/models.py:67
-#, fuzzy
 msgid "user permissions"
-msgstr "Dovoljenja"
+msgstr "uporabniška dovoljenja"
 
 #: contrib/auth/models.py:70
-#, fuzzy
 msgid "user"
-msgstr "Uporabnik"
+msgstr "uporabnik"
 
 #: contrib/auth/models.py:71
-#, fuzzy
 msgid "users"
-msgstr "Uporabniki"
+msgstr "uporabniki"
 
 #: contrib/auth/models.py:76
 msgid "Personal info"
@@ -1257,38 +1191,32 @@
 msgstr "Skupine"
 
 #: contrib/auth/models.py:219
-#, fuzzy
 msgid "message"
-msgstr "Sporočilo"
+msgstr "sporočilo"
 
 #: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Izgleda, da vaš brskalnik nima omogočenih piškotkov. Piškotki so potrebni za "
-"prijavo."
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "Izgleda, da vaš brskalnik nima omogočenih piškotkov. Piškotki so potrebni za prijavo."
 
 #: contrib/contenttypes/models.py:25
-#, fuzzy
 msgid "python model class name"
-msgstr "python ime modula"
+msgstr "python ime razreda modela"
 
 #: contrib/contenttypes/models.py:28
 msgid "content type"
-msgstr "content type"
+msgstr "tip vsebine"
 
 #: contrib/contenttypes/models.py:29
 msgid "content types"
-msgstr "content types"
+msgstr "tipi vsebine"
 
 #: contrib/sessions/models.py:35
 msgid "session key"
-msgstr "sejni ključ"
+msgstr "ključ seje"
 
 #: contrib/sessions/models.py:36
 msgid "session data"
-msgstr "podatki v seji"
+msgstr "podatki seje"
 
 #: contrib/sessions/models.py:37
 msgid "expire date"
@@ -1366,23 +1294,28 @@
 msgid "February"
 msgstr "februar"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "March"
 msgstr "marec"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "April"
 msgstr "april"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "May"
 msgstr "maj"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "June"
 msgstr "junij"
 
-#: utils/dates.py:15 utils/dates.py:27
+#: utils/dates.py:15
+#: utils/dates.py:27
 msgid "July"
 msgstr "julij"
 
@@ -1407,62 +1340,58 @@
 msgstr "december"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "jan"
-msgstr "in"
+msgstr "jan"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "feb"
-msgstr "feb."
+msgstr "feb"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mar"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "apr"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "may"
-msgstr "dan"
+msgstr "maj"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "jun"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "jul"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "avg"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "sep"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "okt"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "dec"
 
 #: utils/dates.py:27
 msgid "Jan."
 msgstr "jan."
 
 #: utils/dates.py:27
-#, fuzzy
 msgid "Feb."
 msgstr "feb."
 
@@ -1490,37 +1419,49 @@
 msgid "year"
 msgid_plural "years"
 msgstr[0] "leto"
-msgstr[1] "let"
+msgstr[1] "leti"
+msgstr[2] "leta"
+msgstr[3] "let"
 
 #: utils/timesince.py:13
 msgid "month"
 msgid_plural "months"
 msgstr[0] "mesec"
-msgstr[1] "mesecev"
+msgstr[1] "meseca"
+msgstr[2] "meseci"
+msgstr[3] "mesecev"
 
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "teden"
+msgstr[1] "tedna"
+msgstr[2] "tedni"
+msgstr[3] "tednov"
 
 #: utils/timesince.py:15
 msgid "day"
 msgid_plural "days"
 msgstr[0] "dan"
-msgstr[1] "dni"
+msgstr[1] "dneva"
+msgstr[2] "dnevi"
+msgstr[3] "dni"
 
 #: utils/timesince.py:16
 msgid "hour"
 msgid_plural "hours"
 msgstr[0] "ura"
-msgstr[1] "ur"
+msgstr[1] "uri"
+msgstr[2] "ure"
+msgstr[3] "ur"
 
 #: utils/timesince.py:17
 msgid "minute"
 msgid_plural "minutes"
 msgstr[0] "minuta"
-msgstr[1] "minut"
+msgstr[1] "minuti"
+msgstr[2] "minute"
+msgstr[3] "minut"
 
 #: conf/global_settings.py:37
 msgid "Bengali"
@@ -1544,7 +1485,7 @@
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Grški"
 
 #: conf/global_settings.py:43
 msgid "English"
@@ -1564,11 +1505,11 @@
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Madžarski"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Hebrejski"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
@@ -1619,13 +1560,12 @@
 msgstr "Å vedski"
 
 #: conf/global_settings.py:61
-#, fuzzy
 msgid "Ukrainian"
-msgstr "Brazilski"
+msgstr "Ukrajinski"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
-msgstr "Poenostavljen kitajski"
+msgstr "Poenostavljeni kitajski"
 
 #: conf/global_settings.py:63
 msgid "Traditional Chinese"
@@ -1633,31 +1573,27 @@
 
 #: core/validators.py:60
 msgid "This value must contain only letters, numbers and underscores."
-msgstr "To polje lahko vsebuje le črke, števila in podčrtaje (_)."
+msgstr "Ta vrednost mora vsebovati le črke, števila in podčrtaje (_)."
 
 #: core/validators.py:64
-#, fuzzy
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"To polje lahko vsebuje le črke, števila, podčrtaje (_) in poševnice (/)."
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgstr "Ta vrednost mora vsebovati le črke, števila, podčrtaje, poševnice ali pomišljaje."
 
 #: core/validators.py:72
 msgid "Uppercase letters are not allowed here."
-msgstr "Velike tiskane črke tu niso dovoljene."
+msgstr "Velike tiskane črke niso dovoljene."
 
 #: core/validators.py:76
 msgid "Lowercase letters are not allowed here."
-msgstr "Majhne tiskane črke tu niso dovoljene."
+msgstr "Majhne tiskane črke niso dovoljene."
 
 #: core/validators.py:83
 msgid "Enter only digits separated by commas."
-msgstr "Vnesite števila, ločena z vejicami."
+msgstr "Vnesite samo števila, ločena z vejicami."
 
 #: core/validators.py:95
 msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Vnesite veljavne e-pošne naslove, ločene z vejicami."
+msgstr "Vnesite veljavne e-mail naslove, ločene z vejicami."
 
 #: core/validators.py:99
 msgid "Please enter a valid IP address."
@@ -1669,11 +1605,11 @@
 
 #: core/validators.py:107
 msgid "Non-numeric characters aren't allowed here."
-msgstr "Nenumerične vrednosti tukaj niso dovoljne."
+msgstr "Nenumerični znaki tukaj niso dovoljne."
 
 #: core/validators.py:111
 msgid "This value can't be comprised solely of digits."
-msgstr "To polje ne sme vsebovati le Å¡tevk."
+msgstr "Ta vrednost ne sme vsebovati le Å¡tevk."
 
 #: core/validators.py:116
 msgid "Enter a whole number."
@@ -1681,7 +1617,7 @@
 
 #: core/validators.py:120
 msgid "Only alphabetical characters are allowed here."
-msgstr "Le črke iz abecede so dovoljene tukaj."
+msgstr "Tukaj so dovoljene samo črke."
 
 #: core/validators.py:124
 msgid "Enter a valid date in YYYY-MM-DD format."
@@ -1691,23 +1627,18 @@
 msgid "Enter a valid time in HH:MM format."
 msgstr "Vnesite veljavni čas v zapisu HH:MM (ura:minuta)."
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: core/validators.py:132
+#: db/models/fields/__init__.py:468
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr ""
-"Vnesite veljavni datum/čas v zapisu YYYY-MM-DD HH:MM (leto-mesec-dan ura:"
-"minuta)"
+msgstr "Vnesite veljavni datum/čas v zapisu YYYY-MM-DD HH:MM (leto-mesec-dan ura:minuta)"
 
 #: core/validators.py:136
 msgid "Enter a valid e-mail address."
-msgstr "Vnesite veljavni e-naslov."
+msgstr "Vnesite veljaven e-mail."
 
 #: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Uploadjate veljavno sliko. Trenutna datoteka ni bila niti slika niti "
-"okvarjena slika."
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Naložite veljavno sliko. Naložena datoteka ni bila slika ali pa je bila le-ta okvarjena."
 
 #: core/validators.py:155
 #, python-format
@@ -1726,7 +1657,7 @@
 
 #: core/validators.py:171
 msgid "A valid URL is required."
-msgstr "Potreben je veljavni URL naslov."
+msgstr "Potreben je veljaven URL naslov."
 
 #: core/validators.py:185
 #, python-format
@@ -1734,23 +1665,24 @@
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
-"Potreben je veljavni HTML. Trenutni ima sledeče napake:\n"
+"Potreben je veljaven HTML. Trenutni ima sledeče napake:\n"
 "%s"
 
 #: core/validators.py:192
 #, python-format
 msgid "Badly formed XML: %s"
-msgstr "Pokvarjen XML: %s"
+msgstr "Nepravilen XML: %s"
 
 #: core/validators.py:202
 #, python-format
 msgid "Invalid URL: %s"
-msgstr "Neveljavni URL naslov: %s"
+msgstr "Neveljaven URL naslov: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:206
+#: core/validators.py:208
 #, python-format
 msgid "The URL %s is a broken link."
-msgstr "URL povezava %s je polomljena."
+msgstr "URL povezava %s ne deluje."
 
 #: core/validators.py:214
 msgid "Enter a valid U.S. state abbreviation."
@@ -1761,7 +1693,9 @@
 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] "Pazite na jezik! Beseda %s tu ni dovoljena."
-msgstr[1] "Pazite na jezik! Besede %s tu niso dovoljene."
+msgstr[1] "Pazite na jezik! Besedi %s tu nista dovoljeni."
+msgstr[2] "Pazite na jezik! Besede %s tu niso dovoljene."
+msgstr[3] "Pazite na jezik! Besede %s tu niso dovoljene."
 
 #: core/validators.py:236
 #, python-format
@@ -1770,21 +1704,22 @@
 
 #: core/validators.py:255
 msgid "Please enter something for at least one field."
-msgstr "Prosim, vnesite nekaj v vsaj eno od polj."
+msgstr "Prosim, vnesite nekaj v vsaj eno izmed polj."
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:264
+#: core/validators.py:275
 msgid "Please enter both fields or leave them both empty."
-msgstr "Prosimo, izpolnite obe polji ali ju pustite obe prazni."
+msgstr "Prosimo, izpolnite obe polji ali pa pustite obe prazni."
 
 #: core/validators.py:282
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "To polje mora biti izpolnjeno, če je %(field)s %(value)s"
+msgstr "To polje mora biti podano, če je %(field)s %(value)s"
 
 #: core/validators.py:294
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "To polje mora biti izpolnjeno, če ni %(field)s %(value)s"
+msgstr "To polje mora biti podano, če ni %(field)s %(value)s"
 
 #: core/validators.py:313
 msgid "Duplicate values are not allowed."
@@ -1797,35 +1732,35 @@
 
 #: core/validators.py:347
 msgid "Please enter a valid decimal number."
-msgstr "Prosim vnesite decimalno Å¡tevilo."
+msgstr "Prosim vnesite veljavno decimalno Å¡tevilo."
 
 #: core/validators.py:349
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Prosimo, vnesite veljavno decimalno število z največ %s števkami."
-msgstr[1] "Prosimo, vnesite veljavno decimalno število z največ %s števkami."
+msgid_plural "Please enter a valid decimal number with at most %s total digits."
+msgstr[0] "Prosimo, vnesite veljavno decimalno število z največ %s števko."
+msgstr[1] "Prosimo, vnesite veljavno decimalno število z največ %s števkama."
+msgstr[2] "Prosimo, vnesite veljavno decimalno število z največ %s števkami."
+msgstr[3] "Prosimo, vnesite veljavno decimalno število z največ %s števkami."
 
 #: core/validators.py:352
 #, python-format
 msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] ""
-"Prosimo, vnesite veljavno decimalno število z največ %s decimalnimi mesti."
-msgstr[1] ""
-"Prosimo, vnesite veljavno decimalno število z največ %s decimalnimi mesti."
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] "Prosimo, vnesite veljavno decimalno število z največ %s decimalnim mestom."
+msgstr[1] "Prosimo, vnesite veljavno decimalno število z največ %s decimalnima mestoma."
+msgstr[2] "Prosimo, vnesite veljavno decimalno število z največ %s decimalnimi mesti."
+msgstr[3] "Prosimo, vnesite veljavno decimalno število z največ %s decimalnimi mesti."
 
 #: core/validators.py:362
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Prosimo, poskrbite, da bo prenesena datoteka velika vsaj %s bajtov."
+msgstr "Prosimo, poskrbite, da bo naložena datoteka velika vsaj %s bajtov."
 
 #: core/validators.py:363
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Poskrbite, da bo prenesena datoteka velika največ %s bajtov."
+msgstr "Poskrbite, da bo naložena datoteka velika največ %s bajtov."
 
 #: core/validators.py:376
 msgid "The format for this field is wrong."
@@ -1838,98 +1773,72 @@
 #: core/validators.py:426
 #, python-format
 msgid "Could not retrieve anything from %s."
-msgstr "Iz %s nisem mogel izločiti ničesar."
+msgstr "Iz %s nisem mogel pridobiti ničesar."
 
 #: core/validators.py:429
 #, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr "URL %(url)s je vrnil neveljavni Content-Type '%(contenttype)s'."
 
 #: core/validators.py:462
 #, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Prosimo, zaprite nezaprto %(tag)s oznako v vrstici %(line)s. (Vrstica se "
-"začne z \"%(start)s\".)"
+msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
+msgstr "Prosimo, zaprite %(tag)s oznako v vrstici %(line)s. (Vrstica se začne z \"%(start)s\".)"
 
 #: core/validators.py:466
 #, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Tekst z začetka vrstice %(line)s ni dovoljen v tem kontekstu. (Vrstica se "
-"začne z \"%(start)s\".)"
+msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
+msgstr "Tekst z začetka vrstice %(line)s ni dovoljen v tem kontekstu. (Vrstica se začne z \"%(start)s\".)"
 
 #: core/validators.py:471
-#, fuzzy, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" v vrstici %(line)s je neveljavna oznaka. (Vrstica se začne z "
-"\"%(start)s\".)"
+#, python-format
+msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
+msgstr "\"%(attr)s\" v vrstici %(line)s je neveljaven atribut. (Vrstica se začne z \"%(start)s\".)"
 
 #: core/validators.py:476
 #, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" v vrstici %(line)s je neveljavna oznaka. (Vrstica se začne z "
-"\"%(start)s\".)"
+msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
+msgstr "\"<%(tag)s>\" v vrstici %(line)s je neveljavna oznaka. (Vrstica se začne z \"%(start)s\".)"
 
 #: core/validators.py:480
 #, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Oznaki v vrstici %(line)s manjka eden ali več nujnih atributov (Vrstica se "
-"začne z \"%(start)s\".)"
+msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
+msgstr "Oznaki v vrstici %(line)s manjka eden ali več zahtevanih parametrov. (Vrstica se začne z \"%(start)s\".)"
 
 #: core/validators.py:485
 #, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Atribut \"%(attr)s\" v vrstici %(line)s vsebuje neveljavno vrednost. "
-"(Vrstica se začne z \"%(start)s\".)"
+msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
+msgstr "Parameter \"%(attr)s\" v vrstici %(line)s vsebuje neveljavno vrednost. (Vrstica se začne z \"%(start)s\".)"
 
 #: db/models/manipulators.py:302
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s s tem %(type)s že obstaja za veljavno (%field)s."
+msgstr "%(object)s s tem %(type)s že obstaja za dane %(field)s."
 
 #: db/models/fields/__init__.py:40
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
 msgstr "%(optname)s s tem %(fieldname)s že obstaja."
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
+#: db/models/fields/__init__.py:114
+#: db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:542
+#: db/models/fields/__init__.py:553
 #: forms/__init__.py:346
 msgid "This field is required."
 msgstr "To polje je obvezno"
 
 #: db/models/fields/__init__.py:337
-#, fuzzy
 msgid "This value must be an integer."
-msgstr "Ta vrednost mora biti potenca od %s."
+msgstr "Ta vrednost mora biti celo Å¡tevilo."
 
 #: db/models/fields/__init__.py:369
-#, fuzzy
 msgid "This value must be either True or False."
-msgstr "Ta vrednost mora biti potenca od %s."
+msgstr "Ta vrednost mora biti \"True\" ali \"False\"."
 
 #: db/models/fields/__init__.py:385
-#, fuzzy
 msgid "This field cannot be null."
-msgstr "To polje ni veljavno."
+msgstr "To polje ne more biti prazno."
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
@@ -1941,50 +1850,49 @@
 msgstr "Prosimo, vnesite veljaven %s."
 
 #: db/models/fields/related.py:579
-#, fuzzy
 msgid "Separate multiple IDs with commas."
 msgstr "Več ID-jev ločite z vejicami."
 
 #: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Stisni \"Control\" (ali \"Command\" na Mac-u), da izbereš več kot enega."
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Držite \"Control\" (ali \"Command\" na Mac-u), za izbiro več kot enega."
 
 #: db/models/fields/related.py:625
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Prosimo, vnesite veljavni %(self)s ID-je. Vrednost %(value)r ni veljavna."
-msgstr[1] ""
-"Prosimo, vnesite veljavni %(self)s ID-je. Vrednosti %(value)r niso veljavne."
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Prosimo, vnesite veljavne %(self)s ID-e. Vrednost %(value)r ni veljavna."
+msgstr[1] "Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r nista veljavni."
+msgstr[2] "Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r niso veljavne."
+msgstr[3] "Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r niso veljavne."
 
 #: forms/__init__.py:380
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Poskrbite, da bo tekst krajši do %s znakov."
+msgstr[0] "Poskrbite, da bo tekst krajši od %s znaka."
 msgstr[1] "Poskrbite, da bo tekst krajši od %s znakov."
+msgstr[2] "Poskrbite, da bo tekst krajši od %s znakov."
+msgstr[3] "Poskrbite, da bo tekst krajši od %s znakov."
 
 #: forms/__init__.py:385
 msgid "Line breaks are not allowed here."
 msgstr "Prelomi vrstice tu niso dovoljeni."
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: forms/__init__.py:480
+#: forms/__init__.py:551
+#: forms/__init__.py:589
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
 msgstr "Izberite veljavno možnost; '%(data)s' ni v %(choices)s."
 
 #: forms/__init__.py:645
 msgid "The submitted file is empty."
-msgstr "Poslano polje je prazno."
+msgstr "Poslana datoteka je prazna."
 
 #: forms/__init__.py:699
 msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Vnesite celo Å¡tevilo med -32,768 in 32,767."
+msgstr "Vnesite celo Å¡tevilo med -32.768 in 32.767."
 
 #: forms/__init__.py:708
 msgid "Enter a positive number."
@@ -1992,29 +1900,30 @@
 
 #: forms/__init__.py:717
 msgid "Enter a whole number between 0 and 32,767."
-msgstr "Vnesite celo Å¡tevilo med 0 in 32,767."
+msgstr "Vnesite celo Å¡tevilo med 0 in 32.767."
 
 #: template/defaultfilters.py:379
 msgid "yes,no,maybe"
-msgstr "ja,ne,morda"
+msgstr "da,ne,morda"
 
-#~ msgid "Comment"
-#~ msgstr "Komentar"
+msgid "Comment"
+msgstr "Komentar"
 
-#~ msgid "Comments"
-#~ msgstr "Komentarji"
+msgid "Comments"
+msgstr "Komentarji"
 
-#~ msgid "String (up to 50)"
-#~ msgstr "Niz (do 50 znakov)"
+msgid "String (up to 50)"
+msgstr "Niz (do 50 znakov)"
 
-#~ msgid "label"
-#~ msgstr "oznaka"
+msgid "label"
+msgstr "oznaka"
 
-#~ msgid "package"
-#~ msgstr "paket"
+msgid "package"
+msgstr "paket"
 
-#~ msgid "packages"
-#~ msgstr "paketi"
+msgid "packages"
+msgstr "paketi"
 
-#~ msgid "Slovene"
-#~ msgstr "Slovenski"
+msgid "Slovene"
+msgstr "Slovensko"
+

Modified: vendor/django/current/django/conf/locale/sr/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/sr/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/sr/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/sr/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,101 +3,99 @@
 "Project-Id-Version: Django Serbian (latin) translation v1.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:11+0200\n"
-"PO-Revision-Date: 2006-01-15 11:21+0100\n"
-"Last-Translator: Nebojša Đorđević <nesh at studioquattro.co.yu>\n"
-"Language-Team: Nesh <nesh at studioquatro.co.yu> & Petar <petar.maric at gmail."
-"com>\n"
+"PO-Revision-Date: 2007-02-20 18:50+0100\n"
+"Last-Translator: Petar Marić <petar.maric at gmail.com>\n"
+"Language-Team: Nesh <nesh at studioquatro.co.yu> & Petar <petar.maric at gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Poedit-Language: Serbian\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "X-Poedit-Country: YUGOSLAVIA\n"
 "X-Poedit-SourceCharset: utf-8\n"
 "X-Poedit-Basepath: ../../../../\n"
 
-#: contrib/comments/models.py:67 contrib/comments/models.py:166
+#: contrib/comments/models.py:67
+#: contrib/comments/models.py:166
 msgid "object ID"
-msgstr "id objekta"
+msgstr "ID objekta"
 
 #: contrib/comments/models.py:68
 msgid "headline"
 msgstr "naslov"
 
-#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:69
+#: contrib/comments/models.py:90
 #: contrib/comments/models.py:167
 msgid "comment"
 msgstr "komentar"
 
 #: contrib/comments/models.py:70
 msgid "rating #1"
-msgstr "rejting #1"
+msgstr "ocena #1"
 
 #: contrib/comments/models.py:71
 msgid "rating #2"
-msgstr "rejting #2"
+msgstr "ocena #2"
 
 #: contrib/comments/models.py:72
 msgid "rating #3"
-msgstr "rejting #3"
+msgstr "ocena #3"
 
 #: contrib/comments/models.py:73
 msgid "rating #4"
-msgstr "rejting #4"
+msgstr "ocena #4"
 
 #: contrib/comments/models.py:74
 msgid "rating #5"
-msgstr "rejting #5"
+msgstr "ocena #5"
 
 #: contrib/comments/models.py:75
 msgid "rating #6"
-msgstr "rejting #6"
+msgstr "ocena #6"
 
 #: contrib/comments/models.py:76
 msgid "rating #7"
-msgstr "rejting #7"
+msgstr "ocena #7"
 
 #: contrib/comments/models.py:77
 msgid "rating #8"
-msgstr "rejting #8"
+msgstr "ocena #8"
 
 #: contrib/comments/models.py:82
 msgid "is valid rating"
-msgstr "da li je rejting validan"
+msgstr "da li je ocena validna"
 
-#: contrib/comments/models.py:83 contrib/comments/models.py:169
+#: contrib/comments/models.py:83
+#: contrib/comments/models.py:169
 msgid "date/time submitted"
 msgstr "datum/vreme slanja"
 
-#: contrib/comments/models.py:84 contrib/comments/models.py:170
+#: contrib/comments/models.py:84
+#: contrib/comments/models.py:170
 msgid "is public"
 msgstr "da li je javni"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85
+#: contrib/admin/views/doc.py:289
 msgid "IP address"
 msgstr "IP adresa"
 
 #: contrib/comments/models.py:86
 msgid "is removed"
-msgstr "obrisan je"
+msgstr "da li je obrisan"
 
 #: 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 ""
-"Selektujte ako je komentar neodgovarajući. Biće ispisano \"Ovaj komentar je "
-"obrisan\" umesto teksta komentara."
+msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
+msgstr "Izaberite ako je komentar neodgovarajući. Biće ispisano \"Ovaj komentar je obrisan\" umesto teksta komentara."
 
 #: contrib/comments/models.py:91
-#, fuzzy
 msgid "comments"
-msgstr "komentar"
+msgstr "komentari"
 
-#: contrib/comments/models.py:131 contrib/comments/models.py:207
+#: contrib/comments/models.py:131
+#: contrib/comments/models.py:207
 msgid "Content object"
-msgstr "Objekt sa sadržajem"
+msgstr "Objekat sa sadržajem"
 
 #: contrib/comments/models.py:159
 #, python-format
@@ -108,7 +106,7 @@
 "\n"
 "http://%(domain)s%(url)s"
 msgstr ""
-"Poslao %(user)s u %(date)s\n"
+"Poslao %(user)s dana %(date)s\n"
 "\n"
 "%(comment)s\n"
 "\n"
@@ -124,17 +122,15 @@
 
 #: contrib/comments/models.py:173
 msgid "approved by staff"
-msgstr "odobreno od moderatora"
+msgstr "odobreno od strane moderatora"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
-msgstr "Slobodan komentar"
+msgstr "slobodan komentar"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
-msgstr "Slobodni komentari"
+msgstr "slobodni komentari"
 
 #: contrib/comments/models.py:233
 msgid "score"
@@ -145,19 +141,17 @@
 msgstr "datum rezultata"
 
 #: contrib/comments/models.py:237
-#, fuzzy
 msgid "karma score"
-msgstr "\"Karma\" rezultat"
+msgstr "\"karma\" rezultat"
 
 #: contrib/comments/models.py:238
-#, fuzzy
 msgid "karma scores"
-msgstr "\"Karma\" rezultati"
+msgstr "\"karma\" rezultati"
 
 #: contrib/comments/models.py:242
 #, python-format
 msgid "%(score)d rating by %(user)s"
-msgstr "Rezultat %(score)d od %(user)s"
+msgstr "Ocena %(score)d od strane %(user)s"
 
 #: contrib/comments/models.py:258
 #, python-format
@@ -166,42 +160,38 @@
 "\n"
 "%(text)s"
 msgstr ""
-"Ovaj komentar je markiran od %(user)s:\n"
+"Ovaj komentar je označen od %(user)s:\n"
 "\n"
 "%(text)s"
 
 #: contrib/comments/models.py:265
 msgid "flag date"
-msgstr "datum markiranja"
+msgstr "datum označavanja"
 
 #: contrib/comments/models.py:268
-#, fuzzy
 msgid "user flag"
-msgstr "Korisnički marker"
+msgstr "korisnička oznaka"
 
 #: contrib/comments/models.py:269
-#, fuzzy
 msgid "user flags"
-msgstr "Korisnički markeri"
+msgstr "korisničke oznake"
 
 #: contrib/comments/models.py:273
 #, python-format
 msgid "Flag by %r"
-msgstr "%r je markirao"
+msgstr "%r je označio"
 
 #: contrib/comments/models.py:278
 msgid "deletion date"
 msgstr "datum brisanja"
 
 #: contrib/comments/models.py:280
-#, fuzzy
 msgid "moderator deletion"
-msgstr "Brisanje od strane moderatora"
+msgstr "brisanje od strane moderatora"
 
 #: contrib/comments/models.py:281
-#, fuzzy
 msgid "moderator deletions"
-msgstr "Brisanja od strane moderatora"
+msgstr "brisanja od strane moderatora"
 
 #: contrib/comments/models.py:285
 #, python-format
@@ -218,43 +208,39 @@
 
 #: contrib/comments/views/karma.py:25
 msgid "No voting for yourself"
-msgstr "Ne možete da glasate sami za sebe"
+msgstr "Ne možete glasati sami za sebe"
 
 # nesh: grrrrr, ala je rogobatno
+# petar: malo sam ga izmenio da bude jasniji
 #: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr "Ovaj rejting je obavezan pošto ste uneli još najmanje jedan rejting."
+msgid "This rating is required because you've entered at least one other rating."
+msgstr "Ova ocena je obavezna pošto ste uneli bar jednu ocenu."
 
 #: 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"
+"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"
+"This comment was posted by a user who has posted fewer than %(count)s comments:\n"
 "\n"
 "%(text)s"
 msgstr[0] ""
-"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s "
-"komentara:\n"
+"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s komentara:\n"
 "\n"
 "%(text)s"
 msgstr[1] ""
-"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s "
-"komentara:\n"
+"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s komentara:\n"
 "\n"
 "%(text)s"
 msgstr[2] ""
-"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s "
-"komentara:\n"
+"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s komentara:\n"
 "\n"
 "%(text)s"
 
 # nesh: skethcy???
+# petar: Pojma nemam sta im to znaci
 #: contrib/comments/views/comments.py:117
 #, python-format
 msgid ""
@@ -262,7 +248,7 @@
 "\n"
 "%(text)s"
 msgstr ""
-"Ovaj komentar je poslat od \"sketcy\" korisnika:\n"
+"Komentar je poslat od strane \"sketchy\" korisnika:\n"
 "\n"
 "%(text)s"
 
@@ -274,25 +260,22 @@
 #: contrib/comments/views/comments.py:193
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr "Jedno ili više obaveznih polja nije poslato."
+msgstr "Jedno ili više obaveznih polja nije poslato"
 
 #: contrib/comments/views/comments.py:197
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Neko je menjao form za komentare (povreda sigurnosti)"
+msgstr "Neko je menjao formu za komentare (povreda sigurnosti)"
 
 #: contrib/comments/views/comments.py:207
 #: contrib/comments/views/comments.py:292
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"Form komentara ima neispravni 'target' parametar -- ID objekta nije ispravan"
+msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
+msgstr "Forma komentara ima neispravni 'target' parametar -- ID objekta je neispravan"
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Ovaj komentar nije koristio 'preview' ili 'post'"
+msgstr "Ovaj komentar nije koristio ni 'preview' ni 'post'"
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
@@ -306,9 +289,8 @@
 msgstr "Lozinka:"
 
 #: contrib/comments/templates/comments/form.html:6
-#, fuzzy
 msgid "Forgotten your password?"
-msgstr "Izmeni moju lozinku"
+msgstr "Zaboravili ste lozinku?"
 
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
@@ -329,43 +311,39 @@
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/model_index.html:5
 msgid "Log out"
-msgstr "Odjavi se"
+msgstr "Odjavite se"
 
 #: contrib/comments/templates/comments/form.html:12
-#, fuzzy
 msgid "Ratings"
-msgstr "rejting #1"
+msgstr "Ocene"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr ""
+msgstr "Obavezan unos"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Optional"
-msgstr ""
+msgstr "Opcioni unos"
 
 #: contrib/comments/templates/comments/form.html:23
 msgid "Post a photo"
-msgstr ""
+msgstr "Pošaljite sliku"
 
 #: contrib/comments/templates/comments/form.html:27
 #: contrib/comments/templates/comments/freeform.html:5
-#, fuzzy
 msgid "Comment:"
-msgstr "Komentar"
+msgstr "Komentar:"
 
 #: contrib/comments/templates/comments/form.html:32
 #: contrib/comments/templates/comments/freeform.html:9
-#, fuzzy
 msgid "Preview comment"
-msgstr "Slobodan komentar"
+msgstr "Pregled komentara"
 
 #: contrib/comments/templates/comments/freeform.html:4
-#, fuzzy
 msgid "Your name:"
-msgstr "korisničko ime"
+msgstr "Vaše ime:"
 
 #: contrib/admin/filterspecs.py:40
 #, python-format
@@ -373,10 +351,11 @@
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
-"<h3>Od %s:</h3>\n"
+"<h3>Po %s:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:70
+#: contrib/admin/filterspecs.py:88
 #: contrib/admin/filterspecs.py:143
 msgid "All"
 msgstr "Sve"
@@ -391,15 +370,15 @@
 
 #: contrib/admin/filterspecs.py:113
 msgid "Past 7 days"
-msgstr "Zadnjih sedam dana"
+msgstr "U zadnjih 7 dana"
 
 #: contrib/admin/filterspecs.py:115
 msgid "This month"
-msgstr "Ovaj mesec"
+msgstr "Ovoga meseca"
 
 #: contrib/admin/filterspecs.py:117
 msgid "This year"
-msgstr "Ova godina"
+msgstr "Ove godine"
 
 #: contrib/admin/filterspecs.py:143
 msgid "Yes"
@@ -415,7 +394,7 @@
 
 #: contrib/admin/models.py:16
 msgid "action time"
-msgstr "vreme akcije"
+msgstr "vreme aktivnosti"
 
 #: contrib/admin/models.py:19
 msgid "object id"
@@ -427,53 +406,42 @@
 
 #: contrib/admin/models.py:21
 msgid "action flag"
-msgstr "akcija"
+msgstr "oznaka aktivnosti"
 
 #: contrib/admin/models.py:22
 msgid "change message"
-msgstr "opis promene"
+msgstr "opis izmene"
 
 #: contrib/admin/models.py:25
 msgid "log entry"
-msgstr "unos u dnevnik izmena"
+msgstr "unos u dnevniku izmena"
 
 #: contrib/admin/models.py:26
 msgid "log entries"
-msgstr "unosi u dnevnik izmena"
+msgstr "unosi u dnevniku izmena"
 
 #: contrib/admin/templatetags/admin_list.py:228
 msgid "All dates"
 msgstr "Svi datumi"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
+#: contrib/admin/views/decorators.py:9
+#: contrib/auth/forms.py:36
 #: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Unesite ispravno korisničko ime i šifru. Napomena: oba polja prave razliku "
-"između velikih i malih slova."
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Unesite ispravno korisničko ime i šifru. Napomena: oba polja prave razliku između velikih i malih slova."
 
 #: contrib/admin/views/decorators.py:23
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
-msgstr "Prijavi se"
+msgstr "Prijavite se"
 
 #: contrib/admin/views/decorators.py:61
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Ponovo se prijavite pošto je vaša sesija istekla. Ne brinite, vaši podaci su "
-"sačuvani."
+msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
+msgstr "Ponovo se prijavite pošto je vaša sesija istekla. Ne brinite, vaši podaci su sačuvani."
 
 #: contrib/admin/views/decorators.py:68
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Izgleda da vaš browser ne podržava \"cookie\". Uključite ih, ponovo učitajte "
-"stranu i pokušajte ponovo."
+msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
+msgstr "Vaš internet čitač nije prihvatio \"cookie\". Nakon aktiviranja odgovarajuće opcije ponovo učitajte stranu."
 
 #: contrib/admin/views/decorators.py:82
 msgid "Usernames cannot contain the '@' character."
@@ -482,7 +450,7 @@
 #: contrib/admin/views/decorators.py:84
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Vaša e-mail adresa nije koriničko ime. Probajte sa '%s'."
+msgstr "Vaše korisničko ime nije data e-mail adresa. Pokušajte sa '%s'."
 
 #: contrib/admin/views/main.py:226
 msgid "Site administration"
@@ -493,26 +461,29 @@
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Uspešno dodat %(name)s \"%(obj)s\"."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:264
+#: contrib/admin/views/main.py:348
 msgid "You may edit it again below."
-msgstr "Ispod ga možete ponovo izmeniti."
+msgstr "Možete ga ponovo izmeniti."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:272
+#: contrib/admin/views/main.py:357
 #, python-format
 msgid "You may add another %s below."
-msgstr "Ispod možete dodati još jedan %s."
+msgstr "Možete dodati još jedan %s."
 
 #: contrib/admin/views/main.py:290
 #, python-format
 msgid "Add %s"
-msgstr "Dodaj %s"
+msgstr "Dodajte %s"
 
 #: contrib/admin/views/main.py:336
 #, python-format
 msgid "Added %s."
 msgstr "Dodat %s"
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:338
 #: contrib/admin/views/main.py:340
 msgid "and"
 msgstr "i"
@@ -525,11 +496,11 @@
 #: contrib/admin/views/main.py:340
 #, python-format
 msgid "Deleted %s."
-msgstr "Obrisan %s"
+msgstr "Obrisan %s."
 
 #: contrib/admin/views/main.py:343
 msgid "No fields changed."
-msgstr "Nijedno polje nije promenjeno."
+msgstr "Nijedno polje nije izmenjeno."
 
 #: contrib/admin/views/main.py:346
 #, python-format
@@ -538,9 +509,8 @@
 
 #: contrib/admin/views/main.py:354
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" je uspešno dodat. Ispod ga možete ponovo menjati."
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" je uspešno dodat. Možete ga ponovo izmeniti."
 
 #: contrib/admin/views/main.py:392
 #, python-format
@@ -574,16 +544,19 @@
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s"
-msgstr "Izaberi %s"
+msgstr "Izaberite %s"
 
 #: contrib/admin/views/main.py:565
 #, python-format
 msgid "Select %s to change"
-msgstr "Izaberi %s za izmenu"
+msgstr "Izaberite %s za izmenu"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/doc.py:277
+#: contrib/admin/views/doc.py:286
+#: contrib/admin/views/doc.py:288
+#: contrib/admin/views/doc.py:294
+#: contrib/admin/views/doc.py:295
+#: contrib/admin/views/doc.py:297
 msgid "Integer"
 msgstr "Ceo broj"
 
@@ -591,7 +564,8 @@
 msgid "Boolean (Either True or False)"
 msgstr "Logička vrednost (Tačno ili Netačno)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:279
+#: contrib/admin/views/doc.py:296
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Niz karaktera (maksimalno %(maxlength)s karaktera)"
@@ -612,9 +586,10 @@
 msgid "E-mail address"
 msgstr "E-mail adresa"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:284
+#: contrib/admin/views/doc.py:287
 msgid "File path"
-msgstr "Putanja do fajla"
+msgstr "Putanja do datoteke"
 
 #: contrib/admin/views/doc.py:285
 msgid "Decimal number"
@@ -626,7 +601,7 @@
 
 #: contrib/admin/views/doc.py:292
 msgid "Relation to parent model"
-msgstr "Relacija prema nadređenom objektu"
+msgstr "Relacija ka nadređenom objektu"
 
 #: contrib/admin/views/doc.py:293
 msgid "Phone number"
@@ -640,9 +615,8 @@
 msgid "Time"
 msgstr "Vreme"
 
-# nesh: ovo se valjda ne prevodi
-# petar: ne prevodi se
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:300
+#: contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
@@ -683,7 +657,7 @@
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/model_index.html:5
 msgid "Change password"
-msgstr "Izmeni lozinku"
+msgstr "Izmenite lozinku"
 
 #: contrib/admin/templates/admin/object_history.html:5
 #: contrib/admin/templates/admin/500.html:4
@@ -715,19 +689,15 @@
 
 #: contrib/admin/templates/admin/object_history.html:20
 msgid "Action"
-msgstr "Akcija"
+msgstr "Aktivnost"
 
 #: contrib/admin/templates/admin/object_history.html:26
 msgid "DATE_WITH_TIME_FULL"
 msgstr "j. N Y, H:i"
 
 #: contrib/admin/templates/admin/object_history.html:36
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Ovaj objekat nema istoriju promena. Najverovatnije nije dodat korišćenjem "
-"administracije sajta."
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Ovaj objekat nema istoriju promena. Najverovatnije nije dodat korišćenjem administracije sajta."
 
 #: contrib/admin/templates/admin/base_site.html:4
 msgid "Django site admin"
@@ -750,12 +720,8 @@
 msgstr "Greška na serveru <em>(500)</em>"
 
 #: 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 ""
-"Dogodila se greška koja je prijavljena administratorima i biće popravljena "
-"uskoro. Hvala Vam na strpljenju."
+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 "Dogodila se greška koja je prijavljena administratorima."
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
@@ -769,16 +735,16 @@
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Dostupni modeli u aplikaciji %(name)s."
 
 #: contrib/admin/templates/admin/index.html:28
 #: contrib/admin/templates/admin/change_form.html:15
 msgid "Add"
-msgstr "Dodaj"
+msgstr "Dodajte"
 
 #: contrib/admin/templates/admin/index.html:34
 msgid "Change"
-msgstr "Izmena"
+msgstr "Izmenite"
 
 #: contrib/admin/templates/admin/index.html:44
 msgid "You don't have permission to edit anything."
@@ -786,24 +752,24 @@
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
-msgstr "Skorije akcije"
+msgstr "Poslednje aktivnosti"
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "My Actions"
-msgstr "Moje akcije"
+msgstr "Moje aktivnosti"
 
 #: contrib/admin/templates/admin/index.html:57
 msgid "None available"
-msgstr "Nema dostupnih"
+msgstr "Bez aktivnosti"
 
 #: contrib/admin/templates/admin/change_list.html:11
 #, python-format
 msgid "Add %(name)s"
-msgstr "Dodaj %(name)s"
+msgstr "Dodajte %(name)s"
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Da li ste <a href=\"/password_reset/\">zaboravili Vašu lozinku?</a>?"
+msgstr "Da li ste <a href=\"/password_reset/\">zaboravili vašu lozinku?</a>?"
 
 #: contrib/admin/templates/admin/base.html:23
 msgid "Welcome,"
@@ -812,26 +778,17 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:9
 #: contrib/admin/templates/admin/submit_line.html:3
 msgid "Delete"
-msgstr "Obriši"
+msgstr "Obrišite"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr ""
-"Brisanjem %(object_name)s  '%(object)s' došlo bi do brisanja dodatnih "
-"podataka, ali nemate prava da brišete sledeće tipove podataka:"
+msgid "Deleting the %(object_name)s '%(object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Brisanjem %(object_name)s  '%(object)s' došlo bi do brisanja pridruženih objekata, ali nemate prava da brišete sledeće objekte:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"Da li ste sigurni da želite da obrišete %(object_name)s \"%(object)s\"? Biće "
-"obrisani i sledeći pridruženi objekti:"
+msgid "Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of the following related items will be deleted:"
+msgstr "Da li ste sigurni da želite da obrišete %(object_name)s \"%(object)s\"? Takođe će biti obrisani sledeći pridruženi objekti:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
@@ -840,11 +797,11 @@
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
 msgid " By %(title)s "
-msgstr "Po %(title)s "
+msgstr " Po %(title)s "
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Go"
-msgstr "Uradi"
+msgstr "Nađi"
 
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
@@ -867,26 +824,26 @@
 
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
-msgstr "Snimi kao novi"
+msgstr "Snimite kao novi"
 
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save and add another"
-msgstr "Snimi i dodaj još jedan"
+msgstr "Snimite i dodaj još jedan"
 
 #: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and continue editing"
-msgstr "Snimi i nastavi sa izmenama"
+msgstr "Snimite i nastavite sa izmenama"
 
 #: contrib/admin/templates/admin/submit_line.html:7
 msgid "Save"
-msgstr "Snimi"
+msgstr "Snimite"
 
 #: 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 "Izmena lozinke"
+msgstr "Izmenite lozinku"
 
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
@@ -905,12 +862,8 @@
 msgstr "Resetovanje lozinke"
 
 #: 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 ""
-"Zaboravili ste svoju lozinku? Unesite vašu e-mail adresu i dobićete novu "
-"lozinku na dati e-mail."
+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 "Zaboravili ste svoju lozinku? Unesite vašu e-mail adresu i dobićete novu lozinku na dati e-mail."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
@@ -918,7 +871,7 @@
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
-msgstr "Resetuj moju lozinku"
+msgstr "Resetujte moju lozinku"
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
@@ -926,7 +879,7 @@
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
-msgstr "Prijavi se ponovo"
+msgstr "Prijavite se ponovo"
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -934,20 +887,12 @@
 msgstr "Vaša lozinka je uspešno resetovana"
 
 #: 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 ""
-"Nova lozinka poslata vam je na zadatu e-mail adresu. E-mail bi trebao da "
-"stigne u narednih nekoliko minuta."
+msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Nova lozinka vam je poslata na zadatu e-mail adresu. E-mail bi trebao da stigne u narednih nekoliko minuta."
 
 #: 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 ""
-"Unesite staru lozinku, nakon toga unesite novu lozinku dva puta, radi "
-"provere ispravnosti unosa."
+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 "Unesite staru lozinku, nakon toga unesite novu lozinku dva puta, radi provere ispravnosti unosa."
 
 #: contrib/admin/templates/registration/password_change_form.html:17
 msgid "Old password:"
@@ -963,11 +908,11 @@
 
 #: contrib/admin/templates/registration/password_change_form.html:23
 msgid "Change my password"
-msgstr "Izmeni moju lozinku"
+msgstr "Izmenite moju lozinku"
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Primili ste ovaj e-mail jer ste tražili resetovanje lozinke"
+msgstr "Primili ste ovaj e-mail jer ste zatražili resetovanje lozinke"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
@@ -1015,36 +960,23 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Da bi ste instalirali \"bookmarklet\", odvučite link u "
-"vaše \"bookmark\"-e, ili kliknite desnim tasterom i dodajte ga. Sada možete "
-"da izaberete \"bookmark\" sa bilo koje strane na sajtu. Napomena: pristup "
-"nekima od strana mora biti sa kompjutera čija je IP adresa označena kao "
-"\"internal\" (kontaktirajte sistem administratora ako niste sigurni da li je "
-"vaš IP označen kao \"internal\").</p>\n"
+"<p class=\"help\">Da bi ste instalirali \"bookmarklet\", odvucite link u vaše \"bookmark\"-e, ili kliknite desnim tasterom i dodajte ga. Sada možete da izaberete \"bookmark\" sa bilo koje strane na sajtu. Napomena: pristup nekima od strana mora biti sa kompjutera čija je IP adresa označena kao \"internal\" (kontaktirajte sistem administratora ako niste sigurni da li je vaš IP označen kao \"internal\").</p>\n"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:19
 msgid "Documentation for this page"
 msgstr "Dokumentacija za ovu stranu"
 
 #: 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 ""
-"Skače sa bilo koje strane na stranu sa dokumentacijom za \"view\" koji "
-"generiše tu stranu."
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Skače sa bilo koje strane na stranu sa dokumentacijom za \"view\" koji generiše tu stranu."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
 msgid "Show object ID"
-msgstr "Prikaži ID objekta"
+msgstr "Prikažite ID objekta"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:23
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Prikazuje \"content-type\" i jedinstveni ID strane koje predstavlja jedan "
-"objekt."
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Prikazuje \"content-type\" i jedinstveni ID strane koje predstavlja jedan objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
@@ -1056,7 +988,7 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
 msgid "Edit this object (new window)"
-msgstr "Izmeni objekt (novi prozor)"
+msgstr "Izmeni objekat (novi prozor)"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:29
 msgid "As above, but opens the admin page in a new window."
@@ -1080,42 +1012,31 @@
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
-msgstr "redirekcija od"
+msgstr "preusmeri od"
 
 #: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Ovde treba upisati apsolutnu putanju bez imena domena. Primer: '/events/"
-"search/'."
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Unesite apsolutnu putanju bez imena domena. Primer: '/dogadjaji/pretraga/'."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
-msgstr "redirekcija na"
+msgstr "preusmeri ka"
 
 #: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Ovo može biti apsolutna putanja (kao gore) ili puni URL koji počinje sa "
-"'http://'."
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgstr "Može biti apsolutna putanja (kao gore) ili puni URL koji počinje sa 'http://'."
 
 #: contrib/redirects/models.py:12
 msgid "redirect"
-msgstr "redirekcija"
+msgstr "Preusmeravanje"
 
 #: contrib/redirects/models.py:13
 msgid "redirects"
-msgstr "redirekcije"
+msgstr "Preusmeravanja"
 
 #: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Primer: '/about/contact/'. Proverite da li ste uneli početnu i kranju kosu "
-"crtu."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Primer: '/o-nama/kontakt/'. Proverite da li ste uneli '/' na početku i na kraju."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
@@ -1131,15 +1052,11 @@
 
 #: contrib/flatpages/models.py:12
 msgid "template name"
-msgstr "ime templejta"
+msgstr "naziv templejta"
 
 #: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Primer: 'flatpages/contact-page'. Ako nije dato sistem će koristiti "
-"flatpages/default'."
+msgid "Example: 'flatpages/contact_page'. If this isn't provided, the system will use 'flatpages/default'."
+msgstr "Primer: 'flatpages/kontakt-stranica'. Ako ne zadate sistem će koristiti 'flatpages/default'."
 
 #: contrib/flatpages/models.py:14
 msgid "registration required"
@@ -1147,9 +1064,7 @@
 
 #: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ako izaberete ovu opciju samo prijavljeni korisnici će imati pristup datoj "
-"strani."
+msgstr "Ako izaberete ovu opciju samo prijavljeni korisnici će imati pristup datoj strani."
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
@@ -1159,33 +1074,32 @@
 msgid "flat pages"
 msgstr "statične strane"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/models.py:13
+#: contrib/auth/models.py:26
 msgid "name"
 msgstr "ime"
 
 #: contrib/auth/models.py:15
 msgid "codename"
-msgstr "kodno ime"
+msgstr "Å¡ifra dozvole"
 
 #: contrib/auth/models.py:17
-#, fuzzy
 msgid "permission"
-msgstr "Pravo"
+msgstr "dozvola"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
+#: contrib/auth/models.py:18
+#: contrib/auth/models.py:27
 msgid "permissions"
-msgstr "Prava"
+msgstr "dozvole"
 
 #: contrib/auth/models.py:29
-#, fuzzy
 msgid "group"
-msgstr "Grupa"
+msgstr "grupa"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
+#: contrib/auth/models.py:30
+#: contrib/auth/models.py:65
 msgid "groups"
-msgstr "Grupe"
+msgstr "grupe"
 
 #: contrib/auth/models.py:55
 msgid "username"
@@ -1213,11 +1127,11 @@
 
 #: contrib/auth/models.py:60
 msgid "staff status"
-msgstr "dozvoli pristup administraciji sajta"
+msgstr "dozvoljen pristup administraciji sajta"
 
 #: contrib/auth/models.py:60
 msgid "Designates whether the user can log into this admin site."
-msgstr "Određuje da li će korisnik imati pristup administratorskom delu sajta."
+msgstr "Da li korisnik ima pristup administratorskom delu sajta."
 
 #: contrib/auth/models.py:61
 msgid "active"
@@ -1236,26 +1150,20 @@
 msgstr "datum otvaranja naloga"
 
 #: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Uz ručno dodata prava, korisnik će dobiti sva prava iz grupa kojima pripada."
+msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
+msgstr "Uz ručno dodata prava, korisnik će dobiti sva prava iz grupa kojima pripada."
 
 #: contrib/auth/models.py:67
-#, fuzzy
 msgid "user permissions"
-msgstr "Prava"
+msgstr "korisničke dozvole"
 
 #: contrib/auth/models.py:70
-#, fuzzy
 msgid "user"
-msgstr "Korisnik"
+msgstr "korisnik"
 
 #: contrib/auth/models.py:71
-#, fuzzy
 msgid "users"
-msgstr "Korisnici"
+msgstr "korisnici"
 
 #: contrib/auth/models.py:76
 msgid "Personal info"
@@ -1263,7 +1171,7 @@
 
 #: contrib/auth/models.py:77
 msgid "Permissions"
-msgstr "Prava"
+msgstr "Dozvole"
 
 #: contrib/auth/models.py:78
 msgid "Important dates"
@@ -1274,22 +1182,16 @@
 msgstr "Grupe"
 
 #: contrib/auth/models.py:219
-#, fuzzy
 msgid "message"
-msgstr "Poruka"
+msgstr "poruka"
 
 #: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Vaš web brovser nema omogućenje \"cookie\". \"cookie\" podrška je potrebna "
-"da bi ste mogli da se prijavite."
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "Vaš internet čitač nije prihvatio \"cookie\". \"Cookie\" podrška je potrebna da bi ste mogli da se prijavite."
 
 #: contrib/contenttypes/models.py:25
-#, fuzzy
 msgid "python model class name"
-msgstr "ime python modula"
+msgstr "naziv python modula"
 
 #: contrib/contenttypes/models.py:28
 msgid "content type"
@@ -1383,23 +1285,28 @@
 msgid "February"
 msgstr "Februar"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "March"
 msgstr "Mart"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "April"
 msgstr "April"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "May"
 msgstr "Maj"
 
-#: utils/dates.py:14 utils/dates.py:27
+#: utils/dates.py:14
+#: utils/dates.py:27
 msgid "June"
 msgstr "Jun"
 
-#: utils/dates.py:15 utils/dates.py:27
+#: utils/dates.py:15
+#: utils/dates.py:27
 msgid "July"
 msgstr "Jul"
 
@@ -1424,54 +1331,52 @@
 msgstr "Decembar"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "jan"
-msgstr "i"
+msgstr "jan"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "feb"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mar"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "apr"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "may"
-msgstr "dan"
+msgstr "maj"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "jun"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "jul"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "avg"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "sep"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "okt"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "dec"
 
 #: utils/dates.py:27
 msgid "Jan."
@@ -1518,9 +1423,9 @@
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nedelja"
+msgstr[1] "nedelje"
+msgstr[2] "nedelja"
 
 #: utils/timesince.py:15
 msgid "day"
@@ -1565,7 +1470,7 @@
 
 #: conf/global_settings.py:42
 msgid "Greek"
-msgstr ""
+msgstr "Grčki"
 
 #: conf/global_settings.py:43
 msgid "English"
@@ -1585,11 +1490,11 @@
 
 #: conf/global_settings.py:47
 msgid "Hungarian"
-msgstr ""
+msgstr "Mađarski"
 
 #: conf/global_settings.py:48
 msgid "Hebrew"
-msgstr ""
+msgstr "Hebrejski"
 
 #: conf/global_settings.py:49
 msgid "Icelandic"
@@ -1628,9 +1533,8 @@
 msgstr "Slovački"
 
 #: conf/global_settings.py:58
-#, fuzzy
 msgid "Slovenian"
-msgstr "Slovački"
+msgstr "Slovenački"
 
 #: conf/global_settings.py:59
 msgid "Serbian"
@@ -1641,9 +1545,8 @@
 msgstr "Å vedski"
 
 #: conf/global_settings.py:61
-#, fuzzy
 msgid "Ukrainian"
-msgstr "Brazilski"
+msgstr "Ukrajinski"
 
 #: conf/global_settings.py:62
 msgid "Simplified Chinese"
@@ -1659,24 +1562,20 @@
 msgstr "Ovo polje može sadržati samo slova, brojeve i donju crtu (_)."
 
 #: core/validators.py:64
-#, fuzzy
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Ovo polje može sadržati samo slova, brojeve, donju crtu (_) i kose crte."
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgstr "Ovo polje može sadržati samo slova, brojeve, donju crtu (_), crtu (-) i kose crte."
 
 #: core/validators.py:72
 msgid "Uppercase letters are not allowed here."
-msgstr "Velika slova ovde nisu dozvoljena."
+msgstr "Velika slova nisu dozvoljena."
 
 #: core/validators.py:76
 msgid "Lowercase letters are not allowed here."
-msgstr "Mala slova ovde nisu dozvoljena."
+msgstr "Mala slova nisu dozvoljena."
 
 #: core/validators.py:83
 msgid "Enter only digits separated by commas."
-msgstr "Unesite samo brojeve razdvojene zarezima."
+msgstr "Unesite brojeve razdvojene zarezima."
 
 #: core/validators.py:95
 msgid "Enter valid e-mail addresses separated by commas."
@@ -1688,7 +1587,7 @@
 
 #: core/validators.py:103
 msgid "Empty values are not allowed here."
-msgstr "Prazne vrednosti ovde nisu dozvoljene."
+msgstr "Prazne vrednosti nisu dozvoljene."
 
 #: core/validators.py:107
 msgid "Non-numeric characters aren't allowed here."
@@ -1714,7 +1613,8 @@
 msgid "Enter a valid time in HH:MM format."
 msgstr "Unesite ispravno vreme u HH:MM formatu."
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: core/validators.py:132
+#: db/models/fields/__init__.py:468
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr "Unesite ispravan datum i vreme u YYYY-MM-DD HH:MM formatu."
 
@@ -1723,12 +1623,8 @@
 msgstr "Unesite ispravnu e-mail adresu."
 
 #: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Pošaljite ispravnu sliku. Fajl koji ste poslali ili nije slika ili je sam "
-"fajl oštećen."
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Pošaljite ispravnu sliku. Fajl koji ste poslali ili nije slika ili je sam fajl oštećen."
 
 #: core/validators.py:155
 #, python-format
@@ -1739,8 +1635,7 @@
 #: core/validators.py:159
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Telefonski brojevi moraju biti u formatu XXX-XXX-XXXX. \"%s\" je neispravan."
+msgstr "Telefonski brojevi moraju biti u formatu XXX-XXX-XXXX. \"%s\" je neispravan."
 
 #: core/validators.py:167
 #, python-format
@@ -1770,7 +1665,8 @@
 msgid "Invalid URL: %s"
 msgstr "Neispravan URL: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:206
+#: core/validators.py:208
 #, python-format
 msgid "The URL %s is a broken link."
 msgstr "URL %s je neispravan link."
@@ -1797,7 +1693,8 @@
 msgid "Please enter something for at least one field."
 msgstr "Morate popuniti barem jedno polje."
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:264
+#: core/validators.py:275
 msgid "Please enter both fields or leave them both empty."
 msgstr "Popunite oba polja ili oba ostavite prazna."
 
@@ -1827,8 +1724,7 @@
 #: core/validators.py:349
 #, python-format
 msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
+msgid_plural "Please enter a valid decimal number with at most %s total digits."
 msgstr[0] "Unesite ispravan decimalni broj sa %s cifrom."
 msgstr[1] "Unesite ispravan decimalni broj sa %s cifre."
 msgstr[2] "Unesite ispravan decimalni broj sa %s cifara."
@@ -1836,8 +1732,7 @@
 #: core/validators.py:352
 #, python-format
 msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
 msgstr[0] "Unesite decimalni broj sa najviše %s decimalnim mestom."
 msgstr[1] "Unesite decimalni broj sa najviše %s decimalna mesta."
 msgstr[2] "Unesite decimalni broj sa najviše %s decimalnih mesta."
@@ -1867,63 +1762,38 @@
 
 #: core/validators.py:429
 #, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"Sa URL-a %(url)s se vratio pogrešan Content-Type header '%(contenttype)s'."
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "Sa URL-a %(url)s se vratio pogrešan Content-Type header '%(contenttype)s'."
 
 #: core/validators.py:462
 #, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Zatvorite nezatvoren tag \"%(tag)s\" iz reda %(line)s. (Red počinje sa \"%"
-"(start)s\".)"
+msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)"
+msgstr "Zatvorite nezatvoren tag \"%(tag)s\" iz reda %(line)s. (Red počinje sa \"%(start)s\".)"
 
 #: core/validators.py:466
 #, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Tekst koji počinje u redu %(line)s nije dozvoljen u ovom kontekstu. (Red "
-"počinje sa \"%(start)s\".)"
+msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
+msgstr "Tekst koji počinje u redu %(line)s nije dozvoljen u ovom kontekstu. (Red počinje sa \"%(start)s\".)"
 
 #: core/validators.py:471
 #, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"Atribut \"%(attr)s\" u red %(line)s je neispravan. (Red počinje sa \"%(start)"
-"s\".)"
+msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
+msgstr "Atribut \"%(attr)s\" u red %(line)s je neispravan. (Red počinje sa \"%(start)s\".)"
 
 #: core/validators.py:476
 #, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"Tag \"<%(tag)s>\" u redu %(line)s je neispravan. (Red počinje \"%(start)s\".)"
+msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)"
+msgstr "Tag \"<%(tag)s>\" u redu %(line)s je neispravan. (Red počinje \"%(start)s\".)"
 
 #: core/validators.py:480
 #, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Tag-u u redu %(line)s nedostaje jedan ili više atributa. (Red počinje sa \"%"
-"(start)s\".)"
+msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)"
+msgstr "Tag-u u redu %(line)s nedostaje jedan ili više atributa. (Red počinje sa \"%(start)s\".)"
 
 #: core/validators.py:485
 #, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Atribut \"%(attr)s\" u redu %(line)s ima neispravnu vrednost. (Red počinje "
-"sa \"%(start)s\".)"
+msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)"
+msgstr "Atribut \"%(attr)s\" u redu %(line)s ima neispravnu vrednost. (Red počinje sa \"%(start)s\".)"
 
 #: db/models/manipulators.py:302
 #, python-format
@@ -1935,26 +1805,25 @@
 msgid "%(optname)s with this %(fieldname)s already exists."
 msgstr "%(optname)s sa ovim %(fieldname)s već postoji."
 
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
+#: db/models/fields/__init__.py:114
+#: db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:542
+#: db/models/fields/__init__.py:553
 #: forms/__init__.py:346
 msgid "This field is required."
 msgstr "Obavezno polje."
 
 #: db/models/fields/__init__.py:337
-#, fuzzy
 msgid "This value must be an integer."
-msgstr "Vrednost mora biti stepena %s."
+msgstr "Vrednost mora biti celi broj."
 
 #: db/models/fields/__init__.py:369
-#, fuzzy
 msgid "This value must be either True or False."
-msgstr "Vrednost mora biti stepena %s."
+msgstr "Vrednost mora biti True ili False."
 
 #: db/models/fields/__init__.py:385
-#, fuzzy
 msgid "This field cannot be null."
-msgstr "Neispravno polje."
+msgstr "Polje ne može sadržati praznu vrednost."
 
 #: db/models/fields/__init__.py:562
 msgid "Enter a valid filename."
@@ -1966,23 +1835,17 @@
 msgstr "Unesite ispravan %s."
 
 #: db/models/fields/related.py:579
-#, fuzzy
 msgid "Separate multiple IDs with commas."
-msgstr " Odvojite višestruke ID-ove zarezima."
+msgstr "Odvojite višestruke ID-ove zarezima."
 
 #: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Koristite \"Ctrl\" (PC) ili \"Jabuku\" (Mek) da bi ste selektovali više "
-"stavki."
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Koristite \"Ctrl\" (PC) ili \"Jabuku\" (Mek) da bi ste selektovali više stavki."
 
 #: db/models/fields/related.py:625
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
 msgstr[0] "Unesite validne %(self)s ID-ove. Vrednost %(value)r je neispravna."
 msgstr[1] "Unesite validne %(self)s ID-ove. Vrednost %(value)r je neispravna."
 msgstr[2] "Unesite validne %(self)s ID-ove. Vrednost %(value)r je neispravna."
@@ -1999,7 +1862,9 @@
 msgid "Line breaks are not allowed here."
 msgstr "Novi redovi ovde nisu dozvoljeni."
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: forms/__init__.py:480
+#: forms/__init__.py:551
+#: forms/__init__.py:589
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
 msgstr "Izaberite validnu opciju: '%(data)s' nije u %(choices)s."
@@ -2026,25 +1891,18 @@
 
 #~ msgid "Comment"
 #~ msgstr "Komentar"
-
 #~ msgid "Comments"
 #~ msgstr "Komentari"
-
 #~ msgid "String (up to 50)"
 #~ msgstr "Niz karaktera (maksimalno 50 karaktera)"
-
 #~ msgid "label"
 #~ msgstr "labela"
-
 #~ msgid "package"
 #~ msgstr "paket"
-
 #~ msgid "packages"
 #~ msgstr "paketi"
-
 #~ msgid "Error in Template"
 #~ msgstr "Greška u templejtu"
-
 #~ msgid ""
 #~ "\n"
 #~ "In template %(name)s, error at line %(line)s:\n"
@@ -2055,3 +1913,4 @@
 #, fuzzy
 #~ msgid "count"
 #~ msgstr "sadržaj"
+

Modified: vendor/django/current/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/sr/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/sr/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/sr/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,13 +8,12 @@
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2006-01-15 11:24+0100\n"
-"Last-Translator: Nebojša Đorđević <nesh at studioquattro.co.yu>\n"
+"PO-Revision-Date: 2007-02-20 18:51+0100\n"
+"Last-Translator: Petar Marić <petar.maric at gmail.com>\n"
 "Language-Team: Nesh <nesh at studioquatro.co.yu> & Petar <petar.maric at gmail.com> <sr at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Serbian\n"
 "X-Poedit-Country: YUGOSLAVIA\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 
@@ -25,15 +24,15 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:41
 msgid "Choose all"
-msgstr "Izaberi sve"
+msgstr "Izaberite sve"
 
 #: contrib/admin/media/js/SelectFilter2.js:46
 msgid "Add"
-msgstr "Dodaj"
+msgstr "Dodajte"
 
 #: contrib/admin/media/js/SelectFilter2.js:48
 msgid "Remove"
-msgstr "Izbaci"
+msgstr "Izbacite"
 
 #: contrib/admin/media/js/SelectFilter2.js:53
 #, perl-format
@@ -72,7 +71,7 @@
 
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
 msgid "Choose a time"
-msgstr "Izaberi vreme"
+msgstr "Izaberite vreme"
 
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Midnight"

Modified: vendor/django/current/django/conf/locale/sv/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/sv/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/sv/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/sv/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,26 +1,886 @@
 # Swedish translation of Django
 # Copyright (C) 2005
 # This file is distributed under the same license as the Django package.
+#
+#
 # Robin Sonefors <ozamosi at blinkenlights.se>, 2005.
-#
+# Ludvig Ericson <ludvig.ericson at gmail.com>, 2007.
+# Mikko Hellsing <mikko at sorl.net>, 2007.
 msgid ""
 msgstr ""
-"Project-Id-Version: Django\n"
+"Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:13+0200\n"
-"PO-Revision-Date: 2005-12-04 16:20+0100\n"
-"Last-Translator: Robin Sonefors <ozamosi at blinkenlights.se>\n"
-"Language-Team: Django translators <djangoi18n at googlegroups.com>\n"
+"POT-Creation-Date: 2007-03-06 00:17+0100\n"
+"PO-Revision-Date: 2007-03-06 10:30+0100\n"
+"Last-Translator: Mikko Hellsing <mikko at sorl.net>\n"
+"Language-Team: Django I18N <Django-I18N at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: Swedish\n"
 "X-Poedit-Country: SWEDEN\n"
 
+#: oldforms/__init__.py:352 db/models/fields/__init__.py:116
+#: db/models/fields/__init__.py:273 db/models/fields/__init__.py:609
+#: db/models/fields/__init__.py:620 newforms/models.py:177
+#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450
+#: newforms/fields.py:461
+msgid "This field is required."
+msgstr "Detta fältet är obligatoriskt."
+
+#: oldforms/__init__.py:387
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "Se till att din text är kortare än %s tecken."
+msgstr[1] "Se till att din text är kortare än %s tecken."
+
+#: oldforms/__init__.py:392
+msgid "Line breaks are not allowed here."
+msgstr "Radbrytningar är inte tillåtna här."
+
+#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "Välj ett giltigt alternativ. '%(data)s' finns inte bland %(choices)s."
+
+#: oldforms/__init__.py:572 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "Okänt"
+
+#: oldforms/__init__.py:572 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "Ja"
+
+#: oldforms/__init__.py:572 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "Nej"
+
+#: oldforms/__init__.py:667 core/validators.py:173 core/validators.py:444
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Ingen fil skickad. Kontrollera enkodningen i form taggen."
+
+#: oldforms/__init__.py:669
+msgid "The submitted file is empty."
+msgstr "Den insända filen är tom."
+
+#: oldforms/__init__.py:725
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Fyll i ett heltal mellan -32768 och 32767."
+
+#: oldforms/__init__.py:735
+msgid "Enter a positive number."
+msgstr "Fyll i ett positivt heltal."
+
+#: oldforms/__init__.py:745
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Fyll i ett heltal mellan 0 och 32767."
+
+#: db/models/manipulators.py:307
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(object)s med typen %(type)s finns redan för %(field)s."
+
+#: 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 "och"
+
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s med det här %(fieldname)s finns redan."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Det här värdet måste vara ett heltal."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Det här värdet måste vara True eller False"
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Det här fältet får inte vara null."
+
+#: db/models/fields/__init__.py:456 core/validators.py:147
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Fyll i ett giltigt datum i formatet Ã…Ã…Ã…Ã…-MM-DD."
+
+#: db/models/fields/__init__.py:525 core/validators.py:156
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Fyll i en giltig tidpunkt i formatet Ã…Ã…Ã…Ã…-MM-DD HH:MM"
+
+#: db/models/fields/__init__.py:629
+msgid "Enter a valid filename."
+msgstr "Fyll i ett giltigt filnamn."
+
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Var god fyll i giltigt %s."
+
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Separera flera ID:n med kommatecken."
+
+#: db/models/fields/related.py:644
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Håll ner \"Control\", eller \"Command\" på en Mac, för att välja mer än en."
+
+#: 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] "Var god och fyll giltiga %(self)s ID-nummer. Värdet %(value)r är ogiltigt."
+msgstr[1] "Var god och fyll giltiga %(self)s ID-nummer. Värdena %(value)r är ogiltiga."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Arabiska"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Bengaliska"
+
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr "Katalanska"
+
+#: conf/global_settings.py:42
+msgid "Czech"
+msgstr "Tjeckiska"
+
+#: conf/global_settings.py:43
+msgid "Welsh"
+msgstr "Walesiska"
+
+#: conf/global_settings.py:44
+msgid "Danish"
+msgstr "Danska"
+
+#: conf/global_settings.py:45
+msgid "German"
+msgstr "Tyska"
+
+#: conf/global_settings.py:46
+msgid "Greek"
+msgstr "Grekiska"
+
+#: conf/global_settings.py:47
+msgid "English"
+msgstr "Engelska"
+
+#: conf/global_settings.py:48
+msgid "Spanish"
+msgstr "Spanska"
+
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr "Argentisk Spanska"
+
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "Finska"
+
+#: conf/global_settings.py:51
+msgid "French"
+msgstr "Franska"
+
+#: conf/global_settings.py:52
+msgid "Galician"
+msgstr "Galisiska"
+
+#: conf/global_settings.py:53
+msgid "Hungarian"
+msgstr "Ungerska"
+
+#: conf/global_settings.py:54
+msgid "Hebrew"
+msgstr "Hebreiska"
+
+#: conf/global_settings.py:55
+msgid "Icelandic"
+msgstr "Isländska"
+
+#: conf/global_settings.py:56
+msgid "Italian"
+msgstr "Italienska"
+
+#: conf/global_settings.py:57
+msgid "Japanese"
+msgstr "Japanska"
+
+#: conf/global_settings.py:58
+msgid "Kannada"
+msgstr "Kannada"
+
+#: conf/global_settings.py:59
+msgid "Latvian"
+msgstr "Lettiska"
+
+#: conf/global_settings.py:60
+msgid "Macedonian"
+msgstr "Makedonska"
+
+#: conf/global_settings.py:61
+msgid "Dutch"
+msgstr "Holländska"
+
+#: conf/global_settings.py:62
+msgid "Norwegian"
+msgstr "Norska"
+
+#: conf/global_settings.py:63
+msgid "Polish"
+msgstr "Polska"
+
+#: conf/global_settings.py:64
+msgid "Brazilian"
+msgstr "Brasilianska"
+
+#: conf/global_settings.py:65
+msgid "Romanian"
+msgstr "Rumänska"
+
+#: conf/global_settings.py:66
+msgid "Russian"
+msgstr "Ryska"
+
+#: conf/global_settings.py:67
+msgid "Slovak"
+msgstr "Slovakiska"
+
+#: conf/global_settings.py:68
+msgid "Slovenian"
+msgstr "Slovenska"
+
+#: conf/global_settings.py:69
+msgid "Serbian"
+msgstr "Serbiska"
+
+#: conf/global_settings.py:70
+msgid "Swedish"
+msgstr "Svenska"
+
+#: conf/global_settings.py:71
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:72
+msgid "Turkish"
+msgstr "Turkiska"
+
+#: conf/global_settings.py:73
+msgid "Ukrainian"
+msgstr "Ukrainska"
+
+#: conf/global_settings.py:74
+msgid "Simplified Chinese"
+msgstr "Förenklad Kinesiska"
+
+#: conf/global_settings.py:75
+msgid "Traditional Chinese"
+msgstr "Traditionell Kinesiska"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Det här värdet får bara innehålla bokstäver, tal och understräck."
+
+#: core/validators.py:68
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Det här värdet får bara innehålla bokstäver, siffror, understräck, sträck "
+"och snedsträck"
+
+#: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Det här värdet får bara innehålla bokstäver, siffror, understräck eller sträck ."
+
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "Stora bokstäver är inte tillåtna här."
+
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "Små bokstäver är inte tillåtna här."
+
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Fyll enbart i siffror avskilda med kommatecken."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Fyll i giltiga e-mailadresser avskilda med kommatecken."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "Var god fyll i en giltigt IP-adress."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "Tomma värden är inte tillåtna här."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Icke-numeriska tecken är inte tillåtna här."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Det här värdet kan inte enbart bestå av siffror."
+
+#: core/validators.py:120 newforms/fields.py:126
+msgid "Enter a whole number."
+msgstr "Fyll i ett heltal."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Endast bokstäver är tillåtna här."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "Årtal måste vara 1900 eller senare."
+
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s."
+msgstr "Felaktigt datum: %s"
+
+#: core/validators.py:152
+msgid "Enter a valid time in HH:MM format."
+msgstr "Fyll i en giltig tid i formatet HH:MM"
+
+#: core/validators.py:161 newforms/fields.py:269
+msgid "Enter a valid e-mail address."
+msgstr "Fyll i en giltig e-mailadress."
+
+#: core/validators.py:177
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Ladda upp en giltig bild. Filen du laddade upp var antingen ingen bild eller en "
+"korrupt bild."
+
+#: core/validators.py:184
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "URL:en %s pekar inte på en giltig bild."
+
+#: core/validators.py:188
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Telefonnummer måste vara i det amerikanska formatet XXX-XXX-XXXX. \"%s\" är "
+"ogiltigt."
+
+#: core/validators.py:196
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "URL:en %s pekar inte på en giltig QuickTime-video."
+
+#: core/validators.py:200
+msgid "A valid URL is required."
+msgstr "En giltig URL krävs."
+
+#: core/validators.py:214
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Giltig HTML krävs. Specifika fel är:\n"
+"%s"
+
+#: core/validators.py:221
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Missformad XML: %s"
+
+#: core/validators.py:238
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Felaktig URL: %s"
+
+#: core/validators.py:243 core/validators.py:245
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "URL:en %s är en trasig länk."
+
+#: core/validators.py:251
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Fyll i en giltig förkortning för en amerikansk delstat"
+
+#: core/validators.py:265
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Akta din tunga! Ordet %s är inte tillåtet här."
+msgstr[1] "Akta din tunga! Orden %s är inte tillåtna här."
+
+#: core/validators.py:272
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Det här fältet måste matcha fältet '%s'."
+
+#: core/validators.py:291
+msgid "Please enter something for at least one field."
+msgstr "Fyll i något i minst ett fält."
+
+#: core/validators.py:300 core/validators.py:311
+msgid "Please enter both fields or leave them both empty."
+msgstr "Fyll antingen i båda fälten, eller lämna båda tomma"
+
+#: core/validators.py:319
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Det är fältet måste anges om %(field)s är %(value)s"
+
+#: core/validators.py:332
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Det här fältet måste anges om %(field)s inte är %(value)s"
+
+#: core/validators.py:351
+msgid "Duplicate values are not allowed."
+msgstr "Upprepade värden är inte tillåtna."
+
+#: core/validators.py:366
+#, python-format
+msgid "This value must be between %(lower)s and %(upper)s."
+msgstr "Det här värdet måste mellan %(lower)s och %(upper)s."
+
+#: core/validators.py:368
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Det här värdet måste minsta vara %s."
+
+#: core/validators.py:370
+#, python-format
+msgid "This value must be no more than %s."
+msgstr "Det här värdet får inte vara mer än %s."
+
+#: core/validators.py:406
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Det här värdet måste vara en multipel av %s."
+
+#: core/validators.py:417
+msgid "Please enter a valid decimal number."
+msgstr "Fyll i ett giltigt decimaltal."
+
+#: core/validators.py:421
+#, 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] "Fyll i ett giltigt decimaltal med mindre än %s siffra totalt."
+msgstr[1] "Fyll i ett giltigt decimaltal med mindre än %s siffror totalt."
+
+#: core/validators.py:424
+#, 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] "Fyll i ett giltigt decimaltal med en heltalsdel som inte är mer än %s siffra."
+msgstr[1] "Fyll i ett giltigt decimaltal med en heltalsdel som inte är mer än %s siffror."
+
+#: core/validators.py:427
+#, 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] "Fyll i ett giltigt decimaltal med %s decimal som mest."
+msgstr[1] "Fyll i ett giltigt decimaltal med %s decimaler som mest."
+
+#: core/validators.py:437
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Se till att filen du laddade upp är minst %s bytes stor."
+
+#: core/validators.py:438
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Se till att filen du laddade upp är som mest %s bytes stor."
+
+#: core/validators.py:455
+msgid "The format for this field is wrong."
+msgstr "Formatet på det här fältet är fel."
+
+#: core/validators.py:470
+msgid "This field is invalid."
+msgstr "Det här fältet är ogiltigt."
+
+#: core/validators.py:506
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Kunde inte hämta något från %s."
+
+#: core/validators.py:509
+#, python-format
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "URL:en %(url)s returnerade den ogiltiga Content-Type headern '%(contenttype)s'"
+
+#: core/validators.py:542
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Var god avsluta den oavslutade taggen %(tag)s på rad %(line)s. (Raden börjar "
+"med \"%(start)s\".)"
+
+#: core/validators.py:546
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"En del text från rad %(line)s är inte tillåtet i det sammanhanget. (Raden "
+"börjar med \"%(start)s\".)"
+
+#: core/validators.py:551
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"%(attr)s\" på rad %(line)s är inte ett giltigt attribut. (Raden startar "
+"med \"%(start)s\".)"
+
+#: core/validators.py:556
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"<%(tag)s>\" på rad %(line)s är en ogiltig tagg. (Raden börjar med \"%"
+"(start)s\".)"
+
+#: core/validators.py:560
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"En tagg på rad %(line)s saknar en eller flera nödvändiga attribut. (Raden "
+"börjar med \"%(start)s\".)"
+
+#: core/validators.py:565
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Attributet \"%(attr)s\" på rad %(line)s har ett ogiltigt värde. (Raden "
+"börjar med \"%(start)s\".)"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s skapades framgångsrikt."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr " %(verbose_name)s uppdaterades framgångsrikt."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s togs bort."
+
+#: newforms/models.py:164 newforms/fields.py:360
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga alternativ."
+
+#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454
+msgid "Enter a list of values."
+msgstr "Fyll i en lista med värden."
+
+#: newforms/models.py:187 newforms/fields.py:387
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Välj ett giltigt alternativ. '%s' finns inte bland tillgängliga alternativ."
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Se till att din text inte har mer än %d tecken."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Se till att din text har minst %d tecken."
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr "Se till att detta värdet är mindre än eller lika med %s."
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr "Se till att detta värde är större eller lika med %s."
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Fyll i ett giltigt datum."
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr "Fyll i en giltig tid."
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr "Fyll i ett giltigt datum/tid."
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Fyll i ett giltigt värde."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Fyll i ett giltigt URL."
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "Detta URL verkar vara en trasig länk."
+
+#: contrib/contenttypes/models.py:26
+msgid "python model class name"
+msgstr "python modell klass namn"
+
+#: contrib/contenttypes/models.py:29
+msgid "content type"
+msgstr "innehållstyp"
+
+#: contrib/contenttypes/models.py:30
+msgid "content types"
+msgstr "innehållstyper"
+
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Utloggad"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "namn"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "kodnamn"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "rättighet"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "rättigheter"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "grupp"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "grupper"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "användarnamn"
+
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr "Obligatorisk. 30 tecken eller mindre. Endast bokstäver, siffror eller understräck."
+
+#: contrib/auth/models.py:91
+msgid "first name"
+msgstr "förnamn"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "efternamn"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "e-mailadress"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "lösenord"
+
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr "Använd '[algo]$[salt]$[hexdigest]' eller använd <a href=\"password/\">Ändra lösenord</a>."
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "personalstatus"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Avgör om användaren kan logga in på den här admin-siten."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "aktiv"
+
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Avgör om användaren kan logga in till Django admin. Av-markera denna "
+"istället för att ta bort konton."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "superanvändare"
+
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Bestämmer att användaren har alla rättigheter utan att uttryckligen tilldela "
+"dem"
+
+#: contrib/auth/models.py:98
+msgid "last login"
+msgstr "senaste inloggning"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "registreringsdatum"
+
+#: 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 ""
+"Förutom de rättigheterna som utdelas manuellt så kommer användaren dessutom "
+"få samma rättigheter som de grupper där han/hon är medlem."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "användarättigheter"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "användare"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "användare"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "Personlig information"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Rättigheter"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Viktiga datum"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Grupper"
+
+#: contrib/auth/models.py:258
+msgid "message"
+msgstr "meddelande"
+
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr "De båda lösenorden stämde inte överens."
+
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
+msgstr "En användare med det användarnamnet finns redan."
+
+#: contrib/auth/forms.py:53
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Din webläsare verkar inte stödja cookies. Cookie behövs för att kunna logga "
+"in."
+
+#: 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 ""
+"V.G. ange ett korrekt användarnamn och lösenord. Observera att båda fälten gör "
+"skillnad på versaler och gemener."
+
+#: contrib/auth/forms.py:62
+msgid "This account is inactive."
+msgstr "Detta konto är inaktivt."
+
+#: contrib/auth/forms.py:85
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Den e-mailadressen har inte något konto associerat med sig. Är du säker på "
+"att du har registrerat dig?"
+
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
+msgstr "De båda nya lösenordsfälten stämde inte överens."
+
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Ditt gamla lösenord var felaktigt ifyllt. Var vänlig fyll i det igen"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "omdirigera från"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Det här bör vara en absolut sökväg, förutom domännamnet. Exempel: '/"
+"handelser/sok/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "omdirigera till"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Detta kan vara antingen en absolut sökväg (som ovan), eller en komplett "
+"URL som börjar med 'http://'."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "omdirigera"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "omdirigeringar"
+
 #: contrib/comments/models.py:67 contrib/comments/models.py:166
 msgid "object ID"
-msgstr "objektets id"
+msgstr "objektets ID"
 
 #: contrib/comments/models.py:68
 msgid "headline"
@@ -75,7 +935,7 @@
 msgid "is public"
 msgstr "är offentligt"
 
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
 msgid "IP address"
 msgstr "IP-adress"
 
@@ -92,13 +952,12 @@
 "kommentaren har tagits bort\"-meddelande kommer visas istället"
 
 #: contrib/comments/models.py:91
-#, fuzzy
 msgid "comments"
-msgstr "kommentar"
+msgstr "kommentarer"
 
 #: contrib/comments/models.py:131 contrib/comments/models.py:207
 msgid "Content object"
-msgstr "innehållsobjekt"
+msgstr "Innehållsobjekt"
 
 #: contrib/comments/models.py:159
 #, python-format
@@ -128,14 +987,12 @@
 msgstr "godkänd av personal"
 
 #: contrib/comments/models.py:176
-#, fuzzy
 msgid "free comment"
-msgstr "Fri kommentar"
+msgstr "fri kommentar"
 
 #: contrib/comments/models.py:177
-#, fuzzy
 msgid "free comments"
-msgstr "Fria kommentarer"
+msgstr "fria kommentarer"
 
 #: contrib/comments/models.py:233
 msgid "score"
@@ -143,17 +1000,15 @@
 
 #: contrib/comments/models.py:234
 msgid "score date"
-msgstr "poängens datum"
+msgstr "poängdatum"
 
 #: contrib/comments/models.py:237
-#, fuzzy
 msgid "karma score"
-msgstr "Karmapoäng"
+msgstr "karmapoäng"
 
 #: contrib/comments/models.py:238
-#, fuzzy
 msgid "karma scores"
-msgstr "Karmapoäng"
+msgstr "karmapoäng"
 
 #: contrib/comments/models.py:242
 #, python-format
@@ -176,14 +1031,12 @@
 msgstr "flaggdatum"
 
 #: contrib/comments/models.py:268
-#, fuzzy
 msgid "user flag"
-msgstr "Användarflagga"
+msgstr "användares flagga"
 
 #: contrib/comments/models.py:269
-#, fuzzy
 msgid "user flags"
-msgstr "Användarflaggor"
+msgstr "användares flaggor"
 
 #: contrib/comments/models.py:273
 #, python-format
@@ -192,22 +1045,20 @@
 
 #: contrib/comments/models.py:278
 msgid "deletion date"
-msgstr "borttagningsdatum"
+msgstr "borttagnings-datum"
 
 #: contrib/comments/models.py:280
-#, fuzzy
 msgid "moderator deletion"
-msgstr "Moderatorborttagning"
+msgstr "moderator-borttagning"
 
 #: contrib/comments/models.py:281
-#, fuzzy
 msgid "moderator deletions"
-msgstr "Moderatorborttagningar"
+msgstr "moderator-borttagningar"
 
 #: contrib/comments/models.py:285
 #, python-format
 msgid "Moderator deletion by %r"
-msgstr "Moderatorborttagning av %r"
+msgstr "Moderator-borttagning av %r"
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
@@ -215,18 +1066,17 @@
 
 #: contrib/comments/views/karma.py:23
 msgid "Invalid comment ID"
-msgstr "Kommentaren har ett ogiltigt ID"
+msgstr "Ogiltig kommentaridentifikation"
 
 #: contrib/comments/views/karma.py:25
 msgid "No voting for yourself"
 msgstr "Du får inte rösta på dig själv"
 
-#: contrib/comments/views/comments.py:28
-msgid ""
-"This rating is required because you've entered at least one other rating."
+#: contrib/comments/views/comments.py:27
+msgid "This rating is required because you've entered at least one other rating."
 msgstr "Det här betyget krävs eftersom du har fyllt i minst ett annat betyg."
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
@@ -239,17 +1089,17 @@
 "\n"
 "%(text)s"
 msgstr[0] ""
-"Den här kommentaren postades av en användare som har postat färre än %(count)"
-"s kommentar:\n"
+"Den här kommentaren postades av en användare som har postat mindre än "
+"%(count)s kommentar:\n"
 "\n"
 "%(text)s"
 msgstr[1] ""
-"Den här kommentaren postades av en användare som har postat färre än %(count)"
-"s kommentarer:\n"
+"Den här kommentaren postades av en användare som har postat mindre än "
+"%(count)s kommentarer:\n"
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
@@ -260,35 +1110,49 @@
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
-msgstr "Endast POSTningar är tillåtna"
+msgstr "Endast POST tillåtet"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
-msgstr "Ett eller fler av fälten som krävs fylldes inte i"
+msgstr "Ett eller flera av de obligatoriska fälten var inte ifyllda"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Någon fifflade med kommenteringsformuläret (säkerhetsbrott)"
+msgstr "Någon fifflade med kommentarformuläret (säkerhetsbrott)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
 "invalid"
 msgstr ""
-"Kommenteringsformuläret har en ogiltig 'target'-parameter -- objektets ID är "
+"Kommentars-formuläret hade en ogiltig 'mål'-parameter -- objektets ID var "
 "ogiltigt"
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Kommenteringsformuläret skickade varken 'förhandsgranska' eller 'post'"
+msgstr "Kommentars-formuläret skickade varken 'förhandsgranska' eller 'post'"
 
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Ditt namn:"
+
+#: contrib/comments/templates/comments/freeform.html:5
+#: contrib/comments/templates/comments/form.html:28
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: contrib/comments/templates/comments/freeform.html:10
+#: contrib/comments/templates/comments/form.html:35
+msgid "Preview comment"
+msgstr "Förhandsgranska kommentar"
+
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/login.html:17
@@ -296,21 +1160,12 @@
 msgstr "Användarnamn:"
 
 #: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "Lösenord:"
-
-#: contrib/comments/templates/comments/form.html:6
-#, fuzzy
-msgid "Forgotten your password?"
-msgstr "Ändra mitt lösenord"
-
-#: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/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:4
@@ -326,42 +1181,117 @@
 msgid "Log out"
 msgstr "Logga ut"
 
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Lösenord:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Glömt ditt lösenord?"
+
 #: contrib/comments/templates/comments/form.html:12
-#, fuzzy
 msgid "Ratings"
-msgstr "betyg #1"
+msgstr "Betyg"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr ""
+msgstr "Obligatorisk"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Optional"
-msgstr ""
+msgstr "Valfri"
 
 #: contrib/comments/templates/comments/form.html:23
 msgid "Post a photo"
+msgstr "Lägg till foto"
+
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315
+msgid "URL"
+msgstr "URL"
+
+#: contrib/flatpages/models.py:8
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedsträck."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "titel"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "innehåll"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "aktivera kommentarer"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "mallnamn"
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
 msgstr ""
+"Exempel: 'sidor/kontaktsida.html'. Om det här inte fylls i kommer systemet "
+"att använda 'sidor/default.html'."
 
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-#, fuzzy
-msgid "Comment:"
-msgstr "Kommentar"
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "registrering krävs"
 
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-#, fuzzy
-msgid "Preview comment"
-msgstr "Fri kommentar"
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Om det här bockas i kommer endast inloggade användare att kunna visa sidan"
 
-#: contrib/comments/templates/comments/freeform.html:4
-#, fuzzy
-msgid "Your name:"
-msgstr "användarnamn"
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "flatsida"
 
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "flatsidor"
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "sessionsnyckel"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "sessionsdata"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "utgångsdatum"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "session"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "sessioner"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "domännamn"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "visat namn"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "site"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "siter"
+
 #: contrib/admin/filterspecs.py:40
 #, python-format
 msgid ""
@@ -372,7 +1302,7 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
 msgstr "Alla"
 
@@ -396,21 +1326,9 @@
 msgid "This year"
 msgstr "Det här året"
 
-#: contrib/admin/filterspecs.py:143
-msgid "Yes"
-msgstr "Ja"
-
-#: contrib/admin/filterspecs.py:143
-msgid "No"
-msgstr "Nej"
-
-#: contrib/admin/filterspecs.py:150
-msgid "Unknown"
-msgstr "Okänt"
-
 #: contrib/admin/models.py:16
 msgid "action time"
-msgstr "tid för händelse"
+msgstr "händelsetid"
 
 #: contrib/admin/models.py:19
 msgid "object id"
@@ -436,220 +1354,299 @@
 msgid "log entries"
 msgstr "loggposter"
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/templatetags/admin_list.py:247
 msgid "All dates"
 msgstr "Alla datum"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "Logga in"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
 msgstr ""
-"Du måste logga in igen, eftersom din session har tagit slut. Oroa dig inte: "
-"ditt bidrag har sparats."
+"V.G. logga in igen, eftersom din session har tagit slut. Oroa dig inte: ditt "
+"bidrag har sparats."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
 msgstr ""
-"Det ser ut som om din webbläsare inte är konfigurerad att acceptera kakor. "
-"Aktivera kakor, ladda om den här sidan, och försök igen."
+"Det ser ut som om din webläsare inte är konfigurerad att acceptera cookies. "
+"Aktivera cookies, ladda om den här sidan, och försök igen."
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "Användarnamn kan inte innehålla tecknet '@'."
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Din e-postadress är inte ditt användarnamn. Försök med '%s' istället."
+msgstr "Din e-mailadress är inte ditt användarnamn. Försök med '%s' istället."
 
-#: contrib/admin/views/main.py:226
-msgid "Site administration"
-msgstr "Hemsideadministration"
-
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)set \"%(obj)s\" lades till."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
+#: contrib/admin/views/main.py:347
 msgid "You may edit it again below."
 msgstr "Du kan ändra det igen här under."
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/auth.py:30
+msgid "Add user"
+msgstr "Lägg till användare"
+
+#: contrib/admin/views/auth.py:57
+msgid "Password changed successfully."
+msgstr "Lösenordet ändrades framgångsrikt."
+
+#: contrib/admin/views/auth.py:64
 #, python-format
+msgid "Change password: %s"
+msgstr "Ändra lösenord: %s"
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Administration"
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
 msgid "You may add another %s below."
-msgstr "Du kan lägga till en till %s här under"
+msgstr "Du kan lägga till en till %s här under."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
 msgstr "Lägg till %s"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "Lade till %s."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "och"
-
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
 msgstr "Ändrade %s."
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "Tog bort %s."
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "Inga fält ändrade."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)set \"%(obj)s\" ändrades."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "%(name)set \"%(obj)s\" lades till. Du kan ändra det igen här under."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "Ändra %s"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:476
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Ett eller flera %(fieldname)s i %(name)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:481
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Ett eller flera %(fieldname)s i %(name)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:514
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)set \"%(obj)s\" togs bort."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:517
 msgid "Are you sure?"
 msgstr "Är du säker?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:539
 #, python-format
 msgid "Change history: %s"
 msgstr "Ändra historien: %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:573
 #, python-format
 msgid "Select %s"
 msgstr "Välj %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:573
 #, python-format
 msgid "Select %s to change"
-msgstr "Välj vilken %s du vill ändra"
+msgstr "Välj %s att ändra"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:768
+msgid "Database error"
+msgstr "Databas fel"
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "tagg:"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "filter:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "Vy:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "Applikation %r hittades inte"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr "Modellen %(model_name)r hittades inte i applikation %(app_label)r"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr "Det sammalänkade `%(app_label)s.%(data_type)s` objektet"
+
+#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205
+#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224
+msgid "model:"
+msgstr "modell:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "sammanlänkade `%(app_label)s.%(object_name)s` objekt"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "alla %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "antal %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Fält på %s objekt"
+
+#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
+#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
 msgid "Integer"
 msgstr "Heltal"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "Boolesk (antingen Sann eller Falsk)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "Sträng (upp till %(maxlength)s)"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "Komma-separerade heltal"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "Datum (utan tid)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "Datum (med tid)"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "E-postadress:"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
 msgstr "Sökväg"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
-msgstr "decemaltal"
+msgstr "Decimaltal"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
-msgstr "Boolesk (antingen Sann, Falsk eller Inget)"
+msgstr "Boolesk (antingen True, False eller None)"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
-msgstr "Relation till förälder"
+msgstr "Relation till förälder-modell"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "Telefonnummer"
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "Text"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "Tid"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
-msgstr "Stat i USA (två stora bokstäver)"
+msgstr "Stat i USA (två versaler)"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "XML-text"
 
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s verkar inte vara ett urlmönster-objekt"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Nuvarande:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Ändra:"
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Datum:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Tid:"
+
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/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
@@ -658,9 +1655,12 @@
 
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
-#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/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/bookmarklets.html:4
@@ -677,11 +1677,13 @@
 msgstr "Ändra lösenord"
 
 #: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_list.html:6
 #: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/delete_confirmation.html:6
-#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/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
@@ -692,7 +1694,7 @@
 msgstr "Hem"
 
 #: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 msgid "History"
 msgstr "Historik"
 
@@ -718,15 +1720,17 @@
 "admin site."
 msgstr ""
 "Det här objektet har ingen ändringshistorik. Det lades antagligen inte till "
-"i den här admin-sidan"
+"i den här admin-siten"
 
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Djangos sidadministration"
+#: contrib/admin/templates/admin/change_list.html:12
+#, python-format
+msgid "Add %(name)s"
+msgstr "Lägg till %(name)s"
 
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administration för Django"
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " Av %(filter_title)s "
 
 #: contrib/admin/templates/admin/500.html:4
 msgid "Server error"
@@ -745,9 +1749,50 @@
 "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 ""
-"Ett fel har uppstått. Sidadministratören har meddelats via e-post och felet "
-"bör åtgärdas snart. Tack för ditt tålamod."
+"Ett fel har uppstått. Administratören har meddelats via e-mail och "
+"felet bör åtgärdas snart. Tack för ditt tålamod."
 
+#: 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 ""
+"Någonting är fel med din databasinstallation. Se till att de rätta tabellerna har "
+"skapats och att databasen är läsbar av rätt användare."
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Utför"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 resultat"
+msgstr[1] "%(counter)s resultat"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s totalt"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Visa alla"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django site-administration"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django administration"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filter"
+
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
@@ -760,8 +1805,13 @@
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modeller tillgängliga i %(name)s applikationen."
 
+#: 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"
@@ -773,30 +1823,40 @@
 
 #: contrib/admin/templates/admin/index.html:44
 msgid "You don't have permission to edit anything."
-msgstr "Du har inte rätt att ändra något."
+msgstr "Du har inte rättigheter att ändra något."
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
-msgstr "Senaste händelserna"
+msgstr "Senaste Händelserna"
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "My Actions"
-msgstr "Mina händelser"
+msgstr "Mina Händelser"
 
 #: contrib/admin/templates/admin/index.html:57
 msgid "None available"
 msgstr "Inga tillgängliga"
 
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Lägg till %(name)s"
+#: contrib/admin/templates/admin/change_form.html:22
+msgid "View on site"
+msgstr "Visa på siten"
 
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Har du <a href=\"/password_reset/\">glömt ditt lösenord</a>?"
+#: 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] "Rätta till felet nedan."
+msgstr[1] "Rätta till felen nedan."
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/change_form.html:50
+msgid "Ordering"
+msgstr "Sortering"
+
+#: contrib/admin/templates/admin/change_form.html:53
+msgid "Order:"
+msgstr "Sortera:"
+
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "Välkommen,"
 
@@ -808,54 +1868,27 @@
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
 msgstr ""
-"Att ta bort %(object_name)s '%(object)s' skulle innebära att besläktade "
+"Att ta bort %(object_name)s '%(escaped_object)s' skulle innebära att besläktade "
 "objekt togs bort, men ditt konto har inte rättigheter att ta bort följande "
 "objekttyper:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"Är du säker på att du vill ta bort %(object_name)s \"%(object)s\"? Följande "
-"besläktade föremål kommer att tas bort:"
+"Är du säker på att du vill ta bort %(object_name)s \"%(escaped_object)s\"? Alla "
+"dessa sammanlänkade objekt kommer att tas bort:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
 msgstr "Ja, jag är säker"
 
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(title)s "
-msgstr " Efter %(title)s "
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Utför"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Visa på hemsidan"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Rätta till felet nedan."
-msgstr[1] "Rätta till felen nedan."
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "Sortering"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "Sortera:"
-
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
 msgstr "Spara som ny"
@@ -872,6 +1905,38 @@
 msgid "Save"
 msgstr "Spara"
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Ange nytt lösenord för användaren <strong>%(username)s</strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Lösenord"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Lösenord (igen)"
+
+#: 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 "Fyll i samma lösenord som ovan för verifiering."
+
+#: 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 ""
+"Ange först ett användarnamn och ett lösenord. Sedan kommer du att kunna ändra "
+"fler användaralternativ."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Användarnamn"
+
 #: 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
@@ -900,7 +1965,7 @@
 "Forgotten your password? Enter your e-mail address below, and we'll reset "
 "your password and e-mail the new one to you."
 msgstr ""
-"Har du glömt ditt lösenord? Fyll i din e-postadress nedan, så nollställer vi "
+"Har du glömt ditt lösenord? Fyll i din e-mailadress nedan, så nollställer vi "
 "ditt lösenord och mailar det nya till dig."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
@@ -913,7 +1978,7 @@
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Tack för att du spenderade kvalitetstid med webbsidan idag."
+msgstr "Tack för att du spenderade kvalitetstid med web-siten idag."
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
@@ -929,7 +1994,7 @@
 "We've e-mailed a new password to the e-mail address you submitted. You "
 "should be receiving it shortly."
 msgstr ""
-"Vi har skickat ett nytt lösenord till e-postadressen du fyllde i. Det bör "
+"Vi har skickat ett nytt lösenord till e-mailadressen du fyllde i. Det bör "
 "anlända snarast."
 
 #: contrib/admin/templates/registration/password_change_form.html:12
@@ -982,7 +2047,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:13
 msgid "Thanks for using our site!"
-msgstr "Tack för att du använder vår sida!"
+msgstr "Tack för att du använder vår site!"
 
 #: contrib/admin/templates/registration/password_reset_email.html:15
 #, python-format
@@ -1011,9 +2076,9 @@
 "<p class=\"help\">För att installera smarta bokmärken, dra länken till din\n"
 "verktygsrad med bokmärken, eller högerklicka på länken och lägg till den\n"
 "till dina bokmärken. Nu kan du välja det smarta bokmärket från alla sidor\n"
-"på hemsidan. Notera att några av desa smarta bokmärken kräver att du tittar\n"
-"på sidan på en dator som är \"intern\" (prata med din systemadministratör\n"
-"om du inte är säker på om din dator är \"intern\")</p>\n"
+"på siten. Observera att några av dessa smarta bokmärken kräver att du besöker\n"
+"sidan från en dator som är \"intern\" (tala med din systemadministratör\n"
+"om du inte är säker på om din dator är \"intern\").</p>\n"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:19
 msgid "Documentation for this page"
@@ -1029,14 +2094,15 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:22
 msgid "Show object ID"
-msgstr "Visa objektets id"
+msgstr "Visa objektets ID"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:23
 msgid ""
 "Shows the content-type and unique ID for pages that represent a single "
 "object."
 msgstr ""
-"Visa innehållstypen och ID:t för sidor som representerar ett enskillt objekt."
+"Visa innehållstypen och det unika ID:t för sidor som representerar ett "
+"enskilt objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:25
 msgid "Edit this object (current window)"
@@ -1045,7 +2111,7 @@
 #: contrib/admin/templates/admin_doc/bookmarklets.html:26
 msgid "Jumps to the admin page for pages that represent a single object."
 msgstr ""
-"Hoppar till administrationssidan för sidor som representerar ett enskillt "
+"Hoppar till administrationssidan för sidor som representerar ett enskilt "
 "objekt."
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:28
@@ -1054,416 +2120,139 @@
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:29
 msgid "As above, but opens the admin page in a new window."
-msgstr "Som ovan, men öppnaradministrationssidan i ett nytt fönster."
+msgstr "Som ovan, men öppnar administrationssidan i ett nytt fönster."
 
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Datum:"
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
+msgstr "Fyll i ett postnummer. Du måste ha mellanslag mellan nummerdelarna."
 
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Tid:"
+#: contrib/localflavor/usa/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Fyll i zipkod i formatet XXXXX eller XXXXX-XXXX."
 
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr ""
-
-#: contrib/admin/templates/widget/file.html:3
-#, fuzzy
-msgid "Change:"
-msgstr "Ändra"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "vidarebefodra från"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Det här bör vara en absolut sökväg, förutom domännamnet. Exempel: '/"
-"handelser/sok/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "vidarebefodra till"
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Det här kan vara antingen en absolut sökväg (som ovan), eller en komplett "
-"adress som börjar med 'http://'."
-
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "vidarebefodra"
-
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "vidarebefodringar"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedsträck."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "titel"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "innehåll"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "aktivera kommentarer"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "mallnamn"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Exempel: 'flatpages/kontaktsida'. Om det här inte fylls i kommer systemet "
-"att använda 'flatpages/default'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "registrering krävs"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Om det här bockas i kommer endast inloggade användare att kunna visa sidan"
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "flatsida"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "flatsidor"
-
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
-msgid "name"
-msgstr "namn"
-
-#: contrib/auth/models.py:15
-msgid "codename"
-msgstr "kodnamn"
-
-#: contrib/auth/models.py:17
-#, fuzzy
-msgid "permission"
-msgstr "Rättighet"
-
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
-msgid "permissions"
-msgstr "Rättigheter"
-
-#: contrib/auth/models.py:29
-#, fuzzy
-msgid "group"
-msgstr "Grupp"
-
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
-msgid "groups"
-msgstr "Grupper"
-
-#: contrib/auth/models.py:55
-msgid "username"
-msgstr "användarnamn"
-
-#: contrib/auth/models.py:56
-msgid "first name"
-msgstr "förnamn"
-
-#: contrib/auth/models.py:57
-msgid "last name"
-msgstr "efternamn"
-
-#: contrib/auth/models.py:58
-msgid "e-mail address"
-msgstr "e-postadress"
-
-#: contrib/auth/models.py:59
-msgid "password"
-msgstr "lösenord"
-
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Använd '[algo]$[salt]$[hexdigest]'"
-
-#: contrib/auth/models.py:60
-msgid "staff status"
-msgstr "personalstatus"
-
-#: contrib/auth/models.py:60
-msgid "Designates whether the user can log into this admin site."
-msgstr "Avgör om användaren kan logga in till den här administrationssidan."
-
-#: contrib/auth/models.py:61
-msgid "active"
-msgstr "aktiv"
-
-#: contrib/auth/models.py:62
-msgid "superuser status"
-msgstr "superanvändare"
-
-#: contrib/auth/models.py:63
-msgid "last login"
-msgstr "senaste inloggning"
-
-#: contrib/auth/models.py:64
-msgid "date joined"
-msgstr "registreringsdatum"
-
-#: contrib/auth/models.py:66
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Förutom de rättigheterna som utdelas manuellt så kommer användaren dessutom "
-"få samma rättigheter som de grupper där han/hon är medlem."
-
-#: contrib/auth/models.py:67
-#, fuzzy
-msgid "user permissions"
-msgstr "Rättigheter"
-
-#: contrib/auth/models.py:70
-#, fuzzy
-msgid "user"
-msgstr "Användare"
-
-#: contrib/auth/models.py:71
-#, fuzzy
-msgid "users"
-msgstr "Användare"
-
-#: contrib/auth/models.py:76
-msgid "Personal info"
-msgstr "Personlig information"
-
-#: contrib/auth/models.py:77
-msgid "Permissions"
-msgstr "Rättigheter"
-
-#: contrib/auth/models.py:78
-msgid "Important dates"
-msgstr "Viktiga datum"
-
-#: contrib/auth/models.py:79
-msgid "Groups"
-msgstr "Grupper"
-
-#: contrib/auth/models.py:219
-#, fuzzy
-msgid "message"
-msgstr "Meddelande"
-
-#: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-
-#: contrib/contenttypes/models.py:25
-#, fuzzy
-msgid "python model class name"
-msgstr "pythonmodulnamn"
-
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "innehållstyp"
-
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "innehållstyper"
-
-#: contrib/sessions/models.py:35
-msgid "session key"
-msgstr "sessionsnyckel"
-
-#: contrib/sessions/models.py:36
-msgid "session data"
-msgstr "sessionsdata"
-
-#: contrib/sessions/models.py:37
-msgid "expire date"
-msgstr "utgångsdatum"
-
-#: contrib/sessions/models.py:41
-msgid "session"
-msgstr "session"
-
-#: contrib/sessions/models.py:42
-msgid "sessions"
-msgstr "sessioner"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "domännamn"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "visat namn"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "hemsida"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "hemsidor"
-
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "Y-m-d"
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "Y-m-d, H:i"
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
 #: utils/dates.py:6
 msgid "Monday"
-msgstr "måndag"
+msgstr "MÃ¥ndag"
 
 #: utils/dates.py:6
 msgid "Tuesday"
-msgstr "tisdag"
+msgstr "Tisdag"
 
 #: utils/dates.py:6
 msgid "Wednesday"
-msgstr "onsdag"
+msgstr "Onsdag"
 
 #: utils/dates.py:6
 msgid "Thursday"
-msgstr "torsdag"
+msgstr "Torsdag"
 
 #: utils/dates.py:6
 msgid "Friday"
-msgstr "fredag"
+msgstr "Fredag"
 
 #: utils/dates.py:7
 msgid "Saturday"
-msgstr "lördag"
+msgstr "Lördag"
 
 #: utils/dates.py:7
 msgid "Sunday"
-msgstr "söndag"
+msgstr "Söndag"
 
 #: utils/dates.py:14
 msgid "January"
-msgstr "januari"
+msgstr "Januari"
 
 #: utils/dates.py:14
 msgid "February"
-msgstr "februari"
+msgstr "Februari"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "March"
-msgstr "mars"
+msgstr "Mars"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "April"
-msgstr "april"
+msgstr "April"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "May"
-msgstr "maj"
+msgstr "Maj"
 
 #: utils/dates.py:14 utils/dates.py:27
 msgid "June"
-msgstr "juni"
+msgstr "Juni"
 
 #: utils/dates.py:15 utils/dates.py:27
 msgid "July"
-msgstr "juli"
+msgstr "Juli"
 
 #: utils/dates.py:15
 msgid "August"
-msgstr "augusti"
+msgstr "Augusti"
 
 #: utils/dates.py:15
 msgid "September"
-msgstr "september"
+msgstr "September"
 
 #: utils/dates.py:15
 msgid "October"
-msgstr "oktober"
+msgstr "Oktober"
 
 #: utils/dates.py:15
 msgid "November"
-msgstr "november"
+msgstr "November"
 
 #: utils/dates.py:16
 msgid "December"
 msgstr "december"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "jan"
-msgstr "och"
+msgstr "jan"
 
 #: utils/dates.py:19
 msgid "feb"
-msgstr ""
+msgstr "feb"
 
 #: utils/dates.py:19
 msgid "mar"
-msgstr ""
+msgstr "mars"
 
 #: utils/dates.py:19
 msgid "apr"
-msgstr ""
+msgstr "apr"
 
 #: utils/dates.py:19
-#, fuzzy
 msgid "may"
-msgstr "dag"
+msgstr "maj"
 
 #: utils/dates.py:19
 msgid "jun"
-msgstr ""
+msgstr "juni"
 
 #: utils/dates.py:20
 msgid "jul"
-msgstr ""
+msgstr "juli"
 
 #: utils/dates.py:20
 msgid "aug"
-msgstr ""
+msgstr "aug"
 
 #: utils/dates.py:20
 msgid "sep"
-msgstr ""
+msgstr "sept"
 
 #: utils/dates.py:20
 msgid "oct"
-msgstr ""
+msgstr "okt"
 
 #: utils/dates.py:20
 msgid "nov"
-msgstr ""
+msgstr "nov"
 
 #: utils/dates.py:20
 msgid "dec"
-msgstr ""
+msgstr "dec"
 
 #: utils/dates.py:27
 msgid "Jan."
@@ -1508,8 +2297,8 @@
 #: utils/timesince.py:14
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "vecka"
+msgstr[1] "veckor"
 
 #: utils/timesince.py:15
 msgid "day"
@@ -1529,500 +2318,27 @@
 msgstr[0] "minut"
 msgstr[1] "minuter"
 
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "Bengaliska"
-
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "Tjeckiska"
-
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "Walesiska"
-
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "Danska"
-
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "Tyska"
-
-#: conf/global_settings.py:42
-msgid "Greek"
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
 msgstr ""
 
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "Engelska"
-
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "Spanska"
-
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "Franska"
-
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "Galisiska"
-
-#: conf/global_settings.py:47
-msgid "Hungarian"
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
 msgstr ""
 
-#: conf/global_settings.py:48
-msgid "Hebrew"
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
 msgstr ""
 
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "Isländska"
-
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "Italienska"
-
-#: conf/global_settings.py:51
-msgid "Japanese"
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
 msgstr ""
 
-#: conf/global_settings.py:52
-msgid "Dutch"
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
 msgstr ""
 
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "Norska"
-
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "Brasilianska"
-
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "Rumänska"
-
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "Ryska"
-
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "Slovakiska"
-
-#: conf/global_settings.py:58
-#, fuzzy
-msgid "Slovenian"
-msgstr "Slovakiska"
-
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "Serbiska"
-
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "Svenska"
-
-#: conf/global_settings.py:61
-#, fuzzy
-msgid "Ukrainian"
-msgstr "Brasilianska"
-
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "Förenklad kinesiska"
-
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr ""
-
-#: core/validators.py:60
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Det här värdet får bara innehålla bokstäver, tal och understräck."
-
-#: core/validators.py:64
-#, fuzzy
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Det här värdet får bara innehålla bokstäver, tal, understräck och snedsträck"
-
-#: core/validators.py:72
-msgid "Uppercase letters are not allowed here."
-msgstr "Stora bokstäver är inte tillåtna här."
-
-#: core/validators.py:76
-msgid "Lowercase letters are not allowed here."
-msgstr "Små bokstäver är inte tillåtna här."
-
-#: core/validators.py:83
-msgid "Enter only digits separated by commas."
-msgstr "Fyll enbart i siffror avskillda med kommatecken."
-
-#: core/validators.py:95
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Fyll i giltiga e-postadresser avskillda med kommatecken."
-
-#: core/validators.py:99
-msgid "Please enter a valid IP address."
-msgstr "Var god fyll i ett giltigt IP-nummer."
-
-#: core/validators.py:103
-msgid "Empty values are not allowed here."
-msgstr "Tomma värden är inte tillåtna här."
-
-#: core/validators.py:107
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Icke-numeriska tecken är inte tillåtna här."
-
-#: core/validators.py:111
-msgid "This value can't be comprised solely of digits."
-msgstr "Det här värdet kan inte enbart bestå av siffror."
-
-#: core/validators.py:116
-msgid "Enter a whole number."
-msgstr "Fyll i ett heltal."
-
-#: core/validators.py:120
-msgid "Only alphabetical characters are allowed here."
-msgstr "Endast alfabetiska bokstäver är tillåtna här."
-
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Fyll i ett giltigt datum i formatet Ã…Ã…Ã…Ã…-MM-DD."
-
-#: core/validators.py:128
-msgid "Enter a valid time in HH:MM format."
-msgstr "Fyll i en giltig tid i formatet TT:MM"
-
-#: core/validators.py:132 db/models/fields/__init__.py:468
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr "Fyll i en giltig tidpunkt i formatet Ã…Ã…Ã…Ã…-MM-DD TT:MM"
-
-#: core/validators.py:136
-msgid "Enter a valid e-mail address."
-msgstr "Fyll i en giltig e-postadress."
-
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Ladda upp en giltig bild. Filen du laddade upp var antingen inte en bild, "
-"eller så var det en korrupt bild."
-
-#: core/validators.py:155
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr "Adressen %s pekar inte till en giltig bild."
-
-#: core/validators.py:159
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-"Telefonnummer måste vara i det amerikanska formatet XXX-XXX-XXXX. \"%s\" är "
-"ogiltigt."
-
-#: core/validators.py:167
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "Adressen %s pekar inte till en giltig QuickTime-video."
-
-#: core/validators.py:171
-msgid "A valid URL is required."
-msgstr "En giltig adress krävs."
-
-#: core/validators.py:185
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"Giltig HTML krävs. Specifika fel är:\n"
-"%s"
-
-#: core/validators.py:192
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "Missformad XML: %s"
-
-#: core/validators.py:202
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "Felaktig URL: %s"
-
-#: core/validators.py:206 core/validators.py:208
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "URL:en %s är en trasig länk."
-
-#: core/validators.py:214
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "Fyll i en giltig förkortning för en amerikansk delstat"
-
-#: core/validators.py:229
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Håll i tungan! Ordet %s är inte tillåtet här."
-msgstr[1] "Håll i tungan! Orden %s är inte tillåtna här."
-
-#: core/validators.py:236
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "Det här fältet måste matcha fältet '%s'."
-
-#: core/validators.py:255
-msgid "Please enter something for at least one field."
-msgstr "Fyll i något i minst ett fält."
-
-#: core/validators.py:264 core/validators.py:275
-msgid "Please enter both fields or leave them both empty."
-msgstr "Fyll antingen i båda fälten, eller lämna båda tomma"
-
-#: core/validators.py:282
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Det är fältet måste anges om %(field)s är %(value)s"
-
-#: core/validators.py:294
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Det här fältet måste anges om %(field)s inte är %(value)s"
-
-#: core/validators.py:313
-msgid "Duplicate values are not allowed."
-msgstr "Upprepade värden är inte tillåtna."
-
-#: core/validators.py:336
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "Det här värdet måste vara en multipel av %s."
-
-#: core/validators.py:347
-msgid "Please enter a valid decimal number."
-msgstr "Fyll i ett giltigt decimaltal."
-
-#: core/validators.py:349
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] "Fyll i ett giltigt decimaltal med mindre än %s siffra totalt."
-msgstr[1] "Fyll i ett giltigt decimaltal med mindre än %s siffror totalt."
-
-#: core/validators.py:352
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] "Fyll i ett giltigt decimaltal med som mest %s decimalsiffra."
-msgstr[1] "Fyll i ett giltigt decimaltal med som mest %s decimalsiffror."
-
-#: core/validators.py:362
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Se till att filen du laddade upp är minst %s bytes stor."
-
-#: core/validators.py:363
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Se till att filen du laddade upp är max %s bytes stor."
-
-#: core/validators.py:376
-msgid "The format for this field is wrong."
-msgstr "Formatet på det här fältet är fel."
-
-#: core/validators.py:391
-msgid "This field is invalid."
-msgstr "Det här fältet är ogiltigt."
-
-#: core/validators.py:426
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "Kunde inte hämta något från %s."
-
-#: core/validators.py:429
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-"Adressen %(url)s returnerade det ogiltiga innehållstyphuvudet (Content-Type "
-"header) '%(contenttype)s'"
-
-#: core/validators.py:462
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-"Var god avsluta den oavslutade taggen %(tag)s på rad %(line)s. (Raden börjar "
-"med \"%(start)s\".)"
-
-#: core/validators.py:466
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"En del text från rad %(line)s är inte tillåtet i det sammanhanget. (Raden "
-"börjar med \"%(start)s\".)"
-
-#: core/validators.py:471
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"%(attr)s\" på rad %(line)s är inte ett gilltigt attribut. (Raden startar "
-"med \"%(start)s\".)"
-
-#: core/validators.py:476
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-"\"<%(tag)s>\" på rad %(line)s är inte en giltig tagg. (Raden börjar med \"%"
-"(start)s\".)"
-
-#: core/validators.py:480
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"En tagg på rad %(line)s saknar en eller flera nödvändiga attribut. (Raden "
-"börjar med \"%(start)s\".)"
-
-#: core/validators.py:485
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-"Attributet \"%(attr)s\" på rad %(line)s har ett ogiltigt värde. (Raden "
-"börjar med \"%(start)s\".)"
-
-#: db/models/manipulators.py:302
-#, fuzzy, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(optname)s med det här %(fieldname)s finns redan."
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s med det här %(fieldname)s finns redan."
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "Det här fältet är obligatoriskt."
-
-#: db/models/fields/__init__.py:337
-#, fuzzy
-msgid "This value must be an integer."
-msgstr "Det här värdet måste vara en multipel av %s."
-
-#: db/models/fields/__init__.py:369
-#, fuzzy
-msgid "This value must be either True or False."
-msgstr "Det här värdet måste vara en multipel av %s."
-
-#: db/models/fields/__init__.py:385
-#, fuzzy
-msgid "This field cannot be null."
-msgstr "Det här fältet är ogiltigt."
-
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "Fyll i ett giltigt filnamn."
-
-#: db/models/fields/related.py:43
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Var god fyll i ett giltigt %s."
-
-#: db/models/fields/related.py:579
-#, fuzzy
-msgid "Separate multiple IDs with commas."
-msgstr " Separera flera ID:n med kommatecken."
-
-#: db/models/fields/related.py:581
-#, fuzzy
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Håll ner \"Control\", eller \"Command\" på en Mac, för att välja mer än en."
-
-#: db/models/fields/related.py:625
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Var god och fyll giltiga %(self)s ID. Värdet %(value)r är ogiltigt."
-msgstr[1] ""
-"Var god och fyll giltiga %(self)s ID. Värdena %(value)r är ogiltigt."
-
-#: forms/__init__.py:380
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Se till att din text är kortare än %s tecken."
-msgstr[1] "Se till att din text är kortare än %s tecken."
-
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-msgstr "Radbrytningar är inte tillåtna här."
-
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
-#, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Välj ett giltigt alternativ. '%(data)s' finns inte bland %(choices)s"
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "Den insända filen är tom."
-
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Fyll i ett heltal mellan -32 768 och 32 767."
-
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "Fyll i ett positivt heltal."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Fyll i ett heltal mellan 0 och 32 767."
-
-#: template/defaultfilters.py:379
+#: template/defaultfilters.py:490
 msgid "yes,no,maybe"
 msgstr "ja,nej,kanske"
 
-#~ msgid "Comment"
-#~ msgstr "Kommentar"
-
-#~ msgid "Comments"
-#~ msgstr "Kommentarer"
-
-#~ msgid "String (up to 50)"
-#~ msgstr "Sträng (upp till 50)"
-
-#~ msgid "label"
-#~ msgstr "etikett"
-
-#~ msgid "package"
-#~ msgstr "paket"
-
-#~ msgid "packages"
-#~ msgstr "paket"
-
-#, fuzzy
-#~ msgid "count"
-#~ msgstr "innehåll"

Modified: vendor/django/current/django/conf/locale/sv/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/sv/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/sv/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/sv/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,112 +1,125 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+# Swedish translation of Django
+# Copyright (C) 2005
+# This file is distributed under the same license as the Django package.
 #
+#
+# Robin Sonefors <ozamosi at blinkenlights.se>, 2005.
+# Mikko Hellsing <mikko at sorl.net>, 2007.
 msgid ""
 msgstr ""
-"Project-Id-Version: Django\n"
+"Project-Id-Version: djangojs\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2005-12-04 14:12+0100\n"
-"Last-Translator: Robin Sonefors <ozamosi at blinkenlights.se>\n"
-"Language-Team: Django Translators <Django-I18N at googlegroups.com>\n"
+"POT-Creation-Date: 2007-03-06 02:29+0100\n"
+"PO-Revision-Date: 2007-03-06 10:30+0100\n"
+"Last-Translator: Mikko Hellsing <mikko at sorl.net>\n"
+"Language-Team: Django I18N <Django-I18N at googlegroups.com>\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"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: Swedish\n"
 "X-Poedit-Country: SWEDEN\n"
 
 #: contrib/admin/media/js/SelectFilter2.js:33
 #, perl-format
 msgid "Available %s"
-msgstr ""
+msgstr "Tillgänglig %s"
 
 #: contrib/admin/media/js/SelectFilter2.js:41
-#, fuzzy
 msgid "Choose all"
-msgstr "Välj en tidpunkt"
+msgstr "Välj alla"
 
 #: contrib/admin/media/js/SelectFilter2.js:46
 msgid "Add"
-msgstr ""
+msgstr "Lägg till"
 
 #: contrib/admin/media/js/SelectFilter2.js:48
 msgid "Remove"
-msgstr ""
+msgstr "Ta bort"
 
 #: contrib/admin/media/js/SelectFilter2.js:53
 #, perl-format
 msgid "Chosen %s"
-msgstr ""
+msgstr "Vald %s"
 
 #: contrib/admin/media/js/SelectFilter2.js:54
 msgid "Select your choice(s) and click "
-msgstr ""
+msgstr "Gör dina val och klicka på "
 
 #: contrib/admin/media/js/SelectFilter2.js:59
 msgid "Clear all"
-msgstr ""
+msgstr "Ta bort alla"
 
-#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/dateparse.js:32
 #: contrib/admin/media/js/calendar.js:24
 msgid ""
 "January February March April May June July August September October November "
 "December"
 msgstr ""
+"Januari Februari Mars April Maj Juni Juli Augusti September Oktober November "
+"December"
 
-#: contrib/admin/media/js/dateparse.js:27
+#: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr ""
+msgstr "Söndag Mondag Tisdag Onsdag Torsdag Fredag Lördag"
 
 #: contrib/admin/media/js/calendar.js:25
 msgid "S M T W T F S"
-msgstr ""
+msgstr "S M T O T F L"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr "Visa"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr "Göm"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Now"
 msgstr "Nu"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
 msgid "Clock"
 msgstr "Klocka"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
 msgid "Choose a time"
 msgstr "Välj en tidpunkt"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
 msgid "Midnight"
 msgstr "Midnatt"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
 msgid "6 a.m."
 msgstr "06.00"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Noon"
 msgstr "Mitt på dagen"
 
-#: 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 "Ã…ngra"
+msgstr "Avbryt"
 
-#: 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 "Idag"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
 msgid "Calendar"
 msgstr "Kalender"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
 msgid "Yesterday"
 msgstr "Igår"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
 msgid "Tomorrow"
 msgstr "Imorgon"
+

Modified: vendor/django/current/django/conf/locale/ta/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/ta/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/ta/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ta/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,20 +1,21 @@
-# translation of django.po to 
-# translation of django_aa.po to
-# translation of django_aa.po to tamil
-# Parthan <parthan at au-kbc.org>, 2006.
-# R Hariram Aatreya <rha at localhost.localdomain>, 2006.
+# translation of django-new.po to tamil
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# PONNUSAMY.A <ponnusamy.simpleman at gmail.com>, 2007.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: django\n"
+"Project-Id-Version: django-new\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:14+0200\n"
-"PO-Revision-Date: 2006-07-18 16:47+0530\n"
-"Last-Translator: R Hariram Aatreya <rha at localhost.localdomain>\n"
-"Language-Team:  <en at li.org>\n"
+"POT-Creation-Date: 2006-09-25 15:43+0200\n"
+"PO-Revision-Date: 2007-03-15 16:48+0530\n"
+"Last-Translator: PONNUSAMY <ponnusamy.simpleman at gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.9\n"
+"Language-Team: tamil <tamilinix at yahoogroups.com>\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n>1;"
 
 #: contrib/comments/models.py:67 contrib/comments/models.py:166
 msgid "object ID"
@@ -67,15 +68,15 @@
 
 #: contrib/comments/models.py:83 contrib/comments/models.py:169
 msgid "date/time submitted"
-msgstr "தேதிநேரம் சமர்ப்பிக்கப்பட்டுள்ளது"
+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:289
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
 msgid "IP address"
-msgstr "ip விலாசம்"
+msgstr "IP விலாசம்"
 
 #: contrib/comments/models.py:86
 msgid "is removed"
@@ -85,7 +86,7 @@
 msgid ""
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
-msgstr "குறிப்பு செரியாக இல்லையென்றால் இந்த் பெட்டியில் குறியிடவும். இதற்கு பதிலாக \"இந்த குறிப்பு நீக்கபட்டது\" காண்பிக்கபடும்."
+msgstr "குறிப்பு சரியாக இல்லையென்றால் இந்த பெட்டியில் குறியிடவும். இதற்கு பதிலாக \"இந்த குறிப்பு நீக்கபட்டது\" காண்பிக்கபடும்."
 
 #: contrib/comments/models.py:91
 msgid "comments"
@@ -128,15 +129,15 @@
 
 #: contrib/comments/models.py:177
 msgid "free comments"
-msgstr "சுதந்தரமான குறிப்பு"
+msgstr "சுதந்தரமான குறிப்புகள்"
 
 #: contrib/comments/models.py:233
 msgid "score"
-msgstr "மதிப்பீடு"
+msgstr "மதிப்பீடு "
 
 #: contrib/comments/models.py:234
 msgid "score date"
-msgstr "மதிப்பீடு தேதி"
+msgstr "மதிப்பீட்டு தேதி"
 
 #: contrib/comments/models.py:237
 msgid "karma score"
@@ -189,7 +190,7 @@
 
 #: contrib/comments/models.py:281
 msgid "moderator deletions"
-msgstr "மட்டொறுத்தால் நீக்கப்பட்டது"
+msgstr "மட்டொறுத்தர்களால் நீக்கப்பட்டது"
 
 #: contrib/comments/models.py:285
 #, python-format
@@ -198,7 +199,7 @@
 
 #: contrib/comments/views/karma.py:19
 msgid "Anonymous users cannot vote"
-msgstr "அடயாள்ம் இல்லாத பயனாளறால் வாக்களிக்க முடியாது"
+msgstr "அடையாளம் இல்லாத பயனாளறால் வாக்களிக்க முடியாது"
 
 #: contrib/comments/views/karma.py:23
 msgid "Invalid comment ID"
@@ -208,85 +209,82 @@
 msgid "No voting for yourself"
 msgstr "உங்களை நீங்களே தேர்வு செய்து கொள்ள முடியாது"
 
-#: contrib/comments/views/comments.py:28
+#: contrib/comments/views/comments.py:27
 msgid "This rating is required because you've entered at least one other rating."
-msgstr "மற்றொரு தரவரிசை அளிக்க்பட்டதால் இந்த தரவரிசை தேவைப்படுகிறது."
+msgstr "இந்த தரவரிசை தேவைப்படுகிறது ஏனெனில் மற்றொரு தரவரிசை அளிக்கப்பட்டு விட்டதால்"
 
-#: contrib/comments/views/comments.py:112
+#: contrib/comments/views/comments.py:111
 #, python-format
 msgid ""
 "This comment was posted by a user who has posted fewer than %(count)s "
 "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 ""
-"%(count)s குறைவாக அளித்த பயனாளரால் இந்த குரிப்பை அள்த்தபடது:\n"
+msgstr[0] ""
+"இந்த குறிப்பானது குறைவாக அளித்த பயனாளரால் %(count)s "
+"அளிக்கப்பட்டது:\n"
 "\n"
 "%(text)s"
-"%(count)s குறைவாக அளித்த பயனாளரால் இந்த குரிப்பை அள்த்தபடது:\n"
+msgstr[1] ""
+"இந்த குறிப்பானது குறைவாக அளித்த பயனாளர்களால் %(count)s"
+" அளிக்கப்பட்டது:\n"
 "\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:117
+
+#: contrib/comments/views/comments.py:116
 #, python-format
 msgid ""
 "This comment was posted by a sketchy user:\n"
 "\n"
 "%(text)s"
 msgstr ""
-"முழுமையான விவரஙகளை அளிக்காத பயனாளறால் கொடுக்கப்பட்டது:\n"
+"முழுமையான விவரங்களை அளிக்காத பயனாளரால் கொடுக்கப்பட்டது:\n"
+"\n"
 "%(text)s"
 
-#: contrib/comments/views/comments.py:189
+#: contrib/comments/views/comments.py:188
 #: contrib/comments/views/comments.py:280
 msgid "Only POSTs are allowed"
 msgstr "POSTகளுக்கு மட்டும் அனுமதி உண்டு"
 
-#: contrib/comments/views/comments.py:193
+#: contrib/comments/views/comments.py:192
 #: contrib/comments/views/comments.py:284
 msgid "One or more of the required fields wasn't submitted"
 msgstr "ஒன்று அல்லது ஒன்றிற்கு மேற்ப்பட்ட புலங்கள் சமற்பிக்கப்படவில்லை"
 
-#: contrib/comments/views/comments.py:197
+#: contrib/comments/views/comments.py:196
 #: contrib/comments/views/comments.py:286
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr "எவறோ குரிப்புறையை செதப்படுத்திவிட்டாற்கள் (பாதுகாப்பு மீறல்)"
+msgstr "எவறோ குறிப்புறையைச்  சேதப்படுத்திவிட்டர்கள் (பாதுகாப்பு மீறல்)"
 
-#: contrib/comments/views/comments.py:207
+#: contrib/comments/views/comments.py:206
 #: contrib/comments/views/comments.py:292
 msgid ""
 "The comment form had an invalid 'target' parameter -- the object ID was "
 "invalid"
-msgstr "குறிப்புறை படிவத்தில் முறையான இலக்கு அளவுருக்க இல்லை -- object ID முறையானதாக இல்லை"
+msgstr "குறிப்புறை படிவத்தில் முறையான இலக்கு அளவுருக்கவில்லை -- object ID முறையானதாக இல்லை"
 
 #: contrib/comments/views/comments.py:257
 #: contrib/comments/views/comments.py:321
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "குறிப்பு படிவம் முன்னோட்டம் அல்லது பிற்பட்டதை வழங்கவில்லை."
+msgstr "குறிப்பு படிவம் முன்னோட்டம் அல்லது பிற்பட்டதை வழங்குவது இல்லை"
 
 #: contrib/comments/templates/comments/form.html:6
 #: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/login.html:17
 msgid "Username:"
-msgstr "பயணர் பெயர்:"
+msgstr "பயனர் பெயர்:"
 
 #: contrib/comments/templates/comments/form.html:6
-#: contrib/admin/templates/admin/login.html:20
-msgid "Password:"
-msgstr "கடவுச்சொல்:"
-
-#: contrib/comments/templates/comments/form.html:6
-msgid "Forgotten your password?"
-msgstr "கடவுச்சொல்லை மறந்துவிட்டீரா?"
-
-#: contrib/comments/templates/comments/form.html:8
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -304,6 +302,15 @@
 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 "விகிதம்"
@@ -311,7 +318,7 @@
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
 msgid "Required"
-msgstr "தேவைப்படுகிறது "
+msgstr "தேவைப்படுகிறது"
 
 #: contrib/comments/templates/comments/form.html:12
 #: contrib/comments/templates/comments/form.html:23
@@ -320,88 +327,21 @@
 
 #: contrib/comments/templates/comments/form.html:23
 msgid "Post a photo"
-msgstr "புகைப்படத்தை அணுப்பு"
+msgstr "புகைப்படத்தை அனுப்பு"
 
-#: contrib/comments/templates/comments/form.html:27
+#: contrib/comments/templates/comments/form.html:28
 #: contrib/comments/templates/comments/freeform.html:5
 msgid "Comment:"
 msgstr "விவரம்:"
 
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# translation of django_ab.po to
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# R Hariram Aatreya <rha at localhost.localdomain>, 2006.
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
 msgid "Preview comment"
 msgstr "குறிப்பை முன்னேற்றமிடு"
 
 #: contrib/comments/templates/comments/freeform.html:4
 msgid "Your name:"
-msgstr "உங்கள்பெயர்:"
+msgstr "உங்கள் பெயர்:"
 
 #: contrib/admin/filterspecs.py:40
 #, python-format
@@ -413,9 +353,9 @@
 "<ul>\n"
 
 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
-#: contrib/admin/filterspecs.py:143
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
 msgid "All"
-msgstr "அணைத்தும்"
+msgstr "அனைத்தும்"
 
 #: contrib/admin/filterspecs.py:109
 msgid "Any date"
@@ -423,7 +363,7 @@
 
 #: contrib/admin/filterspecs.py:110
 msgid "Today"
-msgstr "இண்று"
+msgstr "இன்று"
 
 #: contrib/admin/filterspecs.py:113
 msgid "Past 7 days"
@@ -475,230 +415,295 @@
 
 #: contrib/admin/models.py:26
 msgid "log entries"
-msgstr "புகுபதிவு உள்ளீடு"
+msgstr "புகுபதிவு உள்ளீடுகள்"
 
-#: contrib/admin/templatetags/admin_list.py:228
+#: contrib/admin/templatetags/admin_list.py:230
 msgid "All dates"
 msgstr "அனைத்து தேதியும்"
 
-#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
-#: contrib/auth/forms.py:41
+#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
-msgstr "தயவுசெய்து சரியான பயனர்பபெயர் மற்றும் கடவுச்சொல்லை உள்ள்ளிடவும். இரண்டும் எழுத்துவகையை சார்ந்தது."
+msgstr "தயவுசெய்து சரியான பயனர்ப்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும். இரண்டும் எழுத்துவகையைச் சார்ந்தது."
 
-#: contrib/admin/views/decorators.py:23
+#: contrib/admin/views/decorators.py:24
 #: contrib/admin/templates/admin/login.html:25
 msgid "Log in"
 msgstr "உள்ளே போ"
 
-#: contrib/admin/views/decorators.py:61
+#: contrib/admin/views/decorators.py:62
 msgid ""
 "Please log in again, because your session has expired. Don't worry: Your "
 "submission has been saved."
-msgstr "தயவுசெய்து மறுபடியும் புகுபதிவு செய். ஏனென்றாள் காலம் முடிவடைந்தவு. கவலை படவேண்டாம்: உங்களுடைய அணுப்புதல் சேமிக்கப்பட்டுள்ளது. "
+msgstr "தயவுசெய்து மறுபடியும் புகுபதிவு செய்க. ஏனென்றால் காலம் முடிவடைந்தது. கவலை படவேண்டாம்: உங்களுடைய அனுப்புதல் சேமிக்கப்பட்டுள்ளது."
 
-#: contrib/admin/views/decorators.py:68
+#: contrib/admin/views/decorators.py:69
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
-msgstr "உங்களுடைய உலாவி தற்கால நிரல்களை அணுமதிக்காதவாறு உள்ளமைக்கப் பட்டவாறு தெரிகிறது. தயவுசெய்து தற்காலிக நிரலை செயல்பட செய்து, பக்கத்தை மறுபடி உள்ள்வாங்கவும்."
+msgstr "உங்களுடைய உலாவி தற்கால நிரல்களை அமதிக்காதவாறு உள்ளமைக்கப் பட்டவாறு தெரிகிறது. தயவுசெய்து தற்காலிக நிரலை செயல்பட செய்து, பக்கத்தை மறுபடி உள் வாங்கவும். "
 
-#: contrib/admin/views/decorators.py:82
+#: contrib/admin/views/decorators.py:83
 msgid "Usernames cannot contain the '@' character."
 msgstr "பயனர் பெயர் '@' குறியீட்டை கொண்டிருக்க முடியாது."
 
-#: contrib/admin/views/decorators.py:84
+#: contrib/admin/views/decorators.py:85
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "உன்கள் மிண்அஞ்சள் முகவரிஉங்கள் பயனர் பெயர் இல்லை. '%s'  யை முயற்ச்சி செய்யவும். "
+msgstr "உங்கள் மின் அஞ்சல் முகவரி உங்கள் பயனர் பெயராக இல்லை. '%s'யை முயற்சி செய்யவும்."
 
-#: contrib/admin/views/main.py:226
+#: contrib/admin/views/main.py:223
 msgid "Site administration"
-msgstr "இணைய மேளான்மை"
+msgstr "இணைய மேலான்மை"
 
-#: contrib/admin/views/main.py:260
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக சேர்க்கப்பட்டது."
+msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாகச் சேர்க்கப்பட்டது."
 
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:22
 msgid "You may edit it again below."
 msgstr "நீங்கள் மறுபடியும் தொகுக்க முடியும். "
 
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
 #, python-format
 msgid "You may add another %s below."
 msgstr "நீங்கள் மற்ற %s யை கீழே சேர்க்க முடியும்."
 
-#: contrib/admin/views/main.py:290
+#: contrib/admin/views/main.py:289
 #, python-format
 msgid "Add %s"
-msgstr "%s யை சேர்"
+msgstr "%s யை சேர்க்க"
 
-#: contrib/admin/views/main.py:336
+#: contrib/admin/views/main.py:335
 #, python-format
 msgid "Added %s."
 msgstr "%s சேர்க்கப்பட்டுள்ளது."
 
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339
 msgid "and"
 msgstr "மற்றும்"
 
-#: contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:337
 #, python-format
 msgid "Changed %s."
-msgstr "%s மாற்றப்பட்டுள்ளது."
+msgstr "%s மாற்றபட்டுள்ளது."
 
-#: contrib/admin/views/main.py:340
+#: contrib/admin/views/main.py:339
 #, python-format
 msgid "Deleted %s."
 msgstr "%s அழிக்கப்பட்டது."
 
-#: contrib/admin/views/main.py:343
+#: contrib/admin/views/main.py:342
 msgid "No fields changed."
 msgstr "எந்த புலமும் மாறவில்லை."
 
-#: contrib/admin/views/main.py:346
+#: contrib/admin/views/main.py:345
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr " %(name)s \"%(obj)s\" வெற்றிகரமாக மாற்றப்பட்டது."
+msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக மாற்றப்பட்டது."
 
-#: contrib/admin/views/main.py:354
+#: contrib/admin/views/main.py:353
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக சேர்க்கப்பட்டுள்ளது. நீங்கள் கீழே தொகுக்க முடியும்."
 
-#: contrib/admin/views/main.py:392
+#: contrib/admin/views/main.py:391
 #, python-format
 msgid "Change %s"
 msgstr "%s யை மாற்று"
 
-#: contrib/admin/views/main.py:470
+#: contrib/admin/views/main.py:473
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "%(name)s ல் உள்ள %(fieldname)s: %(obj)s"
 
-#: contrib/admin/views/main.py:475
+#: contrib/admin/views/main.py:478
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "%(name)s ல் உள்ள %(fieldname)s:"
 
-#: contrib/admin/views/main.py:508
+#: contrib/admin/views/main.py:511
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" வெற்றிகரமாக அழிக்கப்பட்டுள்ளது."
 
-#: contrib/admin/views/main.py:511
+#: contrib/admin/views/main.py:514
 msgid "Are you sure?"
-msgstr "உறுதியாக சொகிறீர்களா?"
+msgstr "உறுதியாக சொல்கிறீர்களா?"
 
-#: contrib/admin/views/main.py:533
+#: contrib/admin/views/main.py:536
 #, python-format
 msgid "Change history: %s"
 msgstr "வரலாற்றை மாற்று: %s"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s"
 msgstr "%s யை தேர்ந்தெடு"
 
-#: contrib/admin/views/main.py:565
+#: contrib/admin/views/main.py:570
 #, python-format
 msgid "Select %s to change"
 msgstr "%s யை மாற்ற தேர்ந்தெடு"
 
-#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
-#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
-#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "தகவல்சேமிப்பு  பிழை"
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "ஒட்டு:"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "வடிகட்டி:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "நோற்றமிடு:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "பக்கம் %r இல்லை"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "மாதரி %r பக்கம் %rல் இல்லை "
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "சம்மந்தப்பட்ட '%s.%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 "மாதிரி:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "மாதரி %s பக்கம் %s ல் இல்லை"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "அனைத்து %s "
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "எண்ணிக்கை %s"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "புலத்தின் %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 "முழு எண்"
 
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:292
 msgid "Boolean (Either True or False)"
 msgstr "பூலியன் (சரி அல்லது தவறு)"
 
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
 #, python-format
 msgid "String (up to %(maxlength)s)"
 msgstr "உரை (%(maxlength)s வரைக்கும்)"
 
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:294
 msgid "Comma-separated integers"
 msgstr "கமாவாள் பிரிக்கப்பட்ட முழு எண்"
 
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:295
 msgid "Date (without time)"
 msgstr "தேதி (நேரமில்லாமல்)"
 
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:296
 msgid "Date (with time)"
 msgstr "தேதி (நேரமுடன்)"
 
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:297
 msgid "E-mail address"
 msgstr "மின் அஞ்சல்"
 
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
 msgid "File path"
-msgstr "கோப்ப்பு பாதை"
+msgstr "கோப்புப் பாதை"
 
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:300
 msgid "Decimal number"
-msgstr "புள்ளி எண்கள்"
+msgstr "தசம எண்கள்"
 
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:306
 msgid "Boolean (Either True, False or None)"
 msgstr "இலக்கு முறை (சரி, தவறு அல்லது ஒன்றும் இல்லை)"
 
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:307
 msgid "Relation to parent model"
 msgstr "ஆதி மாதிரிக்கு தொடர்புடையது"
 
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:308
 msgid "Phone number"
 msgstr "தொலைபேசி எண்"
 
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:313
 msgid "Text"
 msgstr "உரை"
 
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:314
 msgid "Time"
 msgstr "நேரம்"
 
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:316
 msgid "U.S. state (two uppercase letters)"
-msgstr "U.S. மாநிலம் (இரண்டு மேல் எழுத்துவகை எழுத்து)"
+msgstr "U.S. மாநிலம் (இரண்டு மேல் எழுத்துவகை எழுத்து"
 
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:317
 msgid "XML text"
 msgstr "XML உரை"
 
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s -ல் urlpattern தோன்றுவதில்லை"
+
+#: contrib/admin/views/auth.py:28
+msgid "Add user"
+msgstr "புதிய பயனர்"
+
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
-msgstr "ஆவணமாக்கம்"
+msgstr "ஆவனமாக்கம்"
 
-# translation of django_ac.po to
-# translation of django_ac.po to tamil
-# Ashwin <ashwin at au-kbc.org>, 2006.
-# R Hariram Aatreya <rha at localhost.localdomain>, 2006.
 #: contrib/admin/templates/admin/object_history.html:3
 #: contrib/admin/templates/admin/change_list.html:5
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:3
 #: contrib/admin/templates/admin/change_form.html:10
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -714,14 +719,15 @@
 #: contrib/admin/templates/admin_doc/index.html:4
 #: contrib/admin/templates/admin_doc/model_index.html:5
 msgid "Change password"
-msgstr "கடவுச்சொல்லை மாற்று "
+msgstr "கடவுச்சொல்லை மாற்று"
 
 #: contrib/admin/templates/admin/object_history.html:5
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/change_list.html:6
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:30
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/logged_out.html:4
@@ -757,7 +763,7 @@
 "This object doesn't have a change history. It probably wasn't added via this "
 "admin site."
 msgstr ""
-"இந்த பொருள் மாற்ற வரலாற்றில் இல்லை"
+"இந்த பொருள் மாற்று வரலாற்றில் இல்லை"
 "ஒரு வேளை நிர்வாகத்தளத்தின் மூலம் சேர்க்கப்படாமலிருக்கலாம்"
 
 #: contrib/admin/templates/admin/base_site.html:4
@@ -786,36 +792,39 @@
 "mail and should be fixed shortly. Thanks for your patience."
 msgstr ""
 "தவறு ஏற்பட்டுள்ளது"
-"வலைத்தள நிர்வாகிக்கு மின்னஞ்சல் அனுப்பப்பட்டுள்ளது. விரைவில் சரி செய்யப்படும். உங்க்ளது பொறுமைக்கு நன்றி"
+"வலைத்தள நிர்வாகிக்கு மின்னஞ்சல் அனுப்பப்பட்டுள்ளது. விரைவில் சரி செய்யப்படும். உங்களது பொறுமைக்கு நன்றி"
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
-msgstr "பக்கத்தை காணவில்லை"
+msgstr "பக்கத்தைக் காணவில்லை"
 
 #: contrib/admin/templates/admin/404.html:10
 msgid "We're sorry, but the requested page could not be found."
-msgstr ""
-"நீங்கள் விரும்பிய பக்கத்தை காண இயலவில்லை. "
-"அதற்காக வருந்துகிறோம்."
+msgstr "நீங்கள் விரும்பிய பக்கத்தை காண இயலவில்லை,அதற்காக நாங்கள் வருந்துகிறோம்."
 
 #: contrib/admin/templates/admin/index.html:17
 #, python-format
 msgid "Models available in the %(name)s application."
 msgstr "செயலியில் கிடைக்கக் கூடிய  %(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 "சேர்"
+msgstr "சேர்க்க"
 
 #: contrib/admin/templates/admin/index.html:34
 msgid "Change"
-msgstr "மாற்று"
+msgstr "மாற்றுக"
 
 #: contrib/admin/templates/admin/index.html:44
 msgid "You don't have permission to edit anything."
-msgstr "உங்களுக்கு மாற்றுவதற்கு உரிமையில்லை"
+msgstr "உங்களுக்கு மாற்றுவதற்குரிய உரிமையில்லை"
 
 #: contrib/admin/templates/admin/index.html:52
 msgid "Recent Actions"
@@ -832,58 +841,80 @@
 #: contrib/admin/templates/admin/change_list.html:11
 #, python-format
 msgid "Add %(name)s"
-msgstr "%(name)s சேர்"
+msgstr "%(name)s சேர்க்க"
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
 msgstr "நீங்கள் தங்களது கடவுச்சொல்லை  <a href=\"/password_reset/\"> மறந்து விட்டீர்களா?"
 
-#: contrib/admin/templates/admin/base.html:23
+#: contrib/admin/templates/admin/base.html:25
 msgid "Welcome,"
 msgstr "நல்வரவு,"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:9
 #: contrib/admin/templates/admin/submit_line.html:3
 msgid "Delete"
-msgstr "நீக்கு"
+msgstr "நீக்குக"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:14
 #, python-format
 msgid ""
-"Deleting the %(object_name)s '%(object)s' would result in deleting related "
-"objects, but your account doesn't have permission to delete the following "
-"types of objects:"
-msgstr "இந்த '%(object)s' இல் %(object_name)s நீக்குவது தொடர்புடைய மற்றவற்றையும் நீக்கும். ஆனால் அதற்கு உங்களுக்கு  உரிமையில்லை"
+"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 "நீக்கும் '%(escaped_object)s' ஆனது %(object_name)s தொடர்புடைய மற்றவற்றையும் நீக்கும். ஆனால்  அதை நீக்குவதற்குரிய  உரிமை  உங்களுக்கு  இல்லை"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:21
 #, python-format
 msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
 msgstr ""
-"நீங்கள் இந்த \"%(object)s\" %(object_name)s நீக்குவதில் நிச்சயமா?"
+"நீங்கள் இந்த \"%(escaped_object)s\" %(object_name)s நீக்குவதில் நிச்சயமா?"
 "தொடர்புடைய மற்றவையும் நீக்கப்படும். "
 
 #: contrib/admin/templates/admin/delete_confirmation.html:26
 msgid "Yes, I'm sure"
-msgstr "ஆம் எனக்கு உறுதி "
+msgstr "ஆம், எனக்கு உறுதி"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
-msgid " By %(title)s "
-msgstr "%(title)s ஆல் "
+msgid " By %(filter_title)s "
+msgstr "%(filter_title)s ஆல்"
 
 #: 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] "1 விடை"
+msgstr[1] "%(counter)s விடைகள்"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s மொத்தம்"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "எல்லாவற்றையும் காட்டு"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "வடிகட்டி"
+
 #: contrib/admin/templates/admin/change_form.html:21
 msgid "View on site"
-msgstr "தள்த்தில் பார் "
+msgstr "தளத்தில் பார்"
 
 #: contrib/admin/templates/admin/change_form.html:30
 msgid "Please correct the error below."
-msgstr "கீழே உள்ள தவறுகளைத்திருத்து"
+msgid_plural "Please correct the errors below."
+msgstr[0] "கீழே உள்ள தவறுயைத் திருத்துக"
+msgstr[1] "கீழே உள்ள தவறுகளைத் திருத்துக"
 
 #: contrib/admin/templates/admin/change_form.html:48
 msgid "Ordering"
@@ -891,7 +922,7 @@
 
 #: contrib/admin/templates/admin/change_form.html:51
 msgid "Order:"
-msgstr "வரிசைப்படுத்து"
+msgstr "வரிசைப்படுத்து:"
 
 #: contrib/admin/templates/admin/submit_line.html:4
 msgid "Save as new"
@@ -907,23 +938,52 @@
 
 #: contrib/admin/templates/admin/submit_line.html:7
 msgid "Save"
-msgstr "சேமி"
+msgstr "சேமிக்க"
 
+#: contrib/admin/templates/admin/invalid_setup.html:8
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr "உங்களுடைய தகவல்சேமிப்பகத்தை  நிறுவுவதில் சில தவறுகள் உள்ளது. அதற்கு இணையான தகவல்சேமிப்பு அட்டவணையை" "தயாரிக்கவும். மேலும் பயனர் படிக்கும்  படியான தகவல்சேமிப்பகத்தை உருவாக்கவும்."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:6
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr "முதலில்,பயனர்ப்பெயர் மற்றும் கடவுச்சொல்லை உள்ளிடவும்.அதன் பிறகு தான் நீங்கள் உங்கள் பெயரின் விவரங்களை திருத்த முடியும்"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "பயனர்ப்பெயர்"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "கடவுச்சொல்"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "கடவுச்சொல்(மறுபடியும்)"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr "மேலே அதே கடவுச்சொல்லை உள்ளிடவும், சரிபார்ப்பதற்காக ."
+
 #: contrib/admin/templates/registration/password_change_done.html:4
 #: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admin/templates/registration/password_change_form.html:6
 #: contrib/admin/templates/registration/password_change_form.html:10
 msgid "Password change"
-msgstr "கடவுச்சொல் மாற்றம்"
+msgstr "கடவுச்சொல் மாற்று"
 
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
 msgid "Password change successful"
-msgstr "கடவுச்சொல் மாற்றம் வெற்றி "
+msgstr "வெற்றிகரமாக கடவுச்சொல் மாற்றபட்டது"
 
 #: contrib/admin/templates/registration/password_change_done.html:12
 msgid "Your password was changed."
-msgstr "உங்கள் கடவுச்சொல் மாற்றப் பட்டுள்ளது"
+msgstr "உங்களுடைய கடவுச்சொல் மாற்றபட்டது"
 
 #: contrib/admin/templates/registration/password_reset_form.html:4
 #: contrib/admin/templates/registration/password_reset_form.html:6
@@ -937,10 +997,8 @@
 "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:"
@@ -952,9 +1010,7 @@
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
-"வலைத்தளத்தில் உங்களது பொன்னான நேரத்தை "
-"செலவழித்தமைக்கு மிகுந்த நன்றி"
+msgstr "வலைத்தளத்தில் உங்களது பொன்னான நேரத்தை செலவழித்தமைக்கு மிகுந்த நன்றி"
 
 #: contrib/admin/templates/registration/logged_out.html:10
 msgid "Log in again"
@@ -970,9 +1026,7 @@
 "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:12
@@ -991,7 +1045,7 @@
 
 #: contrib/admin/templates/registration/password_change_form.html:21
 msgid "Confirm password:"
-msgstr "கடவுச்சொல் மாற்றத்தை உறுதிப்படுத்து:"
+msgstr "கடவுச்சொலின் மாற்றத்தை உறுதிப்படுத்து:"
 
 #: contrib/admin/templates/registration/password_change_form.html:23
 msgid "Change my password"
@@ -1009,7 +1063,7 @@
 #: contrib/admin/templates/registration/password_reset_email.html:5
 #, python-format
 msgid "Your new password is: %(new_password)s"
-msgstr "உங்களது  புதிய  கடவுச்சொல் : %(new_password)s "
+msgstr "உங்களது  புதிய  கடவுச்சொல் : %(new_password)s"
 
 #: contrib/admin/templates/registration/password_reset_email.html:7
 msgid "Feel free to change this password by going to this page:"
@@ -1017,7 +1071,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:11
 msgid "Your username, in case you've forgotten:"
-msgstr "உங்களது பயனாளர் பெயர், (நீங்கள் மறந்திருந்தால் ): "
+msgstr "உங்களது பயனாளர் பெயர், நீங்கள் மறந்திருந்தால்:"
 
 #: contrib/admin/templates/registration/password_reset_email.html:13
 msgid "Thanks for using our site!"
@@ -1026,78 +1080,15 @@
 #: contrib/admin/templates/registration/password_reset_email.html:15
 #, python-format
 msgid "The %(site_name)s team"
-msgstr "இந்த %(site_name)s -இன்  குழு "
+msgstr "இந்த %(site_name)s -இன்  குழு"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
 msgstr "புத்தகக்குறிகள்"
 
-# translation of django_ad.po to
-# translation of django_ad.po to
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# aukbc-guest, 2006.
-# R Hariram Aatreya <rha at localhost.localdomain>, 2006.
 #: contrib/admin/templates/admin_doc/bookmarklets.html:5
 msgid "Documentation bookmarklets"
-msgstr "ஆவணமாக்கக் குறியீடு"
+msgstr "ஆவணமாக்கக் குறியீடுகள்"
 
 #: contrib/admin/templates/admin_doc/bookmarklets.html:9
 msgid ""
@@ -1111,9 +1102,9 @@
 msgstr ""
 "\n"
 "<p class=\"help\"> புத்தக குறியீடுகளை நிறுவ இந்த இணைப்பினை புத்தகக்குறியீட்டுப் \n"
-"பட்டைக்கு இழுக்கவும். அல்லது வலது கிிளிக செய்து புத்தகக்குறியீடுகளில் சேர்க்கவும். \n"
+"பட்டைக்கு இழுக்கவும். அல்லது வலது கிளிக் செய்து புத்தகக்குறியீடுகளில் சேர்க்கவும். \n"
 " இனி தளத்தில் எந்தப் பக்கத்தில் இருந்தும் புத்தகக்குறியீட்டினை தேர்வுசெய்ய முடியும். \n"
-" நீங்கள் இந்த தளத்தை  \"internal\" என  குுறிக்கப்பட்ட கணிணியில் இருந்து மட்டுமே \n"
+" நீங்கள் இந்த தளத்தை  \"internal\" என  குறிக்கப்பட்ட கணிணியில் இருந்து மட்டுமே \n"
 " ஒருசில புத்தகக்குறிகளை செயல்படுத்தமுடியும்\n "
 " உங்களுக்கு, கணிணி  \"internal\" என உறுதி செய்ய கணிணிமேளாலரை அணுகவும்.</p>\n"
 
@@ -1192,17 +1183,17 @@
 "'http://'."
 msgstr "இது முழுமையான பாதையாக (மேலே உள்ளது போல) அல்லது  \"http\"//\" என தொடங்கும் வலை  முகவரியாக இருக்கலாம்."
 
-#: contrib/redirects/models.py:12
+#: contrib/redirects/models.py:13
 msgid "redirect"
 msgstr "திரும்ப அனுப்பு"
 
-#: contrib/redirects/models.py:13
+#: contrib/redirects/models.py:14
 msgid "redirects"
 msgstr "திரும்ப அனுப்புகிறது. "
 
 #: contrib/flatpages/models.py:8
 msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "உதாரணம்: '/about/contact/'. முன்னும் பின்னும் '/' உள்ளதை உறுதி செய்க. "
+msgstr "உதாரணம்: '/about/contact/'. முன்னும் பின்னும் '/' உள்ளதை உறுதி செய்க."
 
 #: contrib/flatpages/models.py:9
 msgid "title"
@@ -1222,8 +1213,8 @@
 
 #: contrib/flatpages/models.py:13
 msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
 msgstr "உதாரணம்  'flatpages/contact_page'. இது இல்லையெனில் 'flatpages/default' என்பதே பயன்படுத்தப்படும்.ப்படும்."
 
 #: contrib/flatpages/models.py:14
@@ -1242,151 +1233,179 @@
 msgid "flat pages"
 msgstr "எளிய பக்கங்கள்"
 
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "வெளியே வந்துவீட்டீர்"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
 msgid "name"
 msgstr "பெயர்"
 
-#: contrib/auth/models.py:15
+#: contrib/auth/models.py:40
 msgid "codename"
 msgstr "குறிமுறை பெயர்"
 
-#: contrib/auth/models.py:17
+#: contrib/auth/models.py:42
 msgid "permission"
 msgstr "அனுமதி"
 
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
 msgid "permissions"
 msgstr "அனுமதிகள்"
 
-#: contrib/auth/models.py:29
+#: contrib/auth/models.py:60
 msgid "group"
 msgstr "குழு"
 
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
 msgid "groups"
 msgstr "குழுக்கள்"
 
-#: contrib/auth/models.py:55
+#: contrib/auth/models.py:90
 msgid "username"
 msgstr "பயனர் பெயர்"
 
-#: contrib/auth/models.py:56
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr "தேவை. 30 எழுத்துகள் அல்லது கொஞ்சம். அகர வரிசை எழுத்துக்கள் மட்டுமே ( எழுத்துகள்,எண்கள்,அன்டர்ஸ்கோர்). "
+
+#: contrib/auth/models.py:91
 msgid "first name"
 msgstr "முதல் பெயர்"
 
-#: contrib/auth/models.py:57
+#: contrib/auth/models.py:92
 msgid "last name"
 msgstr "கடைசி பெயர்"
 
-#: contrib/auth/models.py:58
+#: contrib/auth/models.py:93
 msgid "e-mail address"
 msgstr "மின்னஞ்சல் முகவரி"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "password"
 msgstr "கடவுச்சொல்"
 
-#: contrib/auth/models.py:59
+#: contrib/auth/models.py:94
 msgid "Use '[algo]$[salt]$[hexdigest]'"
 msgstr "பயன்படுத்து '[algo]$[salt]$[hexdigest]'"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "staff status"
 msgstr "பணியாளர் நிலை"
 
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:95
 msgid "Designates whether the user can log into this admin site."
-msgstr "பயனர், 'மேலாளலர்' பக்கத்தில் நுழை்ழைவதை முடிவு செய்கிறது "
+msgstr "பயனர், 'மேலாளலர்' பக்கத்தில் நுழைவதை முடிவு செய்கிறது"
 
-#: contrib/auth/models.py:61
+#: contrib/auth/models.py:96
 msgid "active"
 msgstr "செயல்படும்"
 
-#: contrib/auth/models.py:62
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"பயனர்,டிஜாங்ஙோ 'மேலாளலர்' பக்கத்தில் நுழைவதை முடிவு செய்கிறது . இதை தேர்வு செய்யப்படாத கணக்கு உடனடியாக"
+"அழிக்கப்படும்"
+
+#: contrib/auth/models.py:97
 msgid "superuser status"
 msgstr "மேலாளர் இருப்பு நிலை"
 
-#: contrib/auth/models.py:63
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "இந்த பயனருக்கு எல்லா அங்கீகாரங்களும் வழங்கப்படவில்லை."
+
+#: contrib/auth/models.py:98
 msgid "last login"
 msgstr "கடைசி உள்நுழைவு"
 
-#: contrib/auth/models.py:64
+#: contrib/auth/models.py:99
 msgid "date joined"
 msgstr "சேர்ந்த தேதி"
 
-#: contrib/auth/models.py:66
+#: contrib/auth/models.py:101
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
-msgstr "பயனர் தனது அனுமதிகளோடு ,தான் உள்ள குழுவினது அனுமதிகளைையும் பெறுவார்."
+msgstr "பயனர் தனது அனுமதிகளோடு ,தான் உள்ள குழுவினது அனுமதிகளையும் பெறுவார்."
 
-#: contrib/auth/models.py:67
+#: contrib/auth/models.py:102
 msgid "user permissions"
 msgstr "பயனர் அனுமதிகள்"
 
-#: contrib/auth/models.py:70
+#: contrib/auth/models.py:105
 msgid "user"
 msgstr "பயனர்"
 
-#: contrib/auth/models.py:71
+#: contrib/auth/models.py:106
 msgid "users"
 msgstr "பயனர்கள்"
 
-#: contrib/auth/models.py:76
+#: contrib/auth/models.py:111
 msgid "Personal info"
 msgstr "தனிப்பட்ட விவரம்"
 
-#: contrib/auth/models.py:77
+#: contrib/auth/models.py:112
 msgid "Permissions"
 msgstr "அனுமதிகள்"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:113
 msgid "Important dates"
 msgstr "முக்கியமான தேதிகள்"
 
-#: contrib/auth/models.py:79
+#: contrib/auth/models.py:114
 msgid "Groups"
 msgstr "குழுக்கள்"
 
-#: contrib/auth/models.py:219
+#: contrib/auth/models.py:256
 msgid "message"
 msgstr "செய்தி"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:52
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
-msgstr " உங்கள் இணைய உலாவியில்  குக்கிகள்  செயலாக்கம் பெறவில்லை. உள்நுழைவதற்க்கு குக்கிகள் அவசியம்."
+msgstr " உங்கள் இணைய உலாவியில்  குக்கிகள்  செயலாக்கம் பெறவில்லை. உள்நுழைவதற்கு குக்கிகள் அவசியம்."
 
-#: contrib/contenttypes/models.py:25
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr "இந்த கணக்கு செயல்பட துவங்கவில்லை"
+
+#: contrib/contenttypes/models.py:20
 msgid "python model class name"
 msgstr "python model class name"
 
-#: contrib/contenttypes/models.py:28
+#: contrib/contenttypes/models.py:23
 msgid "content type"
-msgstr "பொருளடக்க வகை "
+msgstr "பொருளடக்க வகை"
 
-#: contrib/contenttypes/models.py:29
+#: contrib/contenttypes/models.py:24
 msgid "content types"
 msgstr "பொருளடக்க வகைகள்"
 
-#: contrib/sessions/models.py:35
+#: contrib/sessions/models.py:51
 msgid "session key"
 msgstr "அமர்வு குறியீ"
 
-#: contrib/sessions/models.py:36
+#: contrib/sessions/models.py:52
 msgid "session data"
 msgstr "அமர்வு தகவல்"
 
-#: contrib/sessions/models.py:37
+#: contrib/sessions/models.py:53
 msgid "expire date"
 msgstr "காலாவதியாகும் தேதி"
 
-#: contrib/sessions/models.py:41
+#: contrib/sessions/models.py:57
 msgid "session"
 msgstr "அமர்வு"
 
-#: contrib/sessions/models.py:42
+#: contrib/sessions/models.py:58
 msgid "sessions"
 msgstr "அமர்வுகள்"
 
@@ -1406,21 +1425,6 @@
 msgid "sites"
 msgstr "வலைத்தளங்கள்"
 
-#: utils/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "தேதி வடிவம்"
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "தேதிநேர வடிவம்"
-
-# translation of django_ae.po to
-# translation of django_ae.po to
-# R Hariram Aatreya <rha at localhost.localdomain>, 2006.
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "நேரத்தின் அமைப்பும்"
-
 #: utils/dates.py:6
 msgid "Monday"
 msgstr "திங்கள்"
@@ -1575,537 +1579,558 @@
 
 #: utils/timesince.py:12
 msgid "year"
-msgstr "வருடம்"
+msgid_plural "years"
+msgstr[0] "வருடம்"
+msgstr[1] "வருடங்கள்"
 
 #: utils/timesince.py:13
 msgid "month"
-msgstr "மாதம்"
+msgid_plural "months"
+msgstr[0] "மாதம்"
+msgstr[1] "மாதங்கள்"
 
 #: utils/timesince.py:14
 msgid "week"
-msgstr "வாரம்"
+msgid_plural "weeks"
+msgstr[0] "வாரம்"
+msgstr[1] "வாரங்கள்"
 
 #: utils/timesince.py:15
 msgid "day"
-msgstr "நாள்"
+msgid_plural "days"
+msgstr[0] "நாள்"
+msgstr[1] "நாட்கள்"
 
 #: utils/timesince.py:16
 msgid "hour"
-msgstr "மணி"
+msgid_plural "hours"
+msgstr[0] "மணி"
+msgstr[1] "மணி"
 
 #: utils/timesince.py:17
 msgid "minute"
-msgstr "நிமிடம்"
+msgid_plural "minutes"
+msgstr[0] "நிமிடம்"
+msgstr[1] "நிமிடங்கள்"
 
-#: conf/global_settings.py:37
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr "தேதி_முறை"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "தேதிநேரம்_முறை"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "நேரம்_முறை"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "வருடம்_மாதம்_முறை"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "மாதம்_நாள்_முறை"
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "அரபிக்"
+
+#: conf/global_settings.py:40
 msgid "Bengali"
 msgstr "பெங்காலி"
 
-#: conf/global_settings.py:38
+#: conf/global_settings.py:41
 msgid "Czech"
 msgstr "செக்"
 
-#: conf/global_settings.py:39
+#: conf/global_settings.py:42
 msgid "Welsh"
 msgstr "வெல்ஸ்"
 
-#: conf/global_settings.py:40
+#: conf/global_settings.py:43
 msgid "Danish"
 msgstr "டேனிஷ்"
 
-#: conf/global_settings.py:41
+#: conf/global_settings.py:44
 msgid "German"
 msgstr "ஜெர்மன்"
 
-#: conf/global_settings.py:42
+#: conf/global_settings.py:45
 msgid "Greek"
 msgstr "கிரேக்கம்"
 
-#: conf/global_settings.py:43
+#: conf/global_settings.py:46
 msgid "English"
 msgstr "ஆங்கிலம்"
 
-#: conf/global_settings.py:44
+#: conf/global_settings.py:47
 msgid "Spanish"
 msgstr "ஸ்பானிஷ்"
 
-#: conf/global_settings.py:45
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "அர்ஜெண்டியன் ஸ்பானிஷ் "
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "பீனீஷ்"
+
+#: conf/global_settings.py:50
 msgid "French"
 msgstr "ப்ரென்சு"
 
-#: conf/global_settings.py:46
+#: conf/global_settings.py:51
 msgid "Galician"
 msgstr "கலீஷீயன்"
 
-#: conf/global_settings.py:47
+#: conf/global_settings.py:52
 msgid "Hungarian"
 msgstr "ஹங்கேரியன்"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:53
 msgid "Hebrew"
 msgstr "ஹீப்ரு"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:54
 msgid "Icelandic"
 msgstr "ஐஸ்லான்டிக்"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:55
 msgid "Italian"
 msgstr "இத்தாலியன்"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:56
 msgid "Japanese"
 msgstr "ஜப்பானிய"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:57
 msgid "Dutch"
 msgstr "டச்சு"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:58
 msgid "Norwegian"
 msgstr "நார்வீசியன்"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:59
 msgid "Brazilian"
 msgstr "பிரேசிலியன்"
 
-#: conf/global_settings.py:55
+#: conf/global_settings.py:60
 msgid "Romanian"
 msgstr "ரோமானியன்"
 
-#: conf/global_settings.py:56
+#: conf/global_settings.py:61
 msgid "Russian"
 msgstr "ரஷ்யன்"
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:62
 msgid "Slovak"
 msgstr "சுலோவாக்"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:63
 msgid "Slovenian"
 msgstr "ஸ்லோவேனியன்"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:64
 msgid "Serbian"
 msgstr "செர்பியன்"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:65
 msgid "Swedish"
 msgstr "சுவிடிஷ்"
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:66
+msgid "Tamil"
+msgstr "தமிழ்"
+
+#: conf/global_settings.py:67
+msgid "Turkish"
+msgstr "துருக்கிஷ்"
+
+#: conf/global_settings.py:68
 msgid "Ukrainian"
 msgstr "உக்ரேனியன்"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:69
 msgid "Simplified Chinese"
 msgstr "எளிய சீன மொழி"
 
-#: conf/global_settings.py:63
+#: conf/global_settings.py:70
 msgid "Traditional Chinese"
 msgstr "மரபு சீன மொழி"
 
-#: core/validators.py:60
+#: core/validators.py:63
 msgid "This value must contain only letters, numbers and underscores."
-msgstr "இந்த மதிப்பு எழுத்துகள் எண்கள் அன்டர்ஸ்கோர் மற்றும் உள்ளடக்க வேண்டும்  "
+msgstr "இந்த மதிப்பு எழுத்துகள், எண்கள் மேலும் அன்டர்ஸ்கோர் உள்ளடக்க வேண்டும். "
 
-#: core/validators.py:64
+#: core/validators.py:67
 msgid ""
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
-msgstr "இந்த மதிப்பு எழுத்துகள் எண்கள் அன்டர்ஸ்கோர் டஷ் அல்லது சலஷ் மற்றும் உள்ளடக்க வேண்டும்"
+msgstr "இந்த மதிப்பு எழுத்துகள், எண்கள், அன்டர்ஸ்கோர், டஷ் அல்லது சலஷ் மற்றும் உள்ளடக்க வேண்டும்"
 
-#: core/validators.py:72
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "இந்த மதிப்பு எழுத்துகள், எண்கள், அன்டர்ஸ்கோர் டஷ் அல்லது கைப்பன் மற்றும் உள்ளடக்க வேண்டும்"
+
+#: core/validators.py:75
 msgid "Uppercase letters are not allowed here."
-msgstr "பெரிய எழுத்துகளுக்கு இங்கு அனுமதி இல்லை இல்லை."
+msgstr "பெரிய எழுத்துகளுக்கு இங்கு அனுமதி இல்லை"
 
-#: core/validators.py:76
+#: core/validators.py:79
 msgid "Lowercase letters are not allowed here."
-msgstr "சிறிய ய எழுத்துகளுக்கு இங்கு அனுமதி இல்லை"
+msgstr "சிறிய எழுத்துகளுக்கு இங்கு அனுமதி இல்லை"
 
-# translation of django_af.po to
-# translation of django_af.po to
-# translation of django_af.po to
-# translation of django_af.po to
-# translation of django_af.po to
-# translation of django_af.po to
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# , 2006.
-# R Hariram Aatreya <rha at localhost.localdomain>, 2006.
-#: core/validators.py:83
+#: core/validators.py:86
 msgid "Enter only digits separated by commas."
-msgstr "காற்புள்ளிகளால் தனிமைப்படுத்திய இலக்கஙகள மட்டும் எழுதவும்"
+msgstr "இங்கு எண்களை மட்டுமே எழுதவும் காமவாள் தனிமைபடுத்தவும் "
 
-#: core/validators.py:95
+#: core/validators.py:98
 msgid "Enter valid e-mail addresses separated by commas."
-msgstr "காற்புள்ளிகளால் தனிமைப்படுத்திய முறையான e முகவரிகள்் மட்டும் எழுதவும்"
+msgstr "காற்புள்ளிகளால் தனிமைப்படுத்திய முறையான e முகவரிகள் மட்டும் எழுதவும்"
 
-#: core/validators.py:99
+#: core/validators.py:102
 msgid "Please enter a valid IP address."
-msgstr "தயவு செய்து முறையான ஐ.பி முகவறி மட்டும் எழுதவும்"
+msgstr "தயவு செய்து முறையான ஐ.பி முகவரி மட்டும் எழுதவும்"
 
-#: core/validators.py:103
+#: core/validators.py:106
 msgid "Empty values are not allowed here."
-msgstr "காலியான மதிப்புக்கள் அனுமதி இல்லை"
+msgstr "காலியான மதிப்புக்கள் அனுமதி இல்லை"
 
-#: core/validators.py:107
+#: core/validators.py:110
 msgid "Non-numeric characters aren't allowed here."
-msgstr "எண் வடிவமில்லாத எழுத்துக்கள் அனுமதி இல்லை"
+msgstr "எண் வடிவமில்லாத எழுத்துக்கள் அனுமதி இல்லை"
 
-#: core/validators.py:111
+#: core/validators.py:114
 msgid "This value can't be comprised solely of digits."
 msgstr "இந்த மதிப்பு இலக்கங்கள் மட்டுமே கொண்டதாக இருக்க கூடாது"
 
-#: core/validators.py:116
+#: core/validators.py:119
 msgid "Enter a whole number."
 msgstr "முழு எண் மட்டுமே எழுதவும்"
 
-#: core/validators.py:120
+#: core/validators.py:123
 msgid "Only alphabetical characters are allowed here."
 msgstr "அகர வரிசை எழுத்துக்கள் மட்டுமே அனுமதி உன்டு"
 
-#: core/validators.py:124
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr "வருடம் கண்டிப்பாக 1900 அல்லது அதற்கு மேல்"
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr "முறையல்லாத தேதி: %s"
+
+#: core/validators.py:146 db/models/fields/__init__.py:415
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "வவவவ-மாமா-நாநா என்ற அமைப்பில் உள்ள முறையான தேதி மட்டுமே எழுதவும்"
 
-#: core/validators.py:128
+#: core/validators.py:151
 msgid "Enter a valid time in HH:MM format."
 msgstr "மம-நிநி என்ற அமைப்பில் உள்ள முறையான நேரம் மட்டுமே எழுதவும்"
 
-#: core/validators.py:132 db/models/fields/__init__.py:468
+#: core/validators.py:155 db/models/fields/__init__.py:477
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
 msgstr "வவவவ-மாமா-நாநா மம-நிநி என்ற அமைப்பில் உள்ள முறையான தேதி/நேரம் மட்டுமே எழுதவும்"
 
-#: core/validators.py:136
+#: core/validators.py:160
 msgid "Enter a valid e-mail address."
-msgstr "முறையான e முகவரிகள்் மட்டும் எழுதவும்"
+msgstr "முறையான e முகவரிகள் மட்டும் எழுதவும்"
 
-#: core/validators.py:148
+#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "அந்த பக்கத்தின் encoding வகையைப் பரிசோதிக்க.கோப்பு சமர்பிக்கப் பட்டவில்லை "
+
+#: core/validators.py:176
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
-msgstr "முறையான படம் மட்டுமே பதிவேற்றம் செய்யவும். நீங்கள் பதிவேற்றம் செய்த கோப்பு படம் அள்ளாத அள்ளது கெட்டுப்போன கோப்பாகும்"
+msgstr "முறையான படம் மட்டுமே பதிவேற்றம் செய்யவும். நீங்கள் பதிவேற்றம் செய்த கோப்பு படம் அள்ளாத அல்லது கெட்டுப்போன கோப்பாகும்"
 
-#: core/validators.py:155
+#: core/validators.py:183
 #, python-format
 msgid "The URL %s does not point to a valid image."
-msgstr "%s என்ற இணையதள முகவறி சறியான படத்தைச் சுட்டவில்லை"
+msgstr "%s என்ற இணையதள முகவரி சரியான படத்தைச் சுட்டவில்லை"
 
-#: core/validators.py:159
+#: core/validators.py:187
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
 msgstr "தொலைபேசி எண்கள் XXX-XXX-XXXX என்ற அமைப்பில் இருக்க வேண்டும். \"%s\" என்பது முறையள்ள"
 
-#: core/validators.py:167
+#: core/validators.py:195
 #, python-format
 msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "%s என்ற இணையதள முகவறி முறையான குயிக் டைம் படக்காட்சியைச் சுட்டவில்லை"
+msgstr "%s என்ற இணையதள முகவரி முறையான குயிக் டைம் படக்காட்சியைச் சுட்டவில்லை"
 
-#: core/validators.py:171
+#: core/validators.py:199
 msgid "A valid URL is required."
-msgstr "முறையான இணையதள முகவறி தேவை"
+msgstr "முறையான இணையதள முகவரி தேவை"
 
-#: core/validators.py:185
+#: core/validators.py:213
 #, python-format
 msgid ""
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
-"முறையான இணையதள முகவறி தேவை. குறிப்பிடத்தக்கத் தவறுகளாவன:\n"
+"முறையான இணையதள முகவரி தேவை. குறிப்பிடத்தக்கத் தவறுகளாவன:\n"
 "%s"
 
-#: core/validators.py:192
+#: core/validators.py:220
 #, python-format
 msgid "Badly formed XML: %s"
 msgstr "முறைப்படுத்தப்படாத XML: %s"
 
-#: core/validators.py:202
+#: core/validators.py:230
 #, python-format
 msgid "Invalid URL: %s"
 msgstr "முறைப்படுத்தப்படாத இணையதள முகவறி: %s"
 
-#: core/validators.py:206 core/validators.py:208
+#: core/validators.py:234 core/validators.py:236
 #, python-format
 msgid "The URL %s is a broken link."
-msgstr "%s என்ற இணையதள முகவறி உடைந்துள்ளது"
+msgstr "%s என்ற இணையதள முகவரி உடைந்துள்ளது"
 
-#: core/validators.py:214
+#: core/validators.py:242
 msgid "Enter a valid U.S. state abbreviation."
-msgstr "முறையான U.S மாநில பெயர் சுருக்கம் எழுதவும்ழுதவும்"
+msgstr "முறையான U.S மாநில பெயர் சுருக்கம் எழுதவும்"
 
-#: core/validators.py:229
+#: core/validators.py:256
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
-msgstr "வார்த்தைகளை அளன்து பேசுங்கள். %s என்ற வார்த்தை இங்கு அனுமதி இல்லை"
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "வார்த்தைகளை அளன்து பேசுங்கள்! %s என்ற வார்த்தை இங்கு அனுமதி இல்லை"
+msgstr[1] "வார்த்தைகளை அளந்து பேசுங்கள்! %s என்ற வார்த்தைகள் இங்கு அனுமதி இல்லை"
 
-#: core/validators.py:236
+#: core/validators.py:263
 #, python-format
 msgid "This field must match the '%s' field."
 msgstr "இந்த புலம் %s என்ற புலத்துடன் ஒத்திறுக்க வேண்டும்"
 
-#: core/validators.py:255
+#: core/validators.py:282
 msgid "Please enter something for at least one field."
 msgstr "தயவு செய்து ஒரு புலத்திலாவது ஏதாவது எழுதவும்"
 
-#: core/validators.py:264 core/validators.py:275
+#: core/validators.py:291 core/validators.py:302
 msgid "Please enter both fields or leave them both empty."
-msgstr "தயவு செய்து இரு்புலங்கலையும்ும் நிரப்பவும்; அல்லது இரண்டையும் காலியாக விடவும்"
+msgstr "தயவு செய்து இரு புலங்கலையும் நிரப்பவும் அல்லது இரண்டையும் காலியாக விடவும்"
 
-#: core/validators.py:282
+#: core/validators.py:309
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "%(field)s, %(value)s ஆக இருந்தால் இன்த புலம் இருக்க வேண்டும்"
+msgstr "%(field)s, %(value)s ஆக இருந்தால் இந்த புலம் இருக்க வேண்டும்"
 
-#: core/validators.py:294
+#: core/validators.py:321
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "%(field)s, %(value)s ஆக இல்லை என்றால் இன்த புலம் இருக்க வேண்டும்"
+msgstr "%(field)s, %(value)s ஆக இல்லை என்றால் இந்த புலம் இருக்க வேண்டும்"
 
-#: core/validators.py:313
+#: core/validators.py:340
 msgid "Duplicate values are not allowed."
 msgstr "போலியான மதிப்புகள் அனுமதி இல்லை"
 
-#: core/validators.py:336
+#: core/validators.py:363
 #, python-format
 msgid "This value must be a power of %s."
 msgstr "இந்த மதிப்பு %s இன் அடுக்காக இருக்க வேன்டும்"
 
-#: core/validators.py:347
+#: core/validators.py:374
 msgid "Please enter a valid decimal number."
-msgstr "தயவுசெய்து முறையான பதின்ம எண்ணை நழைக்கcவும்"
+msgstr "தயவுசெய்து முறையான பதின்ம எண்ணை நுழைக்கவும்"
 
-#: core/validators.py:349
+#: core/validators.py:378
 #, python-format
-msgid ""
-"Please enter a valid decimal number with at most %s total digit."
-"Please enter a valid decimal number with at most %s total digits."
-msgstr ""
-"அதிகபட்சம் %s எண்ணை உள்ள பதின்ம எண்ணை நுழை."
-"அதிகபட்சம் %s எண்கள் உள்ள பதின்ம எண்ணை நுழை."
+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] "தயவுசெய்து முறையான பதின்ம எண்களுடன் %s மொத்த இலக்கத்தை நுழைக்கவும்"
+msgstr[1] "தயவுசெய்து முறையான பதின்ம எண்களுடன் %s மொத்த இலக்கங்களையும் நுழைக்கவும்"
 
-#: core/validators.py:352
+#: core/validators.py:381
 #, python-format
-msgid ""
-"Please enter a valid decimal number with at most %s decimal place."
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr ""
-"அதிகபட்சம் %s புள்ளி இடம் ள் உள்ள பதின்ம எண்ை  நுழை"
-"அதிகபட்சம் %s புள்ளி இடங்கள் உள்ள பதின்ம எண்ை  நுழை"
+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] "அதிகபட்சம் %s எண்ணை உள்ள பதின்ம எண்ணை நுழை."
+msgstr[1] "அதிகபட்சம் %s எண்கள் உள்ள பதின்ம எண்ணை நுழை."
 
-#: core/validators.py:362
+#: core/validators.py:384
 #, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] "அதிகபட்சம் %s புள்ளி இடம் உள்ள பதின்ம எண்ணை  நுழை"
+msgstr[1] "அதிகபட்சம் %s புள்ளி இடங்கள் உள்ள பதின்ம எண்ணை  நுழை"
+
+#: core/validators.py:394
+#, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
 msgstr "மேல்ஏற்று செய்யப்பட்ட கோப்பு குறைந்தபட்சம்  %s  பைட்டுகள் உள்ளனவா என சரி பார்க்கவும்"
 
-#: core/validators.py:363
+#: core/validators.py:395
 #, python-format
 msgid "Make sure your uploaded file is at most %s bytes big."
 msgstr "மேல்ஏற்று செய்யப்பட்ட கோப்பு அதிகபட்சம்  %s  பைட்டுகள் உள்ளனவா என சரி பார்க்கவும்."
 
-#: core/validators.py:376
+#: core/validators.py:412
 msgid "The format for this field is wrong."
 msgstr "புலனுடைய அமைப்பு தவறு"
 
-#: core/validators.py:391
+#: core/validators.py:427
 msgid "This field is invalid."
-msgstr "இந்த புலம் செல்லாது."
+msgstr "இந்த புலம் செல்லாது.ள"
 
-#: core/validators.py:426
+#: core/validators.py:463
 #, python-format
 msgid "Could not retrieve anything from %s."
 msgstr "%s இருந்து எதுவும் எடுக்க முடியவில்லை"
 
-#: core/validators.py:429
+#: core/validators.py:466
 #, python-format
 msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
 msgstr "வலைமனை %(url)s என்பது செல்லாத உள்ளடக்க-வகை தலைப்பான  '%(contenttype)s' ஐ திருப்பி தந்துள்ளது."
 
-#: core/validators.py:462
+#: core/validators.py:499
 #, python-format
 msgid ""
 "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
 "\"%(start)s\".)"
-msgstr " %(line)s கோடு லிருந்து மூடாத %(tag)s டாகை மூடு. ( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
+msgstr "%(line)s கோடு லிருந்து மூடாத %(tag)s டாகை மூடு. ( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
 
-#: core/validators.py:466
+#: core/validators.py:503
 #, python-format
 msgid ""
 "Some text starting on line %(line)s is not allowed in that context. (Line "
 "starts with \"%(start)s\".)"
 msgstr "வரி %(line)s இல் உள்ள  சில உரைகள் இருப்பதற்கு அனுமதி இல்லை.( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
 
-#: core/validators.py:471
+#: core/validators.py:508
 #, python-format
 msgid ""
 "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
 "(start)s\".)"
 msgstr "வரி %(line)s இல் உள்ள  \"%(attr)s\" என்பது தவறான பண்பாகும.( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
 
-#: core/validators.py:476
+#: core/validators.py:513
 #, python-format
 msgid ""
 "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
 "(start)s\".)"
 msgstr "வரி %(line)s இல் உள்ள \"<%(tag)s>\" என்பது தவறான ஒட்டாகும் .( வரி,\"%(start)s\"வுடன் துவங்குகின்றது)"
 
-#: core/validators.py:480
+#: core/validators.py:517
 #, python-format
 msgid ""
 "A tag on line %(line)s is missing one or more required attributes. (Line "
 "starts with \"%(start)s\".)"
 msgstr "வரி %(line)s இல் உள்ள ஒட்டு இன பண்புகள்  தேவைப்படுகின்றன.(வரி,\"%(start)s\" வுடன் துவங்குகின்றது)"
 
-#: core/validators.py:485
+#: core/validators.py:522
 #, python-format
 msgid ""
 "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
 "starts with \"%(start)s\".)"
 msgstr "வரி %(line)s இல் உள்ள \"%(attr)s\"  பண்பின் மதிப்பு தவறானது.(வரி \"%(start)s\" இருந்து ஆரம்பம்)"
 
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s வெற்றிகரமாக சேர்க்கப்பட்டு விட்டது"
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s வெற்றிகரமாக மாற்றபட்டு விட்டது"
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s நீக்கப்பட்டுள்ளது"
+
 #: db/models/manipulators.py:302
 #, python-format
-#, fuzzy
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(type)s உடன் உள்ள %(object)s  உள்ளது"
+msgstr "%(type)s உடன் உள்ள %(object)s ஏற்கனவே %(field)s கொடுக்கப்பட்டு  உள்ளது"
 
 #: db/models/fields/__init__.py:40
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(fieldname)s உடன் உள்ள %(optname)s உயிருடன உள்ளது"
+msgstr "%(fieldname)s உடன் உள்ள %(optname)s ஏற்கனவே உள்ளது"
 
 #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
+#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
 #: forms/__init__.py:346
 msgid "This field is required."
 msgstr "இந்த  புலத்தில் மதிப்பு தேவை"
 
-#: db/models/fields/__init__.py:337
+#: db/models/fields/__init__.py:340
 msgid "This value must be an integer."
 msgstr "இந்த மதிப்பு முழுவெண்ணாக இருக்க வேண்டும"
 
-#: db/models/fields/__init__.py:369
+#: db/models/fields/__init__.py:372
 msgid "This value must be either True or False."
 msgstr "இந்த மதிப்பு சரி அல்லது தவறாக இருக்க வேண்டும்"
 
-#: db/models/fields/__init__.py:385
+#: db/models/fields/__init__.py:388
 msgid "This field cannot be null."
 msgstr "இந்த புலம் காலியாக இருக்கக் கூடாது"
 
-#: db/models/fields/__init__.py:562
+#: db/models/fields/__init__.py:571
 msgid "Enter a valid filename."
 msgstr "முறையான கோப்புப் பெயரை எழுதவும்"
 
-#: db/models/fields/related.py:43
+#: db/models/fields/related.py:51
 #, python-format
 msgid "Please enter a valid %s."
 msgstr "தயவு செய்து முறையான %s எழுதவும்"
 
-#: db/models/fields/related.py:579
+#: db/models/fields/related.py:618
 msgid "Separate multiple IDs with commas."
 msgstr "பன்மையிலுள்ள அடையாளங்களை காற்புள்ளிகளால் பிரிக்கவும்"
 
-#: db/models/fields/related.py:581
+#: db/models/fields/related.py:620
 msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr "Mac இல், ஒன்றுக்கு மேற்பட்டவற்றை தேர்வு செய்ய \"Control\" அல்லது \"Command\" ஐ அழுத்தவும்"
 
-#: db/models/fields/related.py:625
+#: db/models/fields/related.py:664
 #, python-format
-msgid ""
-"Please enter valid %(self)s IDs. The value %(value)r is invalid."
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr ""
-"தயவு செய்து முறையான %(self)s அடையாளங்களை எழுதவும். %(value)r என்ற மதிப்பு முறையானதல்ல. "
-"தயவு செய்து முறையான %(self)s அடையாளங்களை எழுதவும். %(value)r என்ற மதிப்புகள் முறையானதல்ல. "
+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] "தயவு செய்து முறையான %(self)s அடையாளங்களை எழுதவும். %(value)r என்ற மதிப்பு முறையானதல்ல."
+msgstr[1] "தயவு செய்து முறையான %(self)s அடையாளங்களை எழுதவும். %(value)r என்ற மதிப்புகள் முறையானதல்ல."
 
-#: forms/__init__.py:380
+#: forms/__init__.py:381
 #, python-format
 msgid "Ensure your text is less than %s character."
-msgstr "உங்கள் உரை %s ஐ விட குறைவான எழுத்துக்களை உடையதென உறுதி செய்து கொள்ளுங்கள்"
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "உங்கள் உரை %s ஐ விட குறைவான எழுத்து உடையது என்று உறுதி செய்து கொள்ளுங்கள்"
+msgstr[1] "உங்கள் உரை %s ஐ விட குறைவான எழுத்துகள் உடையது என்று உறுதி செய்து கொள்ளுங்கள்"
 
-#: forms/__init__.py:385
+#: forms/__init__.py:386
 msgid "Line breaks are not allowed here."
-msgstr "வரி உடைவுகள் அனுமதி இல்லை"
+msgstr "வரி உடைவுகள் அனுமதி இல்லை"
 
-#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
+#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "முறையான விருப்பத்தை தேர்வு செய்யவும்; '%(data)s என்பது %(choices)s இல் இல்லை"
+msgstr "முறையான விருப்பத்தைத் தேர்வு செய்யவும்; '%(data)s என்பது %(choices)s இல் இல்லை"
 
-#: forms/__init__.py:645
+#: forms/__init__.py:663
 msgid "The submitted file is empty."
-msgstr "சமர்பிக்கப் பட்ட கோப்பு காலியாக உள்ளது"
+msgstr "சமர்பிக்கப் பட்ட கோப்புக் காலியாக உள்ளது"
 
-#: forms/__init__.py:699
+#: forms/__init__.py:719
 msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "-32,768 மற்றும் 32,767 கு நடுவில் ஒரு முழு எண்ணை எழுதவும்"
+msgstr "-32,768 மற்றும் 32,767 க்கு நடுவில் ஒரு முழு எண்ணை எழுதவும்"
 
-#: forms/__init__.py:708
+#: forms/__init__.py:729
 msgid "Enter a positive number."
-msgstr "ஒரு நேர்க்குறி எண்ணை எழுதவும்"
+msgstr "ஒரு நேர்க்குறி எண்ணை எழுதவும்"
 
-#: forms/__init__.py:717
+#: forms/__init__.py:739
 msgid "Enter a whole number between 0 and 32,767."
-msgstr "0 மற்றும் 32,767 கு நடுவில் ஒரு முழு எண்ணை எழுதவும்"
+msgstr "0 மற்றும் 32,767 க்கு நடுவில் ஒரு முழு எண்ணை எழுதவும்"
 
-#: template/defaultfilters.py:379
+#: template/defaultfilters.py:401
 msgid "yes,no,maybe"
 msgstr "ஆம், இல்லை, இருக்கலாம்"
 

Added: vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/ta/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,112 @@
+# translation of djangojs.po to tamil
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# PONNUSAMY.A <ponnusamy.simpleman at gmail.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: djangojs\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-12-09 11:51+0100\n"
+"PO-Revision-Date: 2007-03-14 16:40+0530\n"
+"Last-Translator: PONNUSAMY <ponnusamy.simpleman at gmail.com>\n"
+"Language-Team: tamil <tamilinix at yahoogroups.com>\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"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "%s இருக்கிறதா "
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "எல்லாவற்றையும் தேர்ந்த்தெடுக்க"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "சேர்க்க"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "அழிக்க"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "%s தேர்ந்த்தெடுக்கப்பட்ட"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "தேவையானவற்றை தேர்ந்த்தெடுத்து கிளிக் செய்க"
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "எல்லாவற்றையும் அழிக்க "
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"ஜனவரி பிப்ரவரி மார்ச் ஏப்ரல் மே ஜூன் ஜூலை ஆகஸ்டு செப்டம்பர் அக்டோபர் நவம்பர் "
+"டிசம்பர்"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "ஞாயிறு திங்கள் செவ்வாய் புதன்  வியாழன் வெள்ளி சனி "
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "ஞா தி செ பு வி வெ ச"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "இப்பொழுது "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "கடிகாரம் "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "ஒரு நேரத்தை தேர்ந்த்தெடுக்க  "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "நடு இரவு "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "காலை 6 மணி  "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "மதியம் "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "வேண்டாம் "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "இன்று "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "நாள்காட்டி  "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "நேற்று "
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "நாளை"
+

Added: vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/te/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2106 @@
+# translation of django.po to Telugu
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# pavithran <pavithran.s at gmail.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-09-25 15:43+0200\n"
+"PO-Revision-Date: 2007-02-28 18:35+0530\n"
+"Last-Translator: pavithran <pavithran.s at gmail.com>\n"
+"Language-Team: Telugu <indlinux-telugu at lists.sourceforge.net>\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"
+
+#: 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 "రేటింగ్ #1"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "రేటింగ్ #2"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "రేటింగ్ #3"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "రేటింగ్ #4"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "రేటింగ్ #5"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "రేటింగ్ #6"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "రేటింగ్ #7"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "రేటింగ్ #8"
+
+#: 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 "%(user) రేటింగ్"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"%(user)s చేత చేయబడ్డ  వ్యాఖ్యానములు"
+"\n"
+"%(text)లు"
+
+#: 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 "%r యొక్క ఫ్లాగ్"
+
+#: 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 "మొదరేటర్ తీసివేసిన %r"
+
+#: 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] ""
+"ఈ  వ్యాఖ్యానము చేసిన యూఙర్  %(count)లు కన్న తక్కువ  సమర్పించాడు  "
+"వ్యాఖ్యానము:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"ఈ  వ్యాఖ్యానము చేసిన యూఙర్  %(count)లు కన్న తక్కువ  సమర్పించాడు"
+"వ్యాఖ్యానములు:\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 ""
+"ఈ  వ్యాఖ్యానము స్కెచి  యూఙర్ చేసాడు  :\n"
+"\n"
+"%(text)s"
+
+#: 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/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/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_index.html:5
+msgid "Log out"
+msgstr "లాగ్ ఔట్"
+
+#: 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/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr "<h3> %s తో:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "అన్నీ"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "ఏ రోఙైన"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "ఈ రోఙు"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "గత  7 రోఙుల గా"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "ఈ నెల"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "ఈ  సంవత్సరము"
+
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "అవును"
+
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "కాదు"
+
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "తెలియనది"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "పని సమయము "
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "వస్తువు"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+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:230
+msgid "All dates"
+msgstr "అన్నీ  రోఙులు"
+
+#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:59
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr "దయచేసి సరైన  యూఙర్ పేరు పాస్ వర్డ్ ఇవ్వండి"
+
+#: contrib/admin/views/decorators.py:24
+#: contrib/admin/templates/admin/login.html:25
+msgid "Log in"
+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 "మీ ఈ మెయిల్ అడ్రస్   మీ యూఙర్ పేరు కాదు . '%s' ఇచ్చి చూడండి "
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "సైట్ నిర్వాహన"
+
+#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:17
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\"ఙయప్రదంగా కలపబడ్డడి"
+
+#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:22
+msgid "You may edit it again below."
+msgstr "మీరు  మళ్ళీ దీనినీ  క్రింద మార్చవచ్చు"
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr "మీరు ఇంకొక   %s ని  క్రింద ఙత చేయొచ్చు"
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "%s ని ఙత చేయండి "
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "%s కలపబడ్డడి"
+
+#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:339
+msgid "and"
+msgstr "ఇంకా"
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr " %s మార్చబడిండి"
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "%s తీసివేయబడ్డడి"
+
+#: 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 "%(name)s \"%(obj)s\" ఙయప్రదంగా మార్చబడిండి"
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" ఙయప్రదంగా కలపబడ్డడి  .మీరు  మళ్ళీ దీనినీ  క్రింద మార్చవచ్చు"
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "%s ని మార్చంది"
+
+#: contrib/admin/views/main.py:473
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ  %(name)లు లో  %(fieldname)లు : %(obj)లు "
+
+#: contrib/admin/views/main.py:478
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "ఒకటి కాని ,అంత కన్నఎక్కువ   %(name)లు లో  %(fieldname)లు"
+
+#: contrib/admin/views/main.py:511
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)లు \"%(obj)s\"ఙయప్రదంగా తీసివేయబడ్డడి"
+
+#: contrib/admin/views/main.py:514
+msgid "Are you sure?"
+msgstr "మీరు కచ్చితంగా ఉన్నారా?"
+
+#: contrib/admin/views/main.py:536
+#, python-format
+msgid "Change history: %s"
+msgstr "మార్చబడిన పురాణము"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s"
+msgstr "%s ని ఎన్నుకోండి"
+
+#: contrib/admin/views/main.py:570
+#, python-format
+msgid "Select %s to change"
+msgstr "%s ని మార్చటానికి  ఎన్నుకోండి"
+
+#: contrib/admin/views/main.py:758
+msgid "Database error"
+msgstr "డాటాబేస్ ఎర్రర్ "
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "టాగ్"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "ఫిల్టర్"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "చూడు:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "%rఎప్ప్ దొరకలేడు"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %r not found in app %r"
+msgstr "%r ఎప్ప్  లో %r మొడల్ దొరకలేడు"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%s.%s` object"
+msgstr "సంబంధించిన `%s.%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 "మొడల్:"
+
+#: contrib/admin/views/doc.py:214
+#, python-format
+msgid "related `%s.%s` objects"
+msgstr "సంబంధించిన  `%s.%s` వస్తువులు"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "ఆన్నీ  %s"
+
+#: 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:315 contrib/flatpages/models.py:7
+msgid "URL"
+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:28
+msgid "Add user"
+msgstr "యూఙర్"
+
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:3
+#: contrib/admin/templates/admin/change_list.html:5
+#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/delete_confirmation.html:3
+#: contrib/admin/templates/admin/change_form.html:10
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/admin_doc/bookmarklets.html:4
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/template_detail.html:4
+#: contrib/admin/templates/admin_doc/template_filter_index.html:5
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/view_index.html:5
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin_doc/model_index.html:5
+msgid "Change password"
+msgstr "పాస్ వర్డ్ మార్చుకోండి"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/change_list.html:6
+#: contrib/admin/templates/admin/base.html:30
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: 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 "ఇల్లు"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_form.html:20
+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 ""
+
+#: 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/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/500.html:4
+msgid "Server error"
+msgstr "సర్వర్ తప్పు"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "సర్వర్ తప్పు (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "సర్వర్ తప్పు <em>(500)</em>"
+
+#: 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/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/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "మొడల్ లు %(name)లో  దొరికే అప్ప్లికేషన్"
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:28
+#: contrib/admin/templates/admin/change_form.html:15
+msgid "Add"
+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/change_list.html:11
+#, python-format
+msgid "Add %(name)s"
+msgstr "%(name)లు ఙత చేయు"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "మీరు<a href=\"/password_reset/\">పాస్ వర్డ మర్చిపోయారా? "
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "సుస్వాగతం"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
+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/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "వెళ్లు"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "అన్నీ చూడండి"
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "View on site"
+msgstr "సైట్ లో చూడండి"
+
+#: contrib/admin/templates/admin/change_form.html:30
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "క్రింద ఉన్న తప్పు  సరిదిద్దుకోండి"
+msgstr[1] "క్రింద ఉన్న తప్పులు  సరిదిద్దుకోండి"
+
+#: contrib/admin/templates/admin/change_form.html:48
+msgid "Ordering"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:51
+msgid "Order:"
+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/invalid_setup.html:8
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:6
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "యూఙర్ పేరు"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "పాస్ వర్డ్"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "పాస్ వర్డ్ (మళ్ళీ)"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:24
+msgid "Enter the same password as above, for verification."
+msgstr "ఇందాక పాస్ వర్డ్ మళ్ళీ ఇవ్వండి పరిశీలన కోసము"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+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: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 "పాస్ వర్డ్ రీసెట్"
+
+#: 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/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_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: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_reset_.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 "మీ  కొత్త పాస్ వర్డ్ : %(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 "నిస్సందేహము గా ఈ పేఙి క్ కి వెళ్ళి పాస్ వర్డ్  మార్చుకోండి "
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "మీ యూఙర్ పేరు, ఒక వేళ మర్చిపోయి ఉంటే "
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "మా సైట్  వాడినందుకు ధన్యవాదములు!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:20
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "వస్తువు ఇడి చూడండి"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr "వస్తువు"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "వస్తువు"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr "వస్తువు"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "వస్తువు"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr ""
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "తారీఖు"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "వేళ:"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "ఇప్పుడు"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "మార్చు"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr ""
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr ""
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr ""
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr ""
+
+#: contrib/flatpages/models.py:8
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "పట్టము"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr ""
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr ""
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr "Example: 'flatpages/contact_page.html'.ఇది ఇవ్వకపోతే సిస్టం " " 'flatpages/default.html' ని వాడుకుంటడి"
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "నమొదు చేయటము అవసరం"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "ఇది చెక్ చేసి ఉంటే కేవలం లాగ్గడ్ ఇన్ యూఙర్లు పేఙి చూడలేస్తారు"
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr ""
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr ""
+
+#: contrib/auth/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]'"
+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:256
+msgid "message"
+msgstr "సమాచారం"
+
+#: contrib/auth/forms.py:52
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+
+#: contrib/auth/forms.py:61
+msgid "This account is inactive."
+msgstr ""
+
+#: contrib/contenttypes/models.py:20
+msgid "python model class name"
+msgstr "పైతాన్ మొడల్ క్లాస్  పేరు"
+
+#: contrib/contenttypes/models.py:23
+msgid "content type"
+msgstr ""
+
+#: contrib/contenttypes/models.py:24
+msgid "content types"
+msgstr ""
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr ""
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr ""
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr ""
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "కనిపిచ్చే పేరు"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "సైట్"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "సైట్లు"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "సోమవారము"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "మంగళవారము"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "బుధవారము"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "గురువారము"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "శుక్రవారము"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "శనివారము"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "ఆదివారము"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "ఙాన్వరి "
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "ఫిబ్రవరి"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "మార్చి"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "ఎప్రిల్"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "మే"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "ఙూను"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "ఙులై"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "ఆగష్టు"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "సెప్టెంబర్"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "అక్టోబర్"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "నవంబర్"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "డిసెంబర్"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "ఙాన్"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "ఫిబ్"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "మార్"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "ఎప్ర్"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "మే"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "ఙూన్"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "ఙుల్"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "ఆగ్"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "సెప్"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "అక్ట్"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "నవ్"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "డిస్"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "ఙాన్"
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "ఫిబ్"
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "ఆగ్"
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "సెప్"
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "అక్ట్"
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "నవ్"
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "డిస్"
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "సంవత్సరం"
+msgstr[1] "సంవత్సరాలు"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "నెల"
+msgstr[1] "నెలలు"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "వారం"
+msgstr[1] "వారాలు"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "రోఙు"
+msgstr[1] "రోఙులు"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "గంటలు"
+msgstr[1] "à°—à°‚à°Ÿ"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "నిముషం"
+msgstr[1] "నిముషాలు"
+
+#: utils/translation/trans_real.py:362
+msgid "DATE_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr ""
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "ఆరబిక్"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "బెంగాలి"
+
+#: conf/global_settings.py:41
+msgid "Czech"
+msgstr "క్ఙెఖ్"
+
+#: conf/global_settings.py:42
+msgid "Welsh"
+msgstr "వెల్శ్"
+
+#: conf/global_settings.py:43
+msgid "Danish"
+msgstr "డానిశ్"
+
+#: conf/global_settings.py:44
+msgid "German"
+msgstr "ఙెర్మన్"
+
+#: conf/global_settings.py:45
+msgid "Greek"
+msgstr "గ్రీక్"
+
+#: conf/global_settings.py:46
+msgid "English"
+msgstr "ఆంగ్లము"
+
+#: conf/global_settings.py:47
+msgid "Spanish"
+msgstr "స్పానిష్"
+
+#: conf/global_settings.py:48
+msgid "Argentinean Spanish"
+msgstr "అర్ఙంటీనా స్పానిష్"
+
+#: conf/global_settings.py:49
+msgid "Finnish"
+msgstr "ఫీన్నిష్"
+
+#: conf/global_settings.py:50
+msgid "French"
+msgstr "ఫ్రెంచ్"
+
+#: conf/global_settings.py:51
+msgid "Galician"
+msgstr "గలిసియన్"
+
+#: conf/global_settings.py:52
+msgid "Hungarian"
+msgstr "హంగారియన్"
+
+#: conf/global_settings.py:53
+msgid "Hebrew"
+msgstr "హెబ్రివ్"
+
+#: conf/global_settings.py:54
+msgid "Icelandic"
+msgstr "ఐస్ లాండిక్"
+
+#: conf/global_settings.py:55
+msgid "Italian"
+msgstr "ఇటాలియవ్"
+
+#: conf/global_settings.py:56
+msgid "Japanese"
+msgstr "ఙపనీస్"
+
+#: conf/global_settings.py:57
+msgid "Dutch"
+msgstr "డట్చ్"
+
+#: conf/global_settings.py:58
+msgid "Norwegian"
+msgstr "నార్వీఙియన్"
+
+#: conf/global_settings.py:59
+msgid "Brazilian"
+msgstr "బ్రఙీలియన్"
+
+#: conf/global_settings.py:60
+msgid "Romanian"
+msgstr "రొమానియన్"
+
+#: conf/global_settings.py:61
+msgid "Russian"
+msgstr "రస్సెన్"
+
+#: conf/global_settings.py:62
+msgid "Slovak"
+msgstr "స్లొవాక్"
+
+#: conf/global_settings.py:63
+msgid "Slovenian"
+msgstr "స్లొవానియన్"
+
+#: conf/global_settings.py:64
+msgid "Serbian"
+msgstr "సెర్బియన్"
+
+#: conf/global_settings.py:65
+msgid "Swedish"
+msgstr "స్వీడిష్"
+
+#: conf/global_settings.py:66
+msgid "Tamil"
+msgstr "తమిళ్"
+
+#: conf/global_settings.py:67
+msgid "Turkish"
+msgstr "టర్కిశ్"
+
+#: conf/global_settings.py:68
+msgid "Ukrainian"
+msgstr "యుక్రానియన్"
+
+#: conf/global_settings.py:69
+msgid "Simplified Chinese"
+msgstr "వాడుక చైనీస్"
+
+#: conf/global_settings.py:70
+msgid "Traditional Chinese"
+msgstr "గ్రాంధిక  చైనీస్"
+
+#: core/validators.py:63
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "ఈ విలువ   లో అక్షరాలు, అంకెలు ఇంకా అండర్ స్కోర్లు ఉందాలి"
+
+#: core/validators.py:67
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr "ఈ విలువ   లో అక్షరాలు, అంకెలు , అండర్ స్కోర్లు ,డాష్ లు లేక స్లాష్ లు ఉందాలి"
+
+#: core/validators.py:71
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "ఈ విలువ   లో అక్షరాలు, అంకెలు , అండర్ స్కోర్లు  లేక హైఫన్లు  ఉందాలి"
+
+#: core/validators.py:75
+msgid "Uppercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:79
+msgid "Lowercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:86
+msgid "Enter only digits separated by commas."
+msgstr "కామాల తో అంకెలు విడడీసి ఇవ్వండి "
+
+#: core/validators.py:98
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "కామాల తో విడతీసి  సరైన ఈ మెయిల్  అడ్రస్ ఇవ్వండి"
+
+#: core/validators.py:102
+msgid "Please enter a valid IP address."
+msgstr "దయచేసి సరైన ఐపి అడ్రస్ ఇవ్వండి "
+
+#: core/validators.py:106
+msgid "Empty values are not allowed here."
+msgstr "ఇక్కడ కాళీ విలువలు అనుమతించబడవు "
+
+#: core/validators.py:110
+msgid "Non-numeric characters aren't allowed here."
+msgstr "అంకెలు కాని చిహ్నాలు అనుమతించబడవు"
+
+#: core/validators.py:114
+msgid "This value can't be comprised solely of digits."
+msgstr "ఈ విలువ లో ఉట్టి మాత్రమే ఉందకూడడు"
+
+#: core/validators.py:119
+msgid "Enter a whole number."
+msgstr "పూర్ణ సంఖ్య ఇవ్వండి"
+
+#: core/validators.py:123
+msgid "Only alphabetical characters are allowed here."
+msgstr "అక్షరాలు  అయిన చిహ్నాలు మాత్రమే  అనుమతించబడతాయి "
+
+#: core/validators.py:138
+msgid "Year must be 1900 or later."
+msgstr "సంవత్సరము 1900 లేక దాని తరువాత అయ్యి ఉందాలి "
+
+#: core/validators.py:142
+#, python-format
+msgid "Invalid date: %s."
+msgstr "సరికాని తారీఖు"
+
+#: core/validators.py:146 db/models/fields/__init__.py:415
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: core/validators.py:151
+msgid "Enter a valid time in HH:MM format."
+msgstr ""
+
+#: core/validators.py:155 db/models/fields/__init__.py:477
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+
+#: core/validators.py:160
+msgid "Enter a valid e-mail address."
+msgstr "సరైన ఈ మెయిల్  అడ్రస్ ఇవ్వండి"
+
+#: core/validators.py:172 core/validators.py:401 forms/__init__.py:661
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: core/validators.py:176
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: core/validators.py:183
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr ""
+
+#: core/validators.py:187
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+
+#: core/validators.py:195
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr ""
+
+#: core/validators.py:199
+msgid "A valid URL is required."
+msgstr "సరైన  URL కావాలి"
+
+#: core/validators.py:213
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr "సరైన  HTML ఇవ్వండి .ప్రత్యేకమైన తప్పులు :\n"
+"%s"
+#: core/validators.py:220
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr ""
+
+#: core/validators.py:230
+#, python-format
+msgid "Invalid URL: %s"
+msgstr ""
+
+#: core/validators.py:234 core/validators.py:236
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr ""
+
+#: core/validators.py:242
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "దయచేసి  సరైన అగ్ర రాఙ్య  సంక్షేపము చేసిన  రాష్ట్రము పేరు ఇవ్వండి"
+
+#: core/validators.py:256
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:263
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "ఈ ఫీల్డ్  '%s' ఫీల్డ్ కి సరి తూగాలి"
+
+#: core/validators.py:282
+msgid "Please enter something for at least one field."
+msgstr "దయచేసి ఏదో  ఒకటి  ఏదో ఒక ఫీల్డ్ కి ఇవ్వండి "
+
+#: core/validators.py:291 core/validators.py:302
+msgid "Please enter both fields or leave them both empty."
+msgstr "దయచేసి రెండు ఫీల్డ్లలు ఇవ్వండి  లేకపోతే రెండు కాళీ గా వదిలేయండి   "
+
+#: core/validators.py:309
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "%(field)s %(value)s ఐతే ఈ ఫీల్డ్  ఇవ్వాలి  "
+
+#: core/validators.py:321
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "%(field)s %(value)s అవ్వకపోతే ఈ ఫీల్డ్  ఇవ్వాలి "
+
+#: core/validators.py:340
+msgid "Duplicate values are not allowed."
+msgstr "నకలీ విలువలు ఇక్కడ అనుమతించబడవు"
+
+#: core/validators.py:363
+#, python-format
+msgid "This value must be a power of %s."
+msgstr ""
+
+#: core/validators.py:374
+msgid "Please enter a valid decimal number."
+msgstr ""
+
+#: core/validators.py:378
+#, 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:381
+#, python-format
+msgid "Please enter a valid decimal number with a whole part of at most %s digit."
+msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:384
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural "Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:394
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+
+#: core/validators.py:395
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+
+#: core/validators.py:412
+msgid "The format for this field is wrong."
+msgstr "ఈ ఫీల్డ్  ఫోర్మాట్ తప్పు"
+
+#: core/validators.py:427
+msgid "This field is invalid."
+msgstr "ఈ ఫీల్డ్ సరి కానిది"
+
+#: core/validators.py:463
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "%s నించి  ఏమి  రాబట్టలేము"
+
+#: core/validators.py:466
+#, python-format
+msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+
+#: core/validators.py:499
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:503
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:508
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:513
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:517
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:522
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)లు ఙయప్రదంగా తయారయింది"
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)లు ఙయప్రదంగా  @@"
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)లు తీసివేయబడినది"
+
+#: db/models/manipulators.py:302
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(field)ల లో %(object)తో  %(type)  ఉన్నాయి"
+
+#: db/models/fields/__init__.py:40
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)లు తో %(fieldname) ముందే ఉన్నాయి ."
+
+#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
+#: db/models/fields/__init__.py:551 db/models/fields/__init__.py:562
+#: forms/__init__.py:346
+msgid "This field is required."
+msgstr "ఈ ఫీల్డ్ అవసరము"
+
+#: db/models/fields/__init__.py:340
+msgid "This value must be an integer."
+msgstr "ఈ  విలువ  లో  ఉందాలి"
+
+#: db/models/fields/__init__.py:372
+msgid "This value must be either True or False."
+msgstr "ఈ  విలువ  తప్పైన ఒప్పైన  ఉందాలి"
+
+#: db/models/fields/__init__.py:388
+msgid "This field cannot be null."
+msgstr "ఈ ఫీల్డ్ కాళీగా ఉందకూడడు      "
+
+#: db/models/fields/__init__.py:571
+msgid "Enter a valid filename."
+msgstr "దయచేసి సరైన దస్త్రం పేరు ఇవ్వండి."
+
+#: db/models/fields/related.py:51
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "దయచేసి సరైన %sఇవ్వండి."
+
+#: db/models/fields/related.py:618
+msgid "Separate multiple IDs with commas."
+msgstr "గుంపు    గా ఉన్న ఐడిల ను కామా తో విడడీయంది"
+
+#: db/models/fields/related.py:620
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "\"Control\" కాని  \"Command\" మాక్ లో  నొక్కి ఉంచండి  , ఒకటి కన్న ఎక్కువ ఎన్నుకోవటానికి"
+
+#: db/models/fields/related.py:664
+#, 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] "దయచేసి సరైన  %(self)s ఐడిలు ఇవ్వండి.  "
+msgstr[1] ""
+
+#: forms/__init__.py:381
+#, python-format
+msgid "Ensure your text is less than %s character."
+msgid_plural "Ensure your text is less than %s characters."
+msgstr[0] "మీరు  ఇచ్చిన టెక్స్ట %s ఆక్షరము కన్న తక్కువ ఉందాలి"
+msgstr[1] "మీరు  ఇచ్చిన టెక్స్ట %s ఆక్షరములు కన్న తక్కువ ఉందాలి"
+
+#: forms/__init__.py:386
+msgid "Line breaks are not allowed here."
+msgstr "లైన్  బ్రేక్స్  కి ఇక్కడ  ఆనుమతి లేదు"
+
+#: forms/__init__.py:487 forms/__init__.py:560 forms/__init__.py:599
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "సరైనది ఎంచుకోండి;  %(choices) ల లో  '%(data)s' లేవు  "
+
+#: forms/__init__.py:663
+msgid "The submitted file is empty."
+msgstr "మీరు సమర్పించిన  ఫైల్ కాళీగా ఉంది "
+
+#: forms/__init__.py:719
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr " -32,768 ఇంకా  32,767 మధ్యలో  ఒక    ఆంకె ఇవ్వండి"
+
+#: forms/__init__.py:729
+msgid "Enter a positive number."
+msgstr "ఒక    ధన సంఖ్య ఇవ్వండి"
+
+#: forms/__init__.py:739
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "0 ఇంకా  32,767 మధ్యలో  ఒక    పూర్ ఇవ్వండి"
+
+#: template/defaultfilters.py:401
+msgid "yes,no,maybe"
+msgstr "అవును, కాదు , ఏమొ"
+

Added: vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/te/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,110 @@
+# translation of djangojs.po to Telugu
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# pavithran <pavithran.s at gmail.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: djangojs\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-12-09 11:51+0100\n"
+"PO-Revision-Date: 2007-03-06 16:08+0530\n"
+"Last-Translator: pavithran <pavithran.s at gmail.com>\n"
+"Language-Team: Telugu <indlinux-telugu at lists.sourceforge.net>\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"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "ఆందుబాతులోఉన్న %s "
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "అన్నీ ఎన్నుకోండి"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "ఙత చేయి"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "తీసివేయండి"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "ఎన్నుకున్న %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "మీ ఇష్టాలు ఎన్నుకోండి"
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "అన్ని తీసివేయు"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr "ఙాన్వరి ఫిబ్రవరి మార్చి ఎప్రిల్ మే ఙూను ఙులై ఆగష్టు సెప్టెంబర్ అక్టోబర్ నవంబర్ డిసెంబర్"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "ఆదివారము సోమవారము మంగళవారము బుధవారము గురువారము శుక్రవారము శనివారము"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "ఆ సో మం భు గు శు శ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "ఇప్పుడు"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "గడియారము"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "ఒక సమయము ఎన్నుకోండి"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "ఆర్ధరాత్రి"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "6"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "మధ్యాహ్నము"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "రద్దు చేయు"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "ఈనాడు"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "కాలెండర్"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "నిన్న"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "రేపు"
+

Added: vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/tr/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2470 @@
+# translation of django.po to Turkish
+# Django 0.95
+# Copyright (C) 2006 Django
+# This file is distributed under the same license as the Django package.
+# 
+# Can Burak Çilingir <canburak at cs.bilgi.edu.tr>, 2007. (Slight modifications)
+# Bahadır Kandemir <bahadir at pardus.org.tr>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-03-14 01:38+0200\n"
+"PO-Revision-Date: 2007-03-14 02:06+0200\n"
+"Last-Translator: Bahadır Kandemir <bahadir at pardus.org.tr>\n"
+"Language-Team: Turkish <bahadir at pardus.org.tr>\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"
+
+#: oldforms/__init__.py:357 db/models/fields/__init__.py:116
+#: db/models/fields/__init__.py:273 db/models/fields/__init__.py:609
+#: db/models/fields/__init__.py:620 newforms/models.py:177
+#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450
+#: newforms/fields.py:461
+msgid "This field is required."
+msgstr "Bu alan gerekli."
+
+#: 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] "Metnin %s karakterden az olmasına dikkat edin."
+msgstr[1] "Metnin %s karakterden az olmasına dikkat edin."
+
+#: oldforms/__init__.py:397
+msgid "Line breaks are not allowed here."
+msgstr "Burada birden fazla satır olamaz."
+
+#: 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 ""
+"Geçerli bir seçimde bulunun; %(choices)s değerleri içinde '%(data)s' yok."
+
+#: oldforms/__init__.py:577 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:150
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#: oldforms/__init__.py:577 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143
+msgid "Yes"
+msgstr "Evet"
+
+#: oldforms/__init__.py:577 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143
+msgid "No"
+msgstr "Hayır"
+
+#: 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 "Dosya gönderilmedi. Formdaki kodlama türünü kontrol edin."
+
+#: oldforms/__init__.py:674
+msgid "The submitted file is empty."
+msgstr "Gönderilen dosya boş."
+
+#: oldforms/__init__.py:730
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "-32,768 ve 32,767 arası bir sayı girin."
+
+#: oldforms/__init__.py:740
+msgid "Enter a positive number."
+msgstr "Pozitif tamsayı girin."
+
+#: oldforms/__init__.py:750
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "0 ve 32,767 arası bir sayı girin."
+
+#: db/models/manipulators.py:307
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(type)s ve %(field)s değerine sahip %(object)s kaydı zaten var."
+
+#: 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 "ve"
+
+#: db/models/fields/__init__.py:42
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(fieldname)s için %(optname)s değeri zaten seçilmiş."
+
+#: db/models/fields/__init__.py:366
+msgid "This value must be an integer."
+msgstr "Bu değer tamsayı olmalı."
+
+#: db/models/fields/__init__.py:401
+msgid "This value must be either True or False."
+msgstr "Bu deÄŸer True ya da False olabilir."
+
+#: db/models/fields/__init__.py:422
+msgid "This field cannot be null."
+msgstr "Bu alan boş bırakılamaz."
+
+#: db/models/fields/__init__.py:456 core/validators.py:148
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "YYYY-AA-GG formatında tarih girin."
+
+#: db/models/fields/__init__.py:525 core/validators.py:157
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "YYYY-AA-GG SS:DD formatında tarih girin."
+
+#: db/models/fields/__init__.py:629
+msgid "Enter a valid filename."
+msgstr "Geçerli bir dosya adı girin."
+
+#: db/models/fields/__init__.py:750
+msgid "This value must be either None, True or False."
+msgstr "Bu deÄŸer None, True ya da False olabilir."
+
+#: db/models/fields/related.py:53
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Lütfen geçerli bir %s girin."
+
+#: db/models/fields/related.py:642
+msgid "Separate multiple IDs with commas."
+msgstr "Birden fazla numarayı virgül ile ayırın."
+
+#: db/models/fields/related.py:644
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"\"Ctrl\" ve Mac'de \"Command\" tuşunu basılı tutarak birden fazla seçimde "
+"bulunabilirsiniz."
+
+#: 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] ""
+"Lütfen geçerli bir %(self)s numarası girin. %(value)r değeri geçersiz."
+msgstr[1] ""
+"Lütfen geçerli %(self)s numaraları girin. %(value)r değerleri geçersiz."
+
+#: conf/global_settings.py:39
+msgid "Arabic"
+msgstr "Arapça"
+
+#: conf/global_settings.py:40
+msgid "Bengali"
+msgstr "Bengali Dili"
+
+#: conf/global_settings.py:41
+msgid "Catalan"
+msgstr ""
+
+#: conf/global_settings.py:42
+msgid "Czech"
+msgstr "Çekçe"
+
+#: conf/global_settings.py:43
+msgid "Welsh"
+msgstr "Galce"
+
+#: conf/global_settings.py:44
+msgid "Danish"
+msgstr "Danca"
+
+#: conf/global_settings.py:45
+msgid "German"
+msgstr "Almanca"
+
+#: conf/global_settings.py:46
+msgid "Greek"
+msgstr "Yunanca"
+
+#: conf/global_settings.py:47
+msgid "English"
+msgstr "Ä°ngilizce"
+
+#: conf/global_settings.py:48
+msgid "Spanish"
+msgstr "Ä°spanyolca"
+
+#: conf/global_settings.py:49
+msgid "Argentinean Spanish"
+msgstr "Arjantin İspanyolcası"
+
+#: conf/global_settings.py:50
+msgid "Finnish"
+msgstr "Fince"
+
+#: conf/global_settings.py:51
+msgid "French"
+msgstr "Fransızca"
+
+#: conf/global_settings.py:52
+msgid "Galician"
+msgstr "Galler Dili"
+
+#: conf/global_settings.py:53
+msgid "Hungarian"
+msgstr "Macarca"
+
+#: conf/global_settings.py:54
+msgid "Hebrew"
+msgstr "Ä°branice"
+
+#: conf/global_settings.py:55
+msgid "Icelandic"
+msgstr "Ä°zlanda dili"
+
+#: conf/global_settings.py:56
+msgid "Italian"
+msgstr "Ä°talyanca"
+
+#: conf/global_settings.py:57
+msgid "Japanese"
+msgstr "Japonca"
+
+#: conf/global_settings.py:58
+msgid "Kannada"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Latvian"
+msgstr ""
+
+#: conf/global_settings.py:60
+msgid "Macedonian"
+msgstr ""
+
+#: conf/global_settings.py:61
+msgid "Dutch"
+msgstr "Flamanca"
+
+#: conf/global_settings.py:62
+msgid "Norwegian"
+msgstr "Norveç Dili"
+
+#: conf/global_settings.py:63
+msgid "Polish"
+msgstr ""
+
+#: conf/global_settings.py:64
+msgid "Brazilian"
+msgstr "Brezilya Dili"
+
+#: conf/global_settings.py:65
+msgid "Romanian"
+msgstr "Romence"
+
+#: conf/global_settings.py:66
+msgid "Russian"
+msgstr "Rusça"
+
+#: conf/global_settings.py:67
+msgid "Slovak"
+msgstr "Slovakça"
+
+#: conf/global_settings.py:68
+msgid "Slovenian"
+msgstr "Slovence"
+
+#: conf/global_settings.py:69
+msgid "Serbian"
+msgstr "Sırpça"
+
+#: conf/global_settings.py:70
+msgid "Swedish"
+msgstr "İsveççe"
+
+#: conf/global_settings.py:71
+msgid "Tamil"
+msgstr "Tamilce"
+
+#: conf/global_settings.py:72
+msgid "Telugu"
+msgstr ""
+
+#: conf/global_settings.py:73
+msgid "Turkish"
+msgstr "Türkçe"
+
+#: conf/global_settings.py:74
+msgid "Ukrainian"
+msgstr "Ukraynaca"
+
+#: conf/global_settings.py:75
+msgid "Simplified Chinese"
+msgstr "Basiteştirilmiş Çince"
+
+#: conf/global_settings.py:76
+msgid "Traditional Chinese"
+msgstr "Gelenelsek Çince"
+
+#: core/validators.py:64
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Bu değer sadece karakter, rakam ve altçizgiden oluşabilir."
+
+#: core/validators.py:68
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Bu değer sadece harf, rakam, altçizgi, bölü ve ters bölüden oluşabilir."
+
+#: core/validators.py:72
+msgid "This value must contain only letters, numbers, underscores or hyphens."
+msgstr "Bu değer sadece harf, rakam, altçizgi veya çizgiden oluşabilir."
+
+#: core/validators.py:76
+msgid "Uppercase letters are not allowed here."
+msgstr "Burada büyük harf kullanılamaz."
+
+#: core/validators.py:80
+msgid "Lowercase letters are not allowed here."
+msgstr "Burada küçük harf kullanılamaz."
+
+#: core/validators.py:87
+msgid "Enter only digits separated by commas."
+msgstr "Sadece virgülle ayrılmış sayılar girin."
+
+#: core/validators.py:99
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Virgülle ayrılmış geçerli e-posta adresleri girin."
+
+#: core/validators.py:103
+msgid "Please enter a valid IP address."
+msgstr "Lütfen geçerli bir IP adresi girin."
+
+#: core/validators.py:107
+msgid "Empty values are not allowed here."
+msgstr "Burada boş değer kullanılamaz."
+
+#: core/validators.py:111
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Burada numerik olmayan karakterler kullanılamaz."
+
+#: core/validators.py:115
+msgid "This value can't be comprised solely of digits."
+msgstr "Bu alanda sadece rakam kullanılamaz."
+
+#: core/validators.py:120 newforms/fields.py:126
+msgid "Enter a whole number."
+msgstr "Sayı girin."
+
+#: core/validators.py:124
+msgid "Only alphabetical characters are allowed here."
+msgstr "Burada sadece alfabetik karakterler kullanılabilir."
+
+#: core/validators.py:139
+msgid "Year must be 1900 or later."
+msgstr "Yıl 1900 ya da sonrası olabilir."
+
+#: core/validators.py:143
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Geçersiz tarih: %s"
+
+#: core/validators.py:153
+msgid "Enter a valid time in HH:MM format."
+msgstr "SS:DD formatında geçerli bir saat girin."
+
+#: core/validators.py:162 newforms/fields.py:269
+msgid "Enter a valid e-mail address."
+msgstr "Geçerli bir e-posta adresi girin."
+
+#: core/validators.py:178
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Geçerli bir resim girin. Gönderdiğiniz dosya resim değil, ya da bozuk bir "
+"dosya."
+
+#: core/validators.py:185
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "%s adresi geçerli bir resme işaret etmiyor."
+
+#: core/validators.py:189
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "Telefon numarası XXX-XXX-XXXX formatında olmalı. \"%s\" geçersiz."
+
+#: core/validators.py:197
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "%s adresi geçerli bir QuickTime dosyasına işaret etmiyor."
+
+#: core/validators.py:201
+msgid "A valid URL is required."
+msgstr "Geçerli bir URL gerekli."
+
+#: core/validators.py:215
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Metnin geçerli bir HTML kodu olması gerekir. Hatalar:\n"
+"%s"
+
+#: core/validators.py:222
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Geçersiz XML kodu: %s"
+
+#: core/validators.py:239
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Geçersiz adres: %s"
+
+#: core/validators.py:244 core/validators.py:246
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "%s kırık bir link."
+
+#: core/validators.py:252
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Geçerli bir şehir kodu girin."
+
+#: 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] "Söylediğinize dikkat edin! %s kelimesi burada kullanılamaz."
+msgstr[1] "Söylediğinize dikkat edin! %s kelimeleri burada kullanılamaz."
+
+#: core/validators.py:273
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Bu alan '%s' ile alanı ile uyuşmalı."
+
+#: core/validators.py:292
+msgid "Please enter something for at least one field."
+msgstr "Lütfen en az bir alana giriş yapın."
+
+#: core/validators.py:301 core/validators.py:312
+msgid "Please enter both fields or leave them both empty."
+msgstr "Lütfen tüm alanları doldurun ya da hepsini boş bırakın."
+
+#: core/validators.py:320
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Bu alan %(field)s alanı %(value)s değerine sahipse doldurulmalı."
+
+#: core/validators.py:333
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Bu alan %(field)s alanı %(value)s değerine sahip değilse doldurulmalı."
+
+#: core/validators.py:352
+msgid "Duplicate values are not allowed."
+msgstr "Tekrarlanan deÄŸerler kabul edilmez."
+
+#: core/validators.py:367
+#, python-format
+msgid "This value must be between %(lower)s and %(upper)s."
+msgstr "Bu değer %(lower)s ve %(upper)s arasında olabilir."
+
+#: core/validators.py:369
+#, python-format
+msgid "This value must be at least %s."
+msgstr "Bu deÄŸer en az %s olabilir."
+
+#: 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 "Bu deÄŸer %s ya da kuvvetleri olabilir."
+
+#: core/validators.py:418
+msgid "Please enter a valid decimal number."
+msgstr "Lütfen geçerli bir ondalık sayı girin."
+
+#: 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] "Lütfen en fazla %s basamaklı bir ondalık sayı girin."
+msgstr[1] "Lütfen en fazla %s basamaklı bir ondalık sayı girin."
+
+#: 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] "Lütfen tamsayı kısmı en fazla %s basamaklı bir ondalık sayı girin."
+msgstr[1] "Lütfen tamsayı kısmı en fazla %s basamaklı bir ondalık sayı girin."
+
+#: 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] ""
+"Lütfen ondalıklı kısmı en fazla %s basamaklı bir ondalık sayı girin."
+msgstr[1] ""
+"Lütfen ondalıklı kısmı en fazla %s basamaklı bir ondalık sayı girin."
+
+#: core/validators.py:438
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Gönderdiğiniz dosyanın en az %s byte uzunlukta olduğundan emin olun."
+
+#: core/validators.py:439
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Gönderdiğiniz dosyanın en fazl %s byte uzunlukta olduğundan emin olun."
+
+#: core/validators.py:456
+msgid "The format for this field is wrong."
+msgstr "Bu alandaki veri formatı hatalı."
+
+#: core/validators.py:471
+msgid "This field is invalid."
+msgstr "Alan geçersiz."
+
+#: core/validators.py:507
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "%s içinden hiçbirşey aktarılamıyor."
+
+#: core/validators.py:510
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "%(url)s adresi geçersiz içerik türü (%(contenttype)s) gönderdi."
+
+#: core/validators.py:543
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Lütfen %(line)s. satırdaki kapatılmayan %(tag)s etiketini kapatın. (Satır, "
+"\"%(start)s\" ile başlıyor.)"
+
+#: 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 ""
+"%(line)s. satırda başlayan bazı kelimeler içerik olarak kabul edilmiyor. "
+"(Satır, \"%(start)s\" ile başlıyor.)"
+
+#: core/validators.py:552
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"%(line)s. satırdaki \"%(attr)s\" özelliği geçersiz. (Satır, \"%(start)s\" "
+"ile başlıyor.)"
+
+#: core/validators.py:557
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"%(line)s. satırdaki \"<%(tag)s>\" etiketi geçersiz. (Satır, \"%(start)s\" "
+"ile başlıyor.)"
+
+#: 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 ""
+"%(line)s. satırdaki bir etiket eksik ya da eklenmesi gereken özellikleri "
+"var. (Satır, \"%(start)s\" ile başlıyor.)"
+
+#: 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 ""
+"%(line)s. satırdaki \"%(attr)s\" özelliği geçersiz bir değere sahip. (Satır, "
+"\"%(start)s\" ile başlıyor.)"
+
+#: views/generic/create_update.py:43
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s başarıyla yaratıldı."
+
+#: views/generic/create_update.py:117
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s başarıyla güncellendi."
+
+#: views/generic/create_update.py:184
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s silindi."
+
+#: newforms/models.py:164 newforms/fields.py:360
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Geçerli bir seçimde bulunun; seçiminiz mevcut değerlerden birisi değil."
+
+#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454
+msgid "Enter a list of values."
+msgstr ""
+
+#: newforms/models.py:187 newforms/fields.py:387
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Geçerli bir seçimde bulunun; %s mevcut değerlerden biri değil."
+
+#: newforms/fields.py:101 newforms/fields.py:254
+#, python-format
+msgid "Ensure this value has at most %d characters."
+msgstr "Bu deÄŸer en fazla %d karakter olabilir."
+
+#: newforms/fields.py:103 newforms/fields.py:256
+#, python-format
+msgid "Ensure this value has at least %d characters."
+msgstr "Bu deÄŸer en az %d arakter olabilir."
+
+#: newforms/fields.py:128
+#, python-format
+msgid "Ensure this value is less than or equal to %s."
+msgstr ""
+
+#: newforms/fields.py:130
+#, python-format
+msgid "Ensure this value is greater than or equal to %s."
+msgstr ""
+
+#: newforms/fields.py:163
+msgid "Enter a valid date."
+msgstr "Geçerli bir tarih girin."
+
+#: newforms/fields.py:190
+msgid "Enter a valid time."
+msgstr ""
+
+#: newforms/fields.py:226
+msgid "Enter a valid date/time."
+msgstr ""
+
+#: newforms/fields.py:240
+msgid "Enter a valid value."
+msgstr "Geçerli bir değer girin."
+
+#: newforms/fields.py:287 newforms/fields.py:309
+msgid "Enter a valid URL."
+msgstr "Geçerli bir URL girin."
+
+#: newforms/fields.py:311
+msgid "This URL appears to be a broken link."
+msgstr "Bu URL kırık bir link gibi duruyor."
+
+#: 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 "bir"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "two"
+msgstr "iki"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "three"
+msgstr "üç"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "four"
+msgstr "dört"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "five"
+msgstr "beÅŸ"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "six"
+msgstr "altı"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "seven"
+msgstr "yedi"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "eight"
+msgstr "sekiz"
+
+#: contrib/humanize/templatetags/humanize.py:68
+msgid "nine"
+msgstr "dokuz"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "eski adres"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Buraya tam dosya yolu, alan adı kullanılmadan yazılmalı. Örnek: '/events/"
+"search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "yeni adres"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Buraya tam dosya yolu (yukarıdaki gibi), ya da 'http://' ile başlayan tam "
+"adres yazılmalı."
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "yönlendirme"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "yönlendirmeler"
+
+#: contrib/comments/models.py:67 contrib/comments/models.py:166
+msgid "object ID"
+msgstr "nesne no"
+
+#: contrib/comments/models.py:68
+msgid "headline"
+msgstr "başlık"
+
+#: contrib/comments/models.py:69 contrib/comments/models.py:90
+#: contrib/comments/models.py:167
+msgid "comment"
+msgstr "yorum"
+
+#: contrib/comments/models.py:70
+msgid "rating #1"
+msgstr "reyting 1"
+
+#: contrib/comments/models.py:71
+msgid "rating #2"
+msgstr "reyting 2"
+
+#: contrib/comments/models.py:72
+msgid "rating #3"
+msgstr "reyting 3"
+
+#: contrib/comments/models.py:73
+msgid "rating #4"
+msgstr "reyting 4"
+
+#: contrib/comments/models.py:74
+msgid "rating #5"
+msgstr "reyting 5"
+
+#: contrib/comments/models.py:75
+msgid "rating #6"
+msgstr "reyting 6"
+
+#: contrib/comments/models.py:76
+msgid "rating #7"
+msgstr "reyting 7"
+
+#: contrib/comments/models.py:77
+msgid "rating #8"
+msgstr "reyting 8"
+
+#: contrib/comments/models.py:82
+msgid "is valid rating"
+msgstr "geçerli reyting"
+
+#: contrib/comments/models.py:83 contrib/comments/models.py:169
+msgid "date/time submitted"
+msgstr "gönderim tarihi/saati"
+
+#: contrib/comments/models.py:84 contrib/comments/models.py:170
+msgid "is public"
+msgstr "görünürlük"
+
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304
+msgid "IP address"
+msgstr "IP adresi"
+
+#: contrib/comments/models.py:86
+msgid "is removed"
+msgstr "silinmiÅŸ"
+
+#: contrib/comments/models.py:86
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Yorum uygunsuz ise bu işareti kaldırın. \"Yorum silindi\" uyarısı "
+"görüntülenecek."
+
+#: contrib/comments/models.py:91
+msgid "comments"
+msgstr "yorumlar"
+
+#: contrib/comments/models.py:131 contrib/comments/models.py:207
+msgid "Content object"
+msgstr "İçerik nesnesi"
+
+#: contrib/comments/models.py:159
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+"%(date)s tarihinde %(user)s göndermiş:\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:168
+msgid "person's name"
+msgstr "isim"
+
+#: contrib/comments/models.py:171
+msgid "ip address"
+msgstr "ip adresi"
+
+#: contrib/comments/models.py:173
+msgid "approved by staff"
+msgstr "yönetici onayı"
+
+#: contrib/comments/models.py:176
+msgid "free comment"
+msgstr "serbest yorum"
+
+#: contrib/comments/models.py:177
+msgid "free comments"
+msgstr "serbest yorumlar"
+
+#: contrib/comments/models.py:233
+msgid "score"
+msgstr "puan"
+
+#: contrib/comments/models.py:234
+msgid "score date"
+msgstr "puan tarihi"
+
+#: contrib/comments/models.py:237
+msgid "karma score"
+msgstr "karma puanı"
+
+#: contrib/comments/models.py:238
+msgid "karma scores"
+msgstr "karma puanları"
+
+#: contrib/comments/models.py:242
+#, python-format
+msgid "%(score)d rating by %(user)s"
+msgstr "%(user)s tarafından %(score)d puan"
+
+#: contrib/comments/models.py:258
+#, python-format
+msgid ""
+"This comment was flagged by %(user)s:\n"
+"\n"
+"%(text)s"
+msgstr ""
+"Bu yorum %(user)s tarafından işaretlenmiş:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/models.py:265
+msgid "flag date"
+msgstr "iÅŸaretleme tarihi"
+
+#: contrib/comments/models.py:268
+msgid "user flag"
+msgstr "kullanıcı işareti"
+
+#: contrib/comments/models.py:269
+msgid "user flags"
+msgstr "kullanıcı işaretleri"
+
+#: contrib/comments/models.py:273
+#, python-format
+msgid "Flag by %r"
+msgstr "%r tarafından işaret"
+
+#: contrib/comments/models.py:278
+msgid "deletion date"
+msgstr "silme tarihi"
+
+#: contrib/comments/models.py:280
+msgid "moderator deletion"
+msgstr "yönetici tarafından silinme"
+
+#: contrib/comments/models.py:281
+msgid "moderator deletions"
+msgstr "yönetici tarafından silinme"
+
+#: contrib/comments/models.py:285
+#, python-format
+msgid "Moderator deletion by %r"
+msgstr "%s tarafından silme işlemi"
+
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "Kayıtsız kullanıcılar oy veremez"
+
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "Geçersiz yorum numarası"
+
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "Kendinize oy veremezsiniz"
+
+#: contrib/comments/views/comments.py:27
+msgid ""
+"This rating is required because you've entered at least one other rating."
+msgstr "Reyting gerekli, çünkü en az bir reyting tanımladınız."
+
+#: 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] ""
+"Bu yorum, %(count)s yorumdan daha az gönderide bulunmuş bir kullanıcıya "
+"ait:\n"
+"\n"
+"%(text)s"
+msgstr[1] ""
+"Bu yorum, %(count)s yorumdan daha az gönderide bulunmuş bir kullanıcıya "
+"ait:\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 ""
+"Bu yorum kusurlu bir kullanıcı tarafından gönderildi:\n"
+"\n"
+"%(text)s"
+
+#: contrib/comments/views/comments.py:188
+#: contrib/comments/views/comments.py:280
+msgid "Only POSTs are allowed"
+msgstr "Sadece POST yapılabilir"
+
+#: contrib/comments/views/comments.py:192
+#: contrib/comments/views/comments.py:284
+msgid "One or more of the required fields wasn't submitted"
+msgstr "Bir ya da daha fazla gerekli alan doldurulmadı"
+
+#: contrib/comments/views/comments.py:196
+#: contrib/comments/views/comments.py:286
+msgid "Somebody tampered with the comment form (security violation)"
+msgstr ""
+"Birisi yorum gönderme formunu kötüye kullanmaya çalıştı (güvenlik ihlali)"
+
+#: 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 ""
+"Bu yorumun geçersiz bir 'hedef' parametresi var -- nesne narası geçersiz"
+
+#: contrib/comments/views/comments.py:257
+#: contrib/comments/views/comments.py:321
+msgid "The comment form didn't provide either 'preview' or 'post'"
+msgstr "Yorum görüntülememe mi yoksa gönderme amaçlı mı belirsiz"
+
+#: contrib/comments/templates/comments/form.html:6
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:17
+msgid "Username:"
+msgstr "Kullanıcı:"
+
+#: 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 "Çık"
+
+#: contrib/comments/templates/comments/form.html:8
+#: contrib/admin/templates/admin/login.html:20
+msgid "Password:"
+msgstr "Parola:"
+
+#: contrib/comments/templates/comments/form.html:8
+msgid "Forgotten your password?"
+msgstr "Parolanızı mı unuttunuz?"
+
+#: contrib/comments/templates/comments/form.html:12
+msgid "Ratings"
+msgstr "Reytingler"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Required"
+msgstr "Gerekli"
+
+#: contrib/comments/templates/comments/form.html:12
+#: contrib/comments/templates/comments/form.html:23
+msgid "Optional"
+msgstr "Opsiyonel"
+
+#: contrib/comments/templates/comments/form.html:23
+msgid "Post a photo"
+msgstr "Resim gönder"
+
+#: contrib/comments/templates/comments/form.html:28
+#: contrib/comments/templates/comments/freeform.html:5
+msgid "Comment:"
+msgstr "Yorum:"
+
+#: contrib/comments/templates/comments/form.html:35
+#: contrib/comments/templates/comments/freeform.html:10
+msgid "Preview comment"
+msgstr "Yorumu görüntüle"
+
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Ä°sminiz:"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "alan adı"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "görülen isim"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "site"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "siteler"
+
+#: contrib/admin/filterspecs.py:40
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>%s nesnesine göre:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
+#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169
+msgid "All"
+msgstr "Tümü"
+
+#: contrib/admin/filterspecs.py:109
+msgid "Any date"
+msgstr "Herhangi bir tarih"
+
+#: contrib/admin/filterspecs.py:110
+msgid "Today"
+msgstr "Bugün"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Past 7 days"
+msgstr "7 gün içinde"
+
+#: contrib/admin/filterspecs.py:115
+msgid "This month"
+msgstr "Bu ay"
+
+#: contrib/admin/filterspecs.py:117
+msgid "This year"
+msgstr "Bu yıl"
+
+#: contrib/admin/models.py:16
+msgid "action time"
+msgstr "işlem zamanı"
+
+#: contrib/admin/models.py:19
+msgid "object id"
+msgstr "nesne no"
+
+#: contrib/admin/models.py:20
+msgid "object repr"
+msgstr "nesne kodu"
+
+#: contrib/admin/models.py:21
+msgid "action flag"
+msgstr "işlem adı"
+
+#: contrib/admin/models.py:22
+msgid "change message"
+msgstr "mesajı değiştir"
+
+#: contrib/admin/models.py:25
+msgid "log entry"
+msgstr "giriÅŸi kaydet"
+
+#: contrib/admin/models.py:26
+msgid "log entries"
+msgstr "giriÅŸleri kaydet"
+
+#: contrib/admin/templatetags/admin_list.py:247
+msgid "All dates"
+msgstr "Tüm tarihler"
+
+#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "\"%(obj)s\" isimli %(name)s eklendi."
+
+#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
+#: contrib/admin/views/main.py:347
+msgid "You may edit it again below."
+msgstr "Tekrar düzenleyebilirsiniz."
+
+#: contrib/admin/views/auth.py:30
+msgid "Add user"
+msgstr "Kullanıcı ekle"
+
+#: contrib/admin/views/auth.py:57
+msgid "Password changed successfully."
+msgstr "Parola başarı ile değiştirildi."
+
+#: contrib/admin/views/auth.py:64
+#, python-format
+msgid "Change password: %s"
+msgstr "Parola deÄŸiÅŸtir: %s"
+
+#: contrib/admin/views/main.py:223
+msgid "Site administration"
+msgstr "Site yönetimi"
+
+#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#, python-format
+msgid "You may add another %s below."
+msgstr "Yeni bir %s ekleyebilirsiniz."
+
+#: contrib/admin/views/main.py:289
+#, python-format
+msgid "Add %s"
+msgstr "%s ekle"
+
+#: contrib/admin/views/main.py:335
+#, python-format
+msgid "Added %s."
+msgstr "%s eklendi."
+
+#: contrib/admin/views/main.py:337
+#, python-format
+msgid "Changed %s."
+msgstr "%s deÄŸiÅŸtirildi."
+
+#: contrib/admin/views/main.py:339
+#, python-format
+msgid "Deleted %s."
+msgstr "%s silindi."
+
+#: contrib/admin/views/main.py:342
+msgid "No fields changed."
+msgstr "Hiçbir alan değiştirilmedi."
+
+#: contrib/admin/views/main.py:345
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "\"%(obj)s\" isimli %(name)s deÄŸiÅŸtirildi."
+
+#: contrib/admin/views/main.py:353
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"\"%(obj)s\" isimli %(name)s eklendi. Aşağıda tekrar düzenleyebilirsiniz."
+
+#: contrib/admin/views/main.py:391
+#, python-format
+msgid "Change %s"
+msgstr "%s deÄŸiÅŸtir"
+
+#: contrib/admin/views/main.py:476
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "%(name)s içinde bir ya da daha fazla %(fieldname)s: %(obj)s"
+
+#: contrib/admin/views/main.py:481
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "%(name)s içinde bir ya da daha fazla %(fieldname)s:"
+
+#: contrib/admin/views/main.py:514
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "\"%(obj)s\" isimli %(name)s silindi."
+
+#: contrib/admin/views/main.py:517
+msgid "Are you sure?"
+msgstr "Emin misiniz?"
+
+#: contrib/admin/views/main.py:539
+#, python-format
+msgid "Change history: %s"
+msgstr "%s için değişiklik geçmişi:"
+
+#: contrib/admin/views/main.py:573
+#, python-format
+msgid "Select %s"
+msgstr "%s seç"
+
+#: contrib/admin/views/main.py:573
+#, python-format
+msgid "Select %s to change"
+msgstr "Değiştirilecek %s nesnesini seçin"
+
+#: contrib/admin/views/main.py:768
+msgid "Database error"
+msgstr "Veritabanı hatası"
+
+#: 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 ""
+"Lütfen geçerli bir kullanıcı adı ve parola girin. Tüm alanlar büyük/küçük "
+"harf duyarlıdır."
+
+#: contrib/admin/views/decorators.py:24
+#: contrib/admin/templates/admin/login.html:25
+msgid "Log in"
+msgstr "GiriÅŸ yap"
+
+#: 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 ""
+"Oturumunuzun süresi geçti. Lütfen tekrar giriş yapın. Endişe etmeyin, "
+"gönderiniz kayıt edildi."
+
+#: 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 ""
+"Görünüşe göre tarayıcınız çerezleri kabul etmiyor. Çerez kullanımını aktif "
+"hale getirin ve sayfayı yeniden yükleyin."
+
+#: contrib/admin/views/decorators.py:83
+msgid "Usernames cannot contain the '@' character."
+msgstr "Kullanıcı isminde '@' karakteri bulunamaz."
+
+#: contrib/admin/views/decorators.py:85
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "E-posta adresiniz kullanıcı adınız değil. '%s' kullanın."
+
+#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48
+#: contrib/admin/views/doc.py:50
+msgid "tag:"
+msgstr "etiket:"
+
+#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79
+#: contrib/admin/views/doc.py:81
+msgid "filter:"
+msgstr "filtre:"
+
+#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137
+#: contrib/admin/views/doc.py:139
+msgid "view:"
+msgstr "view:"
+
+#: contrib/admin/views/doc.py:164
+#, python-format
+msgid "App %r not found"
+msgstr "%r uygulaması bulunamadı"
+
+#: contrib/admin/views/doc.py:171
+#, python-format
+msgid "Model %(name)r not found in app %(label)r"
+msgstr "%(name)r modeli %(label)r uygulamasında bulunamadı"
+
+#: contrib/admin/views/doc.py:183
+#, python-format
+msgid "the related `%(label)s.%(type)s` object"
+msgstr "ilgili `%(label)s.%(type)s` nesnesi"
+
+#: 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 "ilgili `%(label)s.%(name)s` nesneleri"
+
+#: contrib/admin/views/doc.py:219
+#, python-format
+msgid "all %s"
+msgstr "tüm %s"
+
+#: contrib/admin/views/doc.py:224
+#, python-format
+msgid "number of %s"
+msgstr "%s sayısı"
+
+#: contrib/admin/views/doc.py:229
+#, python-format
+msgid "Fields on %s objects"
+msgstr "%s nesnesindeki alanlar"
+
+#: 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 "Tamsayı"
+
+#: contrib/admin/views/doc.py:292
+msgid "Boolean (Either True or False)"
+msgstr "Mantıksal (True ya da False)"
+
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "Karakter disizi (en fazla %(maxlength)s)"
+
+#: contrib/admin/views/doc.py:294
+msgid "Comma-separated integers"
+msgstr "Virgülle ayrılmış tamsayılar"
+
+#: contrib/admin/views/doc.py:295
+msgid "Date (without time)"
+msgstr "Tarih (saat yok)"
+
+#: contrib/admin/views/doc.py:296
+msgid "Date (with time)"
+msgstr "Tarih (saat var)"
+
+#: contrib/admin/views/doc.py:297
+msgid "E-mail address"
+msgstr "E-posta adresi"
+
+#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
+msgid "File path"
+msgstr "Dosya yolu"
+
+#: contrib/admin/views/doc.py:300
+msgid "Decimal number"
+msgstr "Ondalık sayı:"
+
+#: contrib/admin/views/doc.py:306
+msgid "Boolean (Either True, False or None)"
+msgstr "Mantıksal (True, False, ya da None)"
+
+#: contrib/admin/views/doc.py:307
+msgid "Relation to parent model"
+msgstr "Ana modelle iliÅŸki"
+
+#: contrib/admin/views/doc.py:308
+msgid "Phone number"
+msgstr "Telefon numarası"
+
+#: contrib/admin/views/doc.py:313
+msgid "Text"
+msgstr "Metin"
+
+#: contrib/admin/views/doc.py:314
+msgid "Time"
+msgstr "Saat"
+
+#: 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 "Åžehir Kodu (iki karakter)"
+
+#: contrib/admin/views/doc.py:317
+msgid "XML text"
+msgstr "XML metni"
+
+#: contrib/admin/views/doc.py:343
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s geçerli vir adres kalıbı değil"
+
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Åžimdiki:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "DeÄŸiÅŸtir:"
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Tarih:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Saat:"
+
+#: 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 "Dokümantasyon"
+
+#: 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 "Parola deÄŸiÅŸtir"
+
+#: 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 "Anasayfa"
+
+#: contrib/admin/templates/admin/change_list.html:12
+#, python-format
+msgid "Add %(name)s"
+msgstr "%(name)s Ekle"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " %(filter_title)s nesnesine göre "
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "History"
+msgstr "Geçmiş"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Tarih/saat"
+
+#: contrib/admin/templates/admin/object_history.html:19
+msgid "User"
+msgstr "Kullanıcı"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Ä°ÅŸlem"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "DATE_WITH_TIME_FULL"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Bu nesnenin işlem geçmişi yok. Muhtemelen yönetici sayfası dışında bir "
+"yerden eklendi."
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Git"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 sonuç"
+msgstr[1] "%(counter)s sonuç"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "toplam %(full_result_count)s"
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Tümünü göster"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django site yöneticisi"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django yönetimi"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Sunucu hatası"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Sunucu hatası (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Sunucu Hatası <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Bir hata oluştu. Hata, e-psota ile site yöneticisine bildirildi ve kısa süre "
+"içinde çözülecktir. Sabrınız için teşekkürler."
+
+#: 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 ""
+"Veritabanı kurulumu ile ilgili bir problem var. İlgili veritabanı "
+"tablolarının kurulu olduğundan ve veritabanının ilgili kullanıcı tarafından "
+"okunabilir olduÄŸundan emin olun."
+
+#: contrib/admin/templates/admin/index.html:17
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "%(name)s uygulamasındaki modeller."
+
+#: contrib/admin/templates/admin/index.html: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 "Ekle"
+
+#: contrib/admin/templates/admin/index.html:34
+msgid "Change"
+msgstr "DeÄŸiÅŸtir"
+
+#: contrib/admin/templates/admin/index.html:44
+msgid "You don't have permission to edit anything."
+msgstr "Ä°ÅŸlem yapmaya yetkiniz yok."
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "Recent Actions"
+msgstr "Geçmiş İşlemler"
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "My Actions"
+msgstr "Ä°ÅŸlemlerim"
+
+#: contrib/admin/templates/admin/index.html:57
+msgid "None available"
+msgstr "Hiç yok"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Sayfa bulunamadı"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Üzgünüm, aradığınız sayfa bulunamadı."
+
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+msgstr "Filtrele"
+
+#: contrib/admin/templates/admin/change_form.html:22
+msgid "View on site"
+msgstr "Sitede görüntüle"
+
+#: 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] "Lütfen aşağıdaki hatayı düzeltin."
+msgstr[1] "Lütfen aşağıdaki hataları düzeltin."
+
+#: contrib/admin/templates/admin/change_form.html:50
+msgid "Ordering"
+msgstr "Sıralama:"
+
+#: contrib/admin/templates/admin/change_form.html:53
+msgid "Order:"
+msgstr "Sıra:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Delete"
+msgstr "Sil"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"'%(escaped_object)s' isimli %(object_name)s nesnesini silmek, bağlantılı "
+"nesnelerin silinmesini gerektiriyor, ancak aşağıdaki nesneleri silme "
+"yetkiniz yok."
+
+#: 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 ""
+"\"%(escaped_object)s\" isimli %(object_name)s nesnesini silmek "
+"istediğinizdenemin misiniz? Aşağıdaki bağlantılı öğeler silinecek:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+msgstr "Evet, eminim"
+
+#: contrib/admin/templates/admin/base.html:25
+msgid "Welcome,"
+msgstr "HoÅŸgeldin,"
+
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "Yeni olarak kaydet"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "Kaydet ve yeni bir tane ekle"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "Kaydet ve düzenlemeye devam et"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "Kaydet"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "<strong>%(username)s</strong> için yeni parola girin."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#: contrib/admin/templates/admin/auth/user/add_form.html:18
+msgid "Password"
+msgstr "Parola"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/add_form.html:23
+msgid "Password (again)"
+msgstr "Parola (tekrar)"
+
+#: 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 "Onaylamak için, yukarıdaki parolanın aynısını girin."
+
+#: 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 ""
+"Önce bir kullanıcı adı ve parola girin. Daha sonra daha fazla bilgi "
+"girebilirsiniz."
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:12
+msgid "Username"
+msgstr "Kullanıcı"
+
+#: 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 "Parola deÄŸiÅŸimi"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Parola değişimi başarılı"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Parolanız değiştirildi."
+
+#: 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 "Parolayı sıfırla"
+
+#: 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 ""
+"Parolanızı mı unuttunuz? E-posta adresinizi aşağıya girin, parolanızı "
+"sıfırlayalım ve e-posta adresinize gönderelim."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-posta adresi:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Parolamı sıfırla"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Web sitesinde zaman geçirdiğiniz için teşekkür ederiz."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Tekrar giriÅŸ yap"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Parola sıfırlandı."
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"Yeni şifreniz, e-posta adresinize gönderildi, kısa süre içinde size "
+"ulaşacaktır."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Güvenliğiniz için, lütfen eski parolanızı girin, sonra da yeni şifrenizi iki "
+"kere girin ve böylece doğru yazdığınızdan emin olun."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Eski parola:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Yeni parola:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Parolayı onayla:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Parolamı değiştir"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Bu e-postayı aldınız çünkü "
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr ""
+"%(site_name)s adresindeki kullanıcı hesabınız için parola sıfırlama "
+"talebinde bulundunuz."
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Yeni parolanız: %(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 "Parolanızı değiştirmek için bu adrese gidebilirsiniz:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Unutma ihtimaline karşı, kullanıcı adınız:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Teşekkürler!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "%(site_name)s Ekibi"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Kısayollar"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "Doküman kısayolları"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">Kısayolları kullanabilmek için, bağlantıyı tarayıcınızdaki "
+"araç çubuğuna sürükleyin, ya da sağ tıklayıp sık kullanılan adresler "
+"listenize ekleyin. Bazı kısayollar, uygulamayı çalıştıran sunucu ile aynı "
+"adreste bulunan istemciler tarafından kullanılabilir.</p>\n"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "Bu sayfa için dokümantasyon"
+
+#: 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 "Sizi, bu sayfayı üreten betiğin dokümantasyonuna yönlendirir."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "Nesne numarasını göster"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:23
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Tek bir nesneyi temsil eden sayfaların içerik türünü ve numarasını gösterir."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "Nesneyi düzenle (aynı pencerede)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:26
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr "Tek bir nesneyi temsil eden sayfaların yönetim sayfasını gösterir."
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "Nesneyi düzenle (yeni pencerede)"
+
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "Yukarıdaki gibi, ancak yönetim sayfasını yeni bir pencerede açar."
+
+#: contrib/contenttypes/models.py:36
+msgid "python model class name"
+msgstr "python model sınıfı"
+
+#: contrib/contenttypes/models.py:39
+msgid "content type"
+msgstr "içerik türü"
+
+#: contrib/contenttypes/models.py:40
+msgid "content types"
+msgstr "içerik türleri"
+
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "Çıkış yapıldı"
+
+#: contrib/auth/models.py:38 contrib/auth/models.py:57
+msgid "name"
+msgstr "isim"
+
+#: contrib/auth/models.py:40
+msgid "codename"
+msgstr "takma ad"
+
+#: contrib/auth/models.py:42
+msgid "permission"
+msgstr "izin"
+
+#: contrib/auth/models.py:43 contrib/auth/models.py:58
+msgid "permissions"
+msgstr "izinler"
+
+#: contrib/auth/models.py:60
+msgid "group"
+msgstr "grup"
+
+#: contrib/auth/models.py:61 contrib/auth/models.py:100
+msgid "groups"
+msgstr "gruplar"
+
+#: contrib/auth/models.py:90
+msgid "username"
+msgstr "kullanıcı adı"
+
+#: contrib/auth/models.py:90
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"Gerekli. 30 karakter ya da da az olmalı. Alfanumerik (harf, rakam ve alt "
+"çizgi) karakterler kullanılabilir."
+
+#: contrib/auth/models.py:91
+msgid "first name"
+msgstr "isim"
+
+#: contrib/auth/models.py:92
+msgid "last name"
+msgstr "soyisim"
+
+#: contrib/auth/models.py:93
+msgid "e-mail address"
+msgstr "e-posta adresi"
+
+#: contrib/auth/models.py:94
+msgid "password"
+msgstr "parola"
+
+#: contrib/auth/models.py:94
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/auth/models.py:95
+msgid "staff status"
+msgstr "yönetici modu"
+
+#: contrib/auth/models.py:95
+msgid "Designates whether the user can log into this admin site."
+msgstr "Kullanıcının yönetici sayfasına girip giremeyeceğini belirler."
+
+#: contrib/auth/models.py:96
+msgid "active"
+msgstr "aktif"
+
+#: contrib/auth/models.py:96
+msgid ""
+"Designates whether this user can log into the Django admin. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Kullanıcının Django yönetim sayfasına girip giremeyeceğini belirler. "
+"Kullanıcı hesabı silmek yerine işareti kaldırın."
+
+#: contrib/auth/models.py:97
+msgid "superuser status"
+msgstr "süper kullanıcı modu"
+
+#: contrib/auth/models.py:97
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Kullanıcının tek tek hak atamasına gerek kalmadan tüm haklara sahip olup "
+"olamayacağını belirler."
+
+#: contrib/auth/models.py:98
+msgid "last login"
+msgstr "son ziyaret"
+
+#: contrib/auth/models.py:99
+msgid "date joined"
+msgstr "kayıt tarihi"
+
+#: 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 ""
+"Özel olarak atanmış hakların yanı sıra, kullanıcının üyesi olduğu grupların "
+"hakları alır."
+
+#: contrib/auth/models.py:102
+msgid "user permissions"
+msgstr "kullanıcı izinleri"
+
+#: contrib/auth/models.py:105
+msgid "user"
+msgstr "kullanıcı"
+
+#: contrib/auth/models.py:106
+msgid "users"
+msgstr "kullanıcılar"
+
+#: contrib/auth/models.py:111
+msgid "Personal info"
+msgstr "KiÅŸisel bilgiler"
+
+#: contrib/auth/models.py:112
+msgid "Permissions"
+msgstr "Ä°zinler"
+
+#: contrib/auth/models.py:113
+msgid "Important dates"
+msgstr "Önemli tarihler"
+
+#: contrib/auth/models.py:114
+msgid "Groups"
+msgstr "Gruplar"
+
+#: contrib/auth/models.py:258
+msgid "message"
+msgstr "mesaj"
+
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:138
+msgid "The two password fields didn't match."
+msgstr "İki parola alanı uyuşmuyor."
+
+#: contrib/auth/forms.py:25
+msgid "A user with that username already exists."
+msgstr "Bu isimde bir kullanıcı zaten var."
+
+#: contrib/auth/forms.py:53
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Web tarayıcınızın çerezleri desteklemediği görülüyor. Çerezler giriş için "
+"gerekli."
+
+#: contrib/auth/forms.py:62
+msgid "This account is inactive."
+msgstr "Bu hesap aktif deÄŸil."
+
+#: contrib/auth/forms.py:85
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Bu e-posta hesabıyla ilişkili kullanıcı bulunmuyor. Kayıtlı olduğunuzdan "
+"emin misiniz?"
+
+#: contrib/auth/forms.py:117
+msgid "The two 'new password' fields didn't match."
+msgstr "İki parola alanı uyuşmuyor."
+
+#: contrib/auth/forms.py:124
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Eski parolanız hatalı. Lütfen tekrar girin."
+
+#: contrib/localflavor/uk/forms.py:18
+msgid "Enter a postcode. A space is required between the two postcode parts."
+msgstr "Posta kodu girin. Posta kodunun iki kısmı arasında bir boşluk bırakın."
+
+#: contrib/localflavor/usa/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr ""
+
+#: contrib/sessions/models.py:51
+msgid "session key"
+msgstr "oturum anahtarı"
+
+#: contrib/sessions/models.py:52
+msgid "session data"
+msgstr "oturum bilgisi"
+
+#: contrib/sessions/models.py:53
+msgid "expire date"
+msgstr "bitiÅŸ tarihi"
+
+#: contrib/sessions/models.py:57
+msgid "session"
+msgstr "oturum"
+
+#: contrib/sessions/models.py:58
+msgid "sessions"
+msgstr "oturumlar"
+
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Örnek: '/about/contact/'. Başında ve sonunda bölü işareti olduğundan emin "
+"olun."
+
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "başlık"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "içerik"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "yorumlara izin ver"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "şablon adı"
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Örnek: 'flatpages/contact_page.html'. Eğer birşey yazılmazsa, sistem "
+"otomatik olarak 'flatpages/default.html' kullanacak."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "kayıt gerekli"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Bu seçili ise, sadece kayıtlı kullanıcılar sayfayı görüntüleyebilir."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "düz sayfa"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "düz sayfalar"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Pazartesi"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Salı"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Çarşamba"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "PerÅŸembe"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Cuma"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Cumartesi"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Pazar"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Ocak"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Åžubat"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Mart"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Nisan"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Mayıs"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Haziran"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Temmuz"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "AÄŸustos"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Eylül"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Ekim"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Kasım"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Aralık"
+
+#: utils/dates.py:19
+msgid "jan"
+msgstr "oca"
+
+#: utils/dates.py:19
+msgid "feb"
+msgstr "ÅŸub"
+
+#: utils/dates.py:19
+msgid "mar"
+msgstr "mar"
+
+#: utils/dates.py:19
+msgid "apr"
+msgstr "nis"
+
+#: utils/dates.py:19
+msgid "may"
+msgstr "may"
+
+#: utils/dates.py:19
+msgid "jun"
+msgstr "haz"
+
+#: utils/dates.py:20
+msgid "jul"
+msgstr "tem"
+
+#: utils/dates.py:20
+msgid "aug"
+msgstr "aÄŸu"
+
+#: utils/dates.py:20
+msgid "sep"
+msgstr "eyl"
+
+#: utils/dates.py:20
+msgid "oct"
+msgstr "eki"
+
+#: utils/dates.py:20
+msgid "nov"
+msgstr "kas"
+
+#: utils/dates.py:20
+msgid "dec"
+msgstr "ara"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Oca."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Åžub."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "AÄŸu."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Eyl."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Eki."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Kas."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Ara."
+
+#: utils/timesince.py:12
+msgid "year"
+msgid_plural "years"
+msgstr[0] "yıl"
+msgstr[1] "yıl"
+
+#: utils/timesince.py:13
+msgid "month"
+msgid_plural "months"
+msgstr[0] "ay"
+msgstr[1] "ay"
+
+#: utils/timesince.py:14
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "hafta"
+msgstr[1] "hafta"
+
+#: utils/timesince.py:15
+msgid "day"
+msgid_plural "days"
+msgstr[0] "gün"
+msgstr[1] "gün"
+
+#: utils/timesince.py:16
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "saat"
+msgstr[1] "saat"
+
+#: utils/timesince.py:17
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "dakika"
+msgstr[1] "dakika"
+
+#: 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:362
+msgid "DATE_FORMAT"
+msgstr "DATE_FORMAT"
+
+#: utils/translation/trans_real.py:363
+msgid "DATETIME_FORMAT"
+msgstr "DATETIME_FORMAT"
+
+#: utils/translation/trans_real.py:364
+msgid "TIME_FORMAT"
+msgstr "TIME_FORMAT"
+
+#: utils/translation/trans_real.py:380
+msgid "YEAR_MONTH_FORMAT"
+msgstr "YEAR_MONTH_FORMAT"
+
+#: utils/translation/trans_real.py:381
+msgid "MONTH_DAY_FORMAT"
+msgstr "MONTH_DAY_FORMAT"
+
+#: template/defaultfilters.py:491
+msgid "yes,no,maybe"
+msgstr "evet,hayır,olabilir"
+
+#~ msgid ""
+#~ "Please enter a different %s. The one you entered is already being used "
+#~ "for %s."
+#~ msgstr ""
+#~ "Lütfen farklı bir %s girin. Girdiğiniz, %s tarihinde bir kez kullanılmış."
+
+#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
+#~ msgstr "'[algo]$[salt]$[hexdigest]' formatında"
+
+#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+#~ msgstr "<a href=\"/password_reset/\">Åžifrenizi mi unuttunuz?</a>"

Added: vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.mo
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/tr/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,109 @@
+# Django 0.95
+# Copyright (C) 2006 Django
+# This file is distributed under the same license as the Django package.
+# Bahadır Kandemir <bahadir at pardus.org.tr>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django 0.95\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-09-30 01:31+0300\n"
+"PO-Revision-Date: 2006-09-30 01:31+0300\n"
+"Last-Translator: Bahadır Kandemir <bahadir at pardus.org.tr>\n"
+"Language-Team: Bahadır Kandemir <bahadir at pardus.org.tr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr "Mevcut %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr "Hepsini seç"
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr "Ekle"
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr "Kaldır"
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr "Seçilen %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr "Seçiminizi yapın ve tıklayın "
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr "Hepsini temizle"
+
+#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr "Ocak Şubat Mart Nisan Mayıs Haziran Temmuz Ağustos Eylül Ekim Kasım "
+"Aralık"
+
+#: contrib/admin/media/js/dateparse.js:27
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Pazar Pazartesi Salı Çarşamba Perşembe Cuma Cumartesi"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "P P S Ç P C C"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Now"
+msgstr "Åžimdi"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+msgid "Clock"
+msgstr "Saat"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+msgid "Choose a time"
+msgstr "Saat seçin"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Midnight"
+msgstr "Geceyarısı"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "6 a.m."
+msgstr "Sabah 6"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Noon"
+msgstr "Öğle"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+msgid "Cancel"
+msgstr "Ä°ptal"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+msgid "Today"
+msgstr "Bugün"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+msgid "Calendar"
+msgstr "Takvim"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+msgid "Yesterday"
+msgstr "Dün"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+msgid "Tomorrow"
+msgstr "Yarın"

Modified: vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/django.po
===================================================================
--- vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/django.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/django.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,7 +8,7 @@
 "Project-Id-Version: django v1.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:10+0200\n"
-"PO-Revision-Date: 2006-05-17 13:47+0800\n"
+"PO-Revision-Date: 2006-09-01 22:05+0800\n"
 "Last-Translator: limodou <limodou at gmail.com>\n"
 "Language-Team: Simplified Chinese <limodou at gmail.com>\n"
 "MIME-Version: 1.0\n"
@@ -1167,7 +1167,7 @@
 
 #: contrib/auth/models.py:77
 msgid "Permissions"
-msgstr "许可"
+msgstr "权限"
 
 #: contrib/auth/models.py:78
 msgid "Important dates"

Modified: vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo
===================================================================
(Binary files differ)

Modified: vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po
===================================================================
--- vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,22 +3,21 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: Django 0.95\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-03-21 18:43+0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <max at exoweb.net>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
+"PO-Revision-Date: 2006-09-25 08:35+0800\n"
+"Last-Translator: limodou <limodou at gmail.com>\n"
+"Language-Team: limodou <limodou at gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 #: contrib/admin/media/js/SelectFilter2.js:33
 msgid "Available %s"
-msgstr "可行 %s"
+msgstr "可用 %s"
 
 #: contrib/admin/media/js/SelectFilter2.js:41
 msgid "Choose all"
@@ -30,34 +29,32 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:48
 msgid "Remove"
-msgstr "移出"
+msgstr "删除"
 
 #: contrib/admin/media/js/SelectFilter2.js:53
 msgid "Chosen %s"
-msgstr "选择 %s"
+msgstr "选中的 %s"
 
 #: contrib/admin/media/js/SelectFilter2.js:54
 msgid "Select your choice(s) and click "
-msgstr "挑选你的选择并且点击 "
+msgstr "选择并点击 "
 
 #: contrib/admin/media/js/SelectFilter2.js:59
 msgid "Clear all"
-msgstr "清除所有"
+msgstr "清除全部"
 
 #: contrib/admin/media/js/dateparse.js:32
 #: contrib/admin/media/js/calendar.js:24
-msgid ""
-"January February March April May June July August September October November "
-"December"
+msgid "January February March April May June July August September October November December"
 msgstr "一月 二月 三月 四月 五月 六月 六月 七月 八月 九月 十月 十一月 十二月"
 
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "星期天 星期一 星期二 星期三 星期四 星期五 星期六"
+msgstr "星期日 星期一 星期二 星期三 星期四 星期五 星期六"
 
 #: contrib/admin/media/js/calendar.js:25
 msgid "S M T W T F S"
-msgstr "日 月 火 水 木 金 土"
+msgstr "日 一 二 三 四 五 六"
 
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
@@ -105,3 +102,4 @@
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
 msgid "Tomorrow"
 msgstr "明天"
+

Modified: vendor/django/current/django/conf/project_template/settings.py
===================================================================
--- vendor/django/current/django/conf/project_template/settings.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/project_template/settings.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -9,15 +9,18 @@
 
 MANAGERS = ADMINS
 
-DATABASE_ENGINE = ''           # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
+DATABASE_ENGINE = ''           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
 DATABASE_NAME = ''             # Or path to database file if using sqlite3.
 DATABASE_USER = ''             # Not used with sqlite3.
 DATABASE_PASSWORD = ''         # Not used with sqlite3.
 DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
 DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
 
-# Local time zone for this installation. All choices can be found here:
-# http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
+# Local time zone for this installation. Choices can be found here:
+# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
+# although not all variations may be possible on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
 TIME_ZONE = 'America/Chicago'
 
 # Language code for this installation. All choices can be found here:
@@ -27,6 +30,10 @@
 
 SITE_ID = 1
 
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
 # Absolute path to the directory that holds media.
 # Example: "/home/media/media.lawrence.com/"
 MEDIA_ROOT = ''
@@ -60,8 +67,9 @@
 ROOT_URLCONF = '{{ project_name }}.urls'
 
 TEMPLATE_DIRS = (
-    # Put strings here, like "/home/html/django_templates".
+    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
     # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
 )
 
 INSTALLED_APPS = (

Modified: vendor/django/current/django/conf/project_template/urls.py
===================================================================
--- vendor/django/current/django/conf/project_template/urls.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/project_template/urls.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,7 +2,7 @@
 
 urlpatterns = patterns('',
     # Example:
-    # (r'^{{ project_name }}/', include('{{ project_name }}.apps.foo.urls.foo')),
+    # (r'^{{ project_name }}/', include('{{ project_name }}.foo.urls')),
 
     # Uncomment this for admin:
 #     (r'^admin/', include('django.contrib.admin.urls')),

Modified: vendor/django/current/django/conf/urls/defaults.py
===================================================================
--- vendor/django/current/django/conf/urls/defaults.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/conf/urls/defaults.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -10,8 +10,10 @@
 def patterns(prefix, *tuples):
     pattern_list = []
     for t in tuples:
-        if type(t[1]) == list:
-            pattern_list.append(RegexURLResolver(t[0], t[1][0]))
+        regex, view_or_include = t[:2]
+        default_kwargs = t[2:]
+        if type(view_or_include) == list:
+            pattern_list.append(RegexURLResolver(regex, view_or_include[0], *default_kwargs))
         else:
-            pattern_list.append(RegexURLPattern(t[0], prefix and (prefix + '.' + t[1]) or t[1], *t[2:]))
+            pattern_list.append(RegexURLPattern(regex, prefix and (prefix + '.' + view_or_include) or view_or_include, *default_kwargs))
     return pattern_list

Modified: vendor/django/current/django/contrib/admin/media/css/forms.css
===================================================================
--- vendor/django/current/django/contrib/admin/media/css/forms.css	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/css/forms.css	2007-07-19 22:25:20 UTC (rev 7717)
@@ -57,4 +57,4 @@
 .vURLField { width:30em; }
 .vLargeTextField, .vXMLLargeTextField { width:48em; }
 .flatpages-flatpage #id_content { height:40.2em; }
-.module table .vPositiveSmallIntegerField { width:2.2em; }
\ No newline at end of file
+.module table .vPositiveSmallIntegerField { width:2.2em; }

Modified: vendor/django/current/django/contrib/admin/media/css/global.css
===================================================================
--- vendor/django/current/django/contrib/admin/media/css/global.css	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/css/global.css	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,4 @@
-body { margin:0; padding:0; font-size:12px; font-family:"Lucida Grande","Bitstream Vera Sans",Verdana,Arial,sans-serif; color:#333; background:#fff; }
+body { margin:0; padding:0; font-size:12px; font-family:"Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; color:#333; background:#fff; }
 
 /* LINKS */
 a:link, a:visited { color: #5b80b2; text-decoration:none; }

Modified: vendor/django/current/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
===================================================================
--- vendor/django/current/django/contrib/admin/media/js/admin/DateTimeShortcuts.js	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/js/admin/DateTimeShortcuts.js	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,7 +8,9 @@
     clockInputs: [],
     calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
     calendarDivName2: 'calendarin',  // name of <div> that contains calendar
+    calendarLinkName: 'calendarlink',// name of the link that is used to toggle
     clockDivName: 'clockbox',        // name of clock <div> that gets toggled
+    clockLinkName: 'clocklink',      // name of the link that is used to toggle
     admin_media_prefix: '',
     init: function() {
         // Deduce admin_media_prefix by looking at the <script>s in the
@@ -42,10 +44,11 @@
         var shortcuts_span = document.createElement('span');
         inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
         var now_link = document.createElement('a');
-        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());");
+        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());");
         now_link.appendChild(document.createTextNode(gettext('Now')));
         var clock_link = document.createElement('a');
         clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
+        clock_link.id = DateTimeShortcuts.clockLinkName + num;
         quickElement('img', clock_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_clock.gif', 'alt', gettext('Clock'));
         shortcuts_span.appendChild(document.createTextNode('\240'));
         shortcuts_span.appendChild(now_link);
@@ -69,17 +72,6 @@
         var clock_box = document.createElement('div');
         clock_box.style.display = 'none';
         clock_box.style.position = 'absolute';
-        if (getStyle(document.body,'direction')!='rtl') {
-            clock_box.style.left = findPosX(clock_link) + 17 + 'px';
-        }
-        else {
-            // since style's width is in em, it'd be tough to calculate
-            // px value of it. let's use an estimated px for now
-            // TODO: IE returns wrong value for findPosX when in rtl mode
-            //       (it returns as it was left aligned), needs to be fixed.
-            clock_box.style.left = findPosX(clock_link) - 110 + 'px';
-        }
-        clock_box.style.top = findPosY(clock_link) - 30 + 'px';
         clock_box.className = 'clockbox module';
         clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num);
         document.body.appendChild(clock_box);
@@ -88,17 +80,35 @@
         quickElement('h2', clock_box, gettext('Choose a time'));
         time_list = quickElement('ul', clock_box, '');
         time_list.className = 'timelist';
-        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());")
-        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00');")
-        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00');")
-        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00');")
+        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());")
+        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00:00');")
+        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00:00');")
+        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00:00');")
 
         cancel_p = quickElement('p', clock_box, '');
         cancel_p.className = 'calendar-cancel';
         quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');');
     },
     openClock: function(num) {
-        document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'block';
+        var clock_box = document.getElementById(DateTimeShortcuts.clockDivName+num)
+        var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName+num)
+    
+        // Recalculate the clockbox position
+        // is it left-to-right or right-to-left layout ?
+        if (getStyle(document.body,'direction')!='rtl') {
+            clock_box.style.left = findPosX(clock_link) + 17 + 'px';
+        }
+        else {
+            // since style's width is in em, it'd be tough to calculate
+            // px value of it. let's use an estimated px for now
+            // TODO: IE returns wrong value for findPosX when in rtl mode
+            //       (it returns as it was left aligned), needs to be fixed.
+            clock_box.style.left = findPosX(clock_link) - 110 + 'px';
+        }
+        clock_box.style.top = findPosY(clock_link) - 30 + 'px';
+    
+        // Show the clock box
+        clock_box.style.display = 'block';
         addEvent(window, 'click', function() { DateTimeShortcuts.dismissClock(num); return true; });
     },
     dismissClock: function(num) {
@@ -123,6 +133,7 @@
         today_link.appendChild(document.createTextNode(gettext('Today')));
         var cal_link = document.createElement('a');
         cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');');
+        cal_link.id = DateTimeShortcuts.calendarLinkName + num;
         quickElement('img', cal_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_calendar.gif', 'alt', gettext('Calendar'));
         shortcuts_span.appendChild(document.createTextNode('\240'));
         shortcuts_span.appendChild(today_link);
@@ -149,18 +160,6 @@
         var cal_box = document.createElement('div');
         cal_box.style.display = 'none';
         cal_box.style.position = 'absolute';
-        // is it left-to-right or right-to-left layout ?
-        if (getStyle(document.body,'direction')!='rtl') {
-            cal_box.style.left = findPosX(cal_link) + 17 + 'px';
-        }
-        else {
-            // since style's width is in em, it'd be tough to calculate
-            // px value of it. let's use an estimated px for now
-            // TODO: IE returns wrong value for findPosX when in rtl mode
-            //       (it returns as it was left aligned), needs to be fixed.
-            cal_box.style.left = findPosX(cal_link) - 180 + 'px';
-        }
-        cal_box.style.top = findPosY(cal_link) - 75 + 'px';
         cal_box.className = 'calendarbox module';
         cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num);
         document.body.appendChild(cal_box);
@@ -172,7 +171,6 @@
         cal_nav_prev.className = 'calendarnav-previous';
         var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');');
         cal_nav_next.className = 'calendarnav-next';
-        cal_box.appendChild(cal_nav);
 
         // main box
         var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
@@ -195,7 +193,24 @@
         quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');');
     },
     openCalendar: function(num) {
-        document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'block';
+        var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num)
+        var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num)
+    
+        // Recalculate the clockbox position
+        // is it left-to-right or right-to-left layout ?
+        if (getStyle(document.body,'direction')!='rtl') {
+            cal_box.style.left = findPosX(cal_link) + 17 + 'px';
+        }
+        else {
+            // since style's width is in em, it'd be tough to calculate
+            // px value of it. let's use an estimated px for now
+            // TODO: IE returns wrong value for findPosX when in rtl mode
+            //       (it returns as it was left aligned), needs to be fixed.
+            cal_box.style.left = findPosX(cal_link) - 180 + 'px';
+        }
+        cal_box.style.top = findPosY(cal_link) - 75 + 'px';
+    
+        cal_box.style.display = 'block';
         addEvent(window, 'click', function() { DateTimeShortcuts.dismissCalendar(num); return true; });
     },
     dismissCalendar: function(num) {

Modified: vendor/django/current/django/contrib/admin/media/js/admin/RelatedObjectLookups.js
===================================================================
--- vendor/django/current/django/contrib/admin/media/js/admin/RelatedObjectLookups.js	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/js/admin/RelatedObjectLookups.js	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,7 +11,7 @@
     } else {
         href = triggeringLink.href + '?pop=1';
     }
-    var win = window.open(href, name, 'height=500,width=740,resizable=yes,scrollbars=yes');
+    var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
     win.focus();
     return false;
 }

Modified: vendor/django/current/django/contrib/admin/media/js/core.js
===================================================================
--- vendor/django/current/django/contrib/admin/media/js/core.js	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/js/core.js	2007-07-19 22:25:20 UTC (rev 7717)
@@ -119,6 +119,10 @@
     return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
 }
 
+Date.prototype.getTwoDigitSecond = function() {
+    return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
+}
+
 Date.prototype.getISODate = function() {
     return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate();
 }
@@ -127,6 +131,10 @@
     return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
 }
 
+Date.prototype.getHourMinuteSecond = function() {
+    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
+}
+
 // ----------------------------------------------------------------------------
 // String object extensions
 // ----------------------------------------------------------------------------

Modified: vendor/django/current/django/contrib/admin/media/js/dateparse.js
===================================================================
--- vendor/django/current/django/contrib/admin/media/js/dateparse.js	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/js/dateparse.js	2007-07-19 22:25:20 UTC (rev 7717)
@@ -169,8 +169,8 @@
         handler: function(bits) {
             var d = new Date();
             d.setYear(parseInt(bits[1]));
+            d.setMonth(parseInt(bits[2], 10) - 1);
             d.setDate(parseInt(bits[3], 10));
-            d.setMonth(parseInt(bits[2], 10) - 1);
             return d;
         }
     },

Modified: vendor/django/current/django/contrib/admin/media/js/urlify.js
===================================================================
--- vendor/django/current/django/contrib/admin/media/js/urlify.js	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/media/js/urlify.js	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,7 +7,7 @@
                   "with"];
     r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
     s = s.replace(r, '');
-    s = s.replace(/[^-A-Z0-9\s]/gi, '');  // remove unneeded chars
+    s = s.replace(/[^-\w\s]/g, '');  // remove unneeded chars
     s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
     s = s.replace(/[-\s]+/g, '-');   // convert spaces to hyphens
     s = s.toLowerCase();             // convert to lowercase

Added: vendor/django/current/django/contrib/admin/templates/admin/auth/user/add_form.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/auth/user/add_form.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/auth/user/add_form.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,28 @@
+{% extends "admin/change_form.html" %}
+{% load i18n %}
+
+{% block after_field_sets %}
+
+<p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p>
+
+<fieldset class="module aligned">
+
+<div class="form-row">
+  {{ form.username.html_error_list }}
+  <label for="id_username" class="required">{% trans 'Username' %}:</label> {{ form.username }}
+  <p class="help">{{ username_help_text }}</p>
+</div>
+
+<div class="form-row">
+  {{ form.password1.html_error_list }}
+  <label for="id_password1" class="required">{% trans 'Password' %}:</label> {{ form.password1 }}
+</div>
+
+<div class="form-row">
+  {{ form.password2.html_error_list }}
+  <label for="id_password2" class="required">{% trans 'Password (again)' %}:</label> {{ form.password2 }}
+  <p class="help">{% trans 'Enter the same password as above, for verification.' %}</p>
+</div>
+
+</fieldset>
+{% endblock %}

Added: vendor/django/current/django/contrib/admin/templates/admin/auth/user/change_password.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/auth/user/change_password.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/auth/user/change_password.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,52 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_modify adminmedia %}
+{% block extrahead %}{{ block.super }}
+<script type="text/javascript" src="../../../../jsi18n/"></script>
+{% for js in javascript_imports %}{% include_admin_script js %}{% endfor %}
+{% endblock %}
+{% block stylesheet %}{% admin_media_prefix %}css/forms.css{% endblock %}
+{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+{% block userlinks %}<a href="../../../../doc/">{% trans 'Documentation' %}</a> / <a href="../../../password_change/">{% trans 'Change password' %}</a> / <a href="../../../logout/">{% trans 'Log out' %}</a>{% endblock %}
+{% block breadcrumbs %}{% if not is_popup %}
+<div class="breadcrumbs">
+     <a href="../../../../">{% trans "Home" %}</a> &rsaquo;
+     <a href="../../">{{ opts.verbose_name_plural|capfirst|escape }}</a> &rsaquo;
+     <a href="../">{{ original|truncatewords:"18"|escape }}</a> &rsaquo;
+     {% trans 'Change password' %}
+</div>
+{% endif %}{% endblock %}
+{% block content %}<div id="content-main">
+<form action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
+<div>
+{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
+{% if form.error_dict %}
+    <p class="errornote">
+    {% blocktrans count form.error_dict.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+    </p>
+{% endif %}
+
+<p>{% blocktrans with original.username|escape as username %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktrans %}</p>
+
+<fieldset class="module aligned">
+
+<div class="form-row">
+  {{ form.password1.html_error_list }}
+  <label for="id_password1" class="required">{% trans 'Password' %}:</label> {{ form.password1 }}
+</div>
+
+<div class="form-row">
+  {{ form.password2.html_error_list }}
+  <label for="id_password2" class="required">{% trans 'Password (again)' %}:</label> {{ form.password2 }}
+  <p class="help">{% trans 'Enter the same password as above, for verification.' %}</p>
+</div>
+
+</fieldset>
+
+<div class="submit-row">
+<input type="submit" value="{% trans 'Change password' %}" class="default" />
+</div>
+
+<script type="text/javascript">document.getElementById("{{ first_form_field_id }}").focus();</script>
+</div>
+</form></div>
+{% endblock %}

Modified: vendor/django/current/django/contrib/admin/templates/admin/base.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/base.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/base.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -6,6 +6,7 @@
 {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
 {% block extrastyle %}{% endblock %}
 {% block extrahead %}{% endblock %}
+{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
 </head>
 {% load i18n %}
 
@@ -37,7 +38,10 @@
     <div id="content" class="{% block coltype %}colM{% endblock %}">
         {% block pretitle %}{% endblock %}
         {% block content_title %}{% if title %}<h1>{{ title|escape }}</h1>{% endif %}{% endblock %}
-        {% block content %}{{ content }}{% endblock %}
+        {% block content %}
+        {% block object-tools %}{% endblock %}
+        {{ content }}
+        {% endblock %}
         {% block sidebar %}{% endblock %}
         <br class="clear" />
     </div>

Modified: vendor/django/current/django/contrib/admin/templates/admin/change_form.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/change_form.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/change_form.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -16,12 +16,14 @@
 </div>
 {% endif %}{% endblock %}
 {% block content %}<div id="content-main">
+{% block object-tools %}
 {% if change %}{% if not is_popup %}
   <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li>
   {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
   </ul>
 {% endif %}{% endif %}
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post">{% block form_top %}{% endblock %}
+{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
 <div>
 {% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
 {% if opts.admin.save_on_top %}{% submit_row %}{% endif %}

Modified: vendor/django/current/django/contrib/admin/templates/admin/change_list.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/change_list.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/change_list.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,9 +7,11 @@
 {% block coltype %}flex{% endblock %}
 {% block content %}
 <div id="content-main">
+{% block object-tools %}
 {% if has_add_permission %}
 <ul class="object-tools"><li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name|escape as name %}Add {{ name }}{% endblocktrans %}</a></li></ul>
 {% endif %}
+{% endblock %}
 <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
 {% block search %}{% search_form cl %}{% endblock %}
 {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}

Modified: vendor/django/current/django/contrib/admin/templates/admin/edit_inline_tabular.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/edit_inline_tabular.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/edit_inline_tabular.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,6 +7,7 @@
          <th{{ fw.header_class_attribute }}>{{ fw.field.verbose_name|capfirst|escape }}</th>
       {% endif %}
    {% endfor %}
+   </tr></thead>
    {% for fcw in bound_related_object.form_field_collection_wrappers %}
       {% if change %}{% if original_row_needed %}
          {% if fcw.obj.original %}

Modified: vendor/django/current/django/contrib/admin/templates/admin/login.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/login.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/login.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -19,7 +19,7 @@
   <div class="form-row">
     <label for="id_password">{% trans 'Password:' %}</label> <input type="password" name="password" id="id_password" />
     <input type="hidden" name="this_is_the_login_form" value="1" />
-    <input type="hidden" name="post_data" value="{{ post_data }}" /> {% comment %}<span class="help">{% trans 'Have you <a href="/password_reset/">forgotten your password</a>?' %}</span>{% endcomment %}
+    <input type="hidden" name="post_data" value="{{ post_data }}" /> {#<span class="help">{% trans 'Have you <a href="/password_reset/">forgotten your password</a>?' %}</span>#}
   </div>
   <div class="submit-row">
     <label>&nbsp;</label><input type="submit" value="{% trans 'Log in' %}" />

Modified: vendor/django/current/django/contrib/admin/templates/admin/search_form.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin/search_form.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin/search_form.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,7 +7,7 @@
 <input type="text" size="40" name="{{ search_var }}" value="{{ cl.query|escape }}" id="searchbar" />
 <input type="submit" value="{% trans 'Go' %}" />
 {% if show_result_count %}
-    <span class="small quiet">{% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} (<a href="?">{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</a>)</span>
+    <span class="small quiet">{% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} (<a href="?{% if cl.is_popup %}pop=1{% endif %}">{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</a>)</span>
 {% endif %}
 {% for pair in cl.params.items %}
     {% ifnotequal pair.0 search_var %}<input type="hidden" name="{{ pair.0|escape }}" value="{{ pair.1|escape }}"/>{% endifnotequal %}

Modified: vendor/django/current/django/contrib/admin/templates/admin_doc/model_detail.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin_doc/model_detail.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin_doc/model_detail.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -35,7 +35,7 @@
 <tr>
     <td>{{ field.name }}</td>
     <td>{{ field.data_type }}</td>
-    <td>{% if field.verbose %}{{ field.verbose|escape }}{% endif %}{% if field.help_text %} - {{ field.help_text|escape }}{% endif %}</td>
+    <td>{% if field.verbose %}{{ field.verbose }}{% endif %}{% if field.help_text %} - {{ field.help_text }}{% endif %}</td>
 </tr>
 {% endfor %}
 </tbody>

Modified: vendor/django/current/django/contrib/admin/templates/admin_doc/view_detail.html
===================================================================
--- vendor/django/current/django/contrib/admin/templates/admin_doc/view_detail.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templates/admin_doc/view_detail.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,7 +8,7 @@
 
 <h1>{{ name }}</h1>
 
-<h2 class="subhead">{{ summary|escape }}</h2>
+<h2 class="subhead">{{ summary }}</h2>
 
 <p>{{ body }}</p>
 

Modified: vendor/django/current/django/contrib/admin/templatetags/admin_list.py
===================================================================
--- vendor/django/current/django/contrib/admin/templatetags/admin_list.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templatetags/admin_list.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -84,23 +84,36 @@
                     header = attr.short_description
                 except AttributeError:
                     header = field_name.replace('_', ' ')
-            # Non-field list_display values don't get ordering capability.
-            yield {"text": header}
+
+            # It is a non-field, but perhaps one that is sortable
+            if not getattr(getattr(cl.model, field_name), "admin_order_field", None):
+                yield {"text": header}
+                continue
+
+            # So this _is_ a sortable non-field.  Go to the yield
+            # after the else clause.
         else:
             if isinstance(f.rel, models.ManyToOneRel) and f.null:
                 yield {"text": f.verbose_name}
+                continue
             else:
-                th_classes = []
-                new_order_type = 'asc'
-                if field_name == cl.order_field:
-                    th_classes.append('sorted %sending' % cl.order_type.lower())
-                    new_order_type = {'asc': 'desc', 'desc': 'asc'}[cl.order_type.lower()]
+                header = f.verbose_name
 
-                yield {"text": f.verbose_name,
-                       "sortable": True,
-                       "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}),
-                       "class_attrib": (th_classes and ' class="%s"' % ' '.join(th_classes) or '')}
+        th_classes = []
+        new_order_type = 'asc'
+        if field_name == cl.order_field:
+            th_classes.append('sorted %sending' % cl.order_type.lower())
+            new_order_type = {'asc': 'desc', 'desc': 'asc'}[cl.order_type.lower()]
 
+        yield {"text": header,
+               "sortable": True,
+               "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}),
+               "class_attrib": (th_classes and ' class="%s"' % ' '.join(th_classes) or '')}
+
+def _boolean_icon(field_val):
+    BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
+    return '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val)
+
 def items_for_result(cl, result):
     first = True
     pk = cl.lookup_opts.pk.attname
@@ -114,9 +127,14 @@
             try:
                 attr = getattr(result, field_name)
                 allow_tags = getattr(attr, 'allow_tags', False)
+                boolean = getattr(attr, 'boolean', False)
                 if callable(attr):
                     attr = attr()
-                result_repr = str(attr)
+                if boolean:
+                    allow_tags = True
+                    result_repr = _boolean_icon(attr)
+                else:
+                    result_repr = str(attr)
             except (AttributeError, ObjectDoesNotExist):
                 result_repr = EMPTY_CHANGELIST_VALUE
             else:
@@ -147,8 +165,7 @@
                 row_class = ' class="nowrap"'
             # Booleans are special: We use images.
             elif isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField):
-                BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
-                result_repr = '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val)
+                result_repr = _boolean_icon(field_val)
             # FloatFields are special: Zero-pad the decimals.
             elif isinstance(f, models.FloatField):
                 if field_val is not None:

Modified: vendor/django/current/django/contrib/admin/templatetags/admin_modify.py
===================================================================
--- vendor/django/current/django/contrib/admin/templatetags/admin_modify.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/templatetags/admin_modify.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,6 +11,7 @@
 register = template.Library()
 
 word_re = re.compile('[A-Z][a-z]+')
+absolute_url_re = re.compile(r'^(?:http(?:s)?:/)?/', re.IGNORECASE)
 
 def class_name_to_underscored(name):
     return '_'.join([s.lower() for s in word_re.findall(name)[:-1]])
@@ -18,18 +19,19 @@
 def include_admin_script(script_path):
     """
     Returns an HTML script element for including a script from the admin
-    media url.
+    media url (or other location if an absolute url is given).
 
     Example usage::
 
-        {% include_admin_script js/calendar.js %}
+        {% include_admin_script "js/calendar.js" %}
 
     could return::
 
         <script type="text/javascript" src="/media/admin/js/calendar.js">
     """
-
-    return '<script type="text/javascript" src="%s%s"></script>' % (settings.ADMIN_MEDIA_PREFIX, script_path)
+    if not absolute_url_re.match(script_path):
+        script_path = '%s%s' % (settings.ADMIN_MEDIA_PREFIX, script_path)
+    return '<script type="text/javascript" src="%s"></script>' % script_path
 include_admin_script = register.simple_tag(include_admin_script)
 
 def submit_row(context):
@@ -160,8 +162,10 @@
         context.push()
         if relation.field.rel.edit_inline == models.TABULAR:
             bound_related_object_class = TabularBoundRelatedObject
+        elif relation.field.rel.edit_inline == models.STACKED:
+            bound_related_object_class = StackedBoundRelatedObject
         else:
-            bound_related_object_class = StackedBoundRelatedObject
+            bound_related_object_class = relation.field.rel.edit_inline
         original = context.get('original', None)
         bound_related_object = relation.bind(context['form'], original, bound_related_object_class)
         context['bound_related_object'] = bound_related_object
@@ -175,8 +179,8 @@
 output_all = register.simple_tag(output_all)
 
 def auto_populated_field_script(auto_pop_fields, change = False):
+    t = []
     for field in auto_pop_fields:
-        t = []
         if change:
             t.append('document.getElementById("id_%s")._changed = true;' % field.name)
         else:
@@ -196,7 +200,7 @@
     if f.rel and isinstance(f.rel, models.ManyToManyRel) and f.rel.filter_interface:
         return '<script type="text/javascript">addEvent(window, "load", function(e) {' \
               ' SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % (
-              f.name, f.verbose_name, f.rel.filter_interface-1, settings.ADMIN_MEDIA_PREFIX)
+              f.name, f.verbose_name.replace('"', '\\"'), f.rel.filter_interface-1, settings.ADMIN_MEDIA_PREFIX)
     else:
         return ''
 filter_interface_script_maybe = register.simple_tag(filter_interface_script_maybe)

Modified: vendor/django/current/django/contrib/admin/urls.py
===================================================================
--- vendor/django/current/django/contrib/admin/urls.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/urls.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -21,13 +21,17 @@
     ('^doc/tags/$', 'django.contrib.admin.views.doc.template_tag_index'),
     ('^doc/filters/$', 'django.contrib.admin.views.doc.template_filter_index'),
     ('^doc/views/$', 'django.contrib.admin.views.doc.view_index'),
-    ('^doc/views/jump/$', 'django.contrib.admin.views.doc.jump_to_view'),
     ('^doc/views/(?P<view>[^/]+)/$', 'django.contrib.admin.views.doc.view_detail'),
     ('^doc/models/$', 'django.contrib.admin.views.doc.model_index'),
     ('^doc/models/(?P<app_label>[^\.]+)\.(?P<model_name>[^/]+)/$', 'django.contrib.admin.views.doc.model_detail'),
 #    ('^doc/templates/$', 'django.views.admin.doc.template_index'),
     ('^doc/templates/(?P<template>.*)/$', 'django.contrib.admin.views.doc.template_detail'),
 
+    # "Add user" -- a special-case view
+    ('^auth/user/add/$', 'django.contrib.admin.views.auth.user_add_stage'),
+    # "Change user password" -- another special-case view
+    ('^auth/user/(\d+)/password/$', 'django.contrib.admin.views.auth.user_change_password'),
+
     # Add/change/delete/history
     ('^([^/]+)/([^/]+)/$', 'django.contrib.admin.views.main.change_list'),
     ('^([^/]+)/([^/]+)/add/$', 'django.contrib.admin.views.main.add_stage'),

Added: vendor/django/current/django/contrib/admin/views/auth.py
===================================================================
--- vendor/django/current/django/contrib/admin/views/auth.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/views/auth.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,77 @@
+from django.contrib.admin.views.decorators import staff_member_required
+from django.contrib.auth.forms import UserCreationForm, AdminPasswordChangeForm
+from django.contrib.auth.models import User
+from django.core.exceptions import PermissionDenied
+from django import oldforms, template
+from django.shortcuts import render_to_response, get_object_or_404
+from django.http import HttpResponseRedirect
+from django.utils.html import escape
+
+def user_add_stage(request):
+    if not request.user.has_perm('auth.change_user'):
+        raise PermissionDenied
+    manipulator = UserCreationForm()
+    if request.method == 'POST':
+        new_data = request.POST.copy()
+        errors = manipulator.get_validation_errors(new_data)
+        if not errors:
+            new_user = manipulator.save(new_data)
+            msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': 'user', 'obj': new_user}
+            if request.POST.has_key("_addanother"):
+                request.user.message_set.create(message=msg)
+                return HttpResponseRedirect(request.path)
+            else:
+                request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
+                return HttpResponseRedirect('../%s/' % new_user.id)
+    else:
+        errors = new_data = {}
+    form = oldforms.FormWrapper(manipulator, new_data, errors)
+    return render_to_response('admin/auth/user/add_form.html', {
+        'title': _('Add user'),
+        'form': form,
+        'is_popup': request.REQUEST.has_key('_popup'),
+        'add': True,
+        'change': False,
+        'has_delete_permission': False,
+        'has_change_permission': True,
+        'has_file_field': False,
+        'has_absolute_url': False,
+        'auto_populated_fields': (),
+        'bound_field_sets': (),
+        'first_form_field_id': 'id_username',
+        'opts': User._meta,
+        'username_help_text': User._meta.get_field('username').help_text,
+    }, context_instance=template.RequestContext(request))
+user_add_stage = staff_member_required(user_add_stage)
+
+def user_change_password(request, id):
+    if not request.user.has_perm('auth.change_user'):
+        raise PermissionDenied
+    user = get_object_or_404(User, pk=id)
+    manipulator = AdminPasswordChangeForm(user)
+    if request.method == 'POST':
+        new_data = request.POST.copy()
+        errors = manipulator.get_validation_errors(new_data)
+        if not errors:
+            new_user = manipulator.save(new_data)
+            msg = _('Password changed successfully.')
+            request.user.message_set.create(message=msg)
+            return HttpResponseRedirect('..')
+    else:
+        errors = new_data = {}
+    form = oldforms.FormWrapper(manipulator, new_data, errors)
+    return render_to_response('admin/auth/user/change_password.html', {
+        'title': _('Change password: %s') % escape(user.username),
+        'form': form,
+        'is_popup': request.REQUEST.has_key('_popup'),
+        'add': True,
+        'change': False,
+        'has_delete_permission': False,
+        'has_change_permission': True,
+        'has_absolute_url': False,
+        'first_form_field_id': 'id_password1',
+        'opts': User._meta,
+        'original': user,
+        'show_save': True,
+    }, context_instance=template.RequestContext(request))
+user_change_password = staff_member_required(user_change_password)

Modified: vendor/django/current/django/contrib/admin/views/decorators.py
===================================================================
--- vendor/django/current/django/contrib/admin/views/decorators.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/views/decorators.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -87,7 +87,7 @@
 
         # The user data is correct; log in the user in and continue.
         else:
-            if user.is_staff:
+            if user.is_active and user.is_staff:
                 login(request, user)
                 # TODO: set last_login with an event.
                 user.last_login = datetime.datetime.now()

Modified: vendor/django/current/django/contrib/admin/views/doc.py
===================================================================
--- vendor/django/current/django/contrib/admin/views/doc.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/views/doc.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -43,11 +43,11 @@
         for tag_name, tag_func in library.tags.items():
             title, body, metadata = utils.parse_docstring(tag_func.__doc__)
             if title:
-                title = utils.parse_rst(title, 'tag', 'tag:' + tag_name)
+                title = utils.parse_rst(title, 'tag', _('tag:') + tag_name)
             if body:
-                body = utils.parse_rst(body, 'tag', 'tag:' + tag_name)
+                body = utils.parse_rst(body, 'tag', _('tag:') + tag_name)
             for key in metadata:
-                metadata[key] = utils.parse_rst(metadata[key], 'tag', 'tag:' + tag_name)
+                metadata[key] = utils.parse_rst(metadata[key], 'tag', _('tag:') + tag_name)
             if library in template.builtins:
                 tag_library = None
             else:
@@ -74,11 +74,11 @@
         for filter_name, filter_func in library.filters.items():
             title, body, metadata = utils.parse_docstring(filter_func.__doc__)
             if title:
-                title = utils.parse_rst(title, 'filter', 'filter:' + filter_name)
+                title = utils.parse_rst(title, 'filter', _('filter:') + filter_name)
             if body:
-                body = utils.parse_rst(body, 'filter', 'filter:' + filter_name)
+                body = utils.parse_rst(body, 'filter', _('filter:') + filter_name)
             for key in metadata:
-                metadata[key] = utils.parse_rst(metadata[key], 'filter', 'filter:' + filter_name)
+                metadata[key] = utils.parse_rst(metadata[key], 'filter', _('filter:') + filter_name)
             if library in template.builtins:
                 tag_library = None
             else:
@@ -98,13 +98,13 @@
         return missing_docutils_page(request)
 
     if settings.ADMIN_FOR:
-        settings_modules = [__import__(m, '', '', ['']) for m in settings.ADMIN_FOR]
+        settings_modules = [__import__(m, {}, {}, ['']) for m in settings.ADMIN_FOR]
     else:
         settings_modules = [settings]
 
     views = []
     for settings_mod in settings_modules:
-        urlconf = __import__(settings_mod.ROOT_URLCONF, '', '', [''])
+        urlconf = __import__(settings_mod.ROOT_URLCONF, {}, {}, [''])
         view_functions = extract_views_from_urlpatterns(urlconf.urlpatterns)
         if Site._meta.installed:
             site_obj = Site.objects.get(pk=settings_mod.SITE_ID)
@@ -127,16 +127,16 @@
 
     mod, func = urlresolvers.get_mod_func(view)
     try:
-        view_func = getattr(__import__(mod, '', '', ['']), func)
+        view_func = getattr(__import__(mod, {}, {}, ['']), func)
     except (ImportError, AttributeError):
         raise Http404
     title, body, metadata = utils.parse_docstring(view_func.__doc__)
     if title:
-        title = utils.parse_rst(title, 'view', 'view:' + view)
+        title = utils.parse_rst(title, 'view', _('view:') + view)
     if body:
-        body = utils.parse_rst(body, 'view', 'view:' + view)
+        body = utils.parse_rst(body, 'view', _('view:') + view)
     for key in metadata:
-        metadata[key] = utils.parse_rst(metadata[key], 'model', 'view:' + view)
+        metadata[key] = utils.parse_rst(metadata[key], 'model', _('view:') + view)
     return render_to_response('admin_doc/view_detail.html', {
         'name': view,
         'summary': title,
@@ -161,14 +161,14 @@
     try:
         app_mod = models.get_app(app_label)
     except ImproperlyConfigured:
-        raise Http404, "App %r not found" % app_label
+        raise Http404, _("App %r not found") % app_label
     model = None
     for m in models.get_models(app_mod):
         if m._meta.object_name.lower() == model_name:
             model = m
             break
     if model is None:
-        raise Http404, "Model %r not found in app %r" % (model_name, app_label)
+        raise Http404, _("Model %(name)r not found in app %(label)r") % {'name': model_name, 'label': app_label}
 
     opts = model._meta
 
@@ -180,7 +180,7 @@
         if isinstance(field, models.ForeignKey):
             data_type = related_object_name = field.rel.to.__name__
             app_label = field.rel.to._meta.app_label
-            verbose = utils.parse_rst(("the related `%s.%s` object"  % (app_label, data_type)), 'model', 'model:' + data_type)
+            verbose = utils.parse_rst((_("the related `%(label)s.%(type)s` object")  % {'label': app_label, 'type': data_type}), 'model', _('model:') + data_type)
         else:
             data_type = get_readable_field_data_type(field)
             verbose = field.verbose_name
@@ -202,7 +202,7 @@
                 continue
             verbose = func.__doc__
             if verbose:
-                verbose = utils.parse_rst(utils.trim_docstring(verbose), 'model', 'model:' + opts.module_name)
+                verbose = utils.parse_rst(utils.trim_docstring(verbose), 'model', _('model:') + opts.module_name)
             fields.append({
                 'name': func_name,
                 'data_type': get_return_data_type(func_name),
@@ -211,22 +211,22 @@
 
     # Gather related objects
     for rel in opts.get_all_related_objects():
-        verbose = "related `%s.%s` objects" % (rel.opts.app_label, rel.opts.object_name)
+        verbose = _("related `%(label)s.%(name)s` objects") % {'label': rel.opts.app_label, 'name': rel.opts.object_name}
         accessor = rel.get_accessor_name()
         fields.append({
             'name'      : "%s.all" % accessor,
             'data_type' : 'List',
-            'verbose'   : utils.parse_rst("all " + verbose , 'model', 'model:' + opts.module_name),
+            'verbose'   : utils.parse_rst(_("all %s") % verbose , 'model', _('model:') + opts.module_name),
         })
         fields.append({
             'name'      : "%s.count" % accessor,
             'data_type' : 'Integer',
-            'verbose'   : utils.parse_rst("number of " + verbose , 'model', 'model:' + opts.module_name),
+            'verbose'   : utils.parse_rst(_("number of %s") % verbose , 'model', _('model:') + opts.module_name),
         })
 
     return render_to_response('admin_doc/model_detail.html', {
         'name': '%s.%s' % (opts.app_label, opts.object_name),
-        'summary': "Fields on %s objects" % opts.object_name,
+        'summary': _("Fields on %s objects") % opts.object_name,
         'description': model.__doc__,
         'fields': fields,
     }, context_instance=RequestContext(request))
@@ -235,7 +235,7 @@
 def template_detail(request, template):
     templates = []
     for site_settings_module in settings.ADMIN_FOR:
-        settings_mod = __import__(site_settings_module, '', '', [''])
+        settings_mod = __import__(site_settings_module, {}, {}, [''])
         if Site._meta.installed:
             site_obj = Site.objects.get(pk=settings_mod.SITE_ID)
         else:
@@ -328,15 +328,19 @@
     """
     views = []
     for p in urlpatterns:
-        if hasattr(p, 'get_callback'):
+        if hasattr(p, '_get_callback'):
             try:
-                views.append((p.get_callback(), base + p.regex.pattern))
+                views.append((p._get_callback(), base + p.regex.pattern))
             except ViewDoesNotExist:
                 continue
         elif hasattr(p, '_get_url_patterns'):
-            views.extend(extract_views_from_urlpatterns(p.url_patterns, base + p.regex.pattern))
+            try:
+                patterns = p.url_patterns
+            except ImportError:
+                continue
+            views.extend(extract_views_from_urlpatterns(patterns, base + p.regex.pattern))
         else:
-            raise TypeError, "%s does not appear to be a urlpattern object" % p
+            raise TypeError, _("%s does not appear to be a urlpattern object") % p
     return views
 
 named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)')

Modified: vendor/django/current/django/contrib/admin/views/main.py
===================================================================
--- vendor/django/current/django/contrib/admin/views/main.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/views/main.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,4 @@
-from django import forms, template
+from django import oldforms, template
 from django.conf import settings
 from django.contrib.admin.filterspecs import FilterSpec
 from django.contrib.admin.views.decorators import staff_member_required
@@ -46,8 +46,8 @@
     """
     Ensure that primary key values do not confuse the admin URLs by escaping
     any '/', '_' and ':' characters. Similar to urllib.quote, except that the
-    quoting is slightly different so that it doesn't get autoamtically
-    unquoted by the web browser.
+    quoting is slightly different so that it doesn't get automatically
+    unquoted by the Web browser.
     """
     if type(s) != type(''):
         return s
@@ -226,7 +226,7 @@
 def add_stage(request, app_label, model_name, show_delete=False, form_url='', post_url=None, post_url_continue='../%s/', object_id_override=None):
     model = models.get_model(app_label, model_name)
     if model is None:
-        raise Http404, "App %r, model %r, not found" % (app_label, model_name)
+        raise Http404("App %r, model %r, not found" % (app_label, model_name))
     opts = model._meta
 
     if not request.user.has_perm(app_label + '.' + opts.get_add_permission()):
@@ -263,6 +263,8 @@
                     post_url_continue += "?_popup=1"
                 return HttpResponseRedirect(post_url_continue % pk_value)
             if request.POST.has_key("_popup"):
+                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('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %s, "%s");</script>' % \
                     (pk_value, str(new_object).replace('"', '\\"')))
             elif request.POST.has_key("_addanother"):
@@ -281,7 +283,7 @@
         errors = {}
 
     # Populate the FormWrapper.
-    form = forms.FormWrapper(manipulator, new_data, errors)
+    form = oldforms.FormWrapper(manipulator, new_data, errors)
 
     c = template.RequestContext(request, {
         'title': _('Add %s') % opts.verbose_name,
@@ -300,7 +302,7 @@
     model = models.get_model(app_label, model_name)
     object_id = unquote(object_id)
     if model is None:
-        raise Http404, "App %r, model %r, not found" % (app_label, model_name)
+        raise Http404("App %r, model %r, not found" % (app_label, model_name))
     opts = model._meta
 
     if not request.user.has_perm(app_label + '.' + opts.get_change_permission()):
@@ -311,8 +313,8 @@
 
     try:
         manipulator = model.ChangeManipulator(object_id)
-    except ObjectDoesNotExist:
-        raise Http404
+    except model.DoesNotExist:
+        raise Http404('%s object with primary key %r does not exist' % (model_name, escape(object_id)))
 
     if request.POST:
         new_data = request.POST.copy()
@@ -372,7 +374,7 @@
         errors = {}
 
     # Populate the FormWrapper.
-    form = forms.FormWrapper(manipulator, new_data, errors)
+    form = oldforms.FormWrapper(manipulator, new_data, errors)
     form.original = manipulator.original_object
     form.order_objects = []
 
@@ -452,16 +454,19 @@
             if related.opts.admin and has_related_objs:
                 p = '%s.%s' % (related.opts.app_label, related.opts.get_delete_permission())
                 if not user.has_perm(p):
-                    perms_needed.add(rel_opts_name)
+                    perms_needed.add(related.opts.verbose_name)
     for related in opts.get_all_related_many_to_many_objects():
         if related.opts in opts_seen:
             continue
         opts_seen.append(related.opts)
         rel_opts_name = related.get_accessor_name()
         has_related_objs = False
-        rel_objs = getattr(obj, rel_opts_name, None)
-        if rel_objs:
-            has_related_objs = True
+       
+        # related.get_accessor_name() could return None for symmetrical relationships
+        if rel_opts_name:
+            rel_objs = getattr(obj, rel_opts_name, None)
+            if rel_objs:
+                has_related_objs = True
 
         if has_related_objs:
             for sub_obj in rel_objs.all():
@@ -488,7 +493,7 @@
     model = models.get_model(app_label, model_name)
     object_id = unquote(object_id)
     if model is None:
-        raise Http404, "App %r, model %r, not found" % (app_label, model_name)
+        raise Http404("App %r, model %r, not found" % (app_label, model_name))
     opts = model._meta
     if not request.user.has_perm(app_label + '.' + opts.get_delete_permission()):
         raise PermissionDenied
@@ -525,7 +530,7 @@
     model = models.get_model(app_label, model_name)
     object_id = unquote(object_id)
     if model is None:
-        raise Http404, "App %r, model %r, not found" % (app_label, model_name)
+        raise Http404("App %r, model %r, not found" % (app_label, model_name))
     action_list = LogEntry.objects.filter(object_id=object_id,
         content_type__id__exact=ContentType.objects.get_for_model(model).id).select_related().order_by('action_time')
     # If no history was found, see whether this object even exists.
@@ -653,10 +658,17 @@
             order_field, order_type = ordering[0], 'asc'
         if params.has_key(ORDER_VAR):
             try:
+                field_name = lookup_opts.admin.list_display[int(params[ORDER_VAR])]
                 try:
-                    f = lookup_opts.get_field(lookup_opts.admin.list_display[int(params[ORDER_VAR])])
+                    f = lookup_opts.get_field(field_name)
                 except models.FieldDoesNotExist:
-                    pass
+                    # see if field_name is a name of a non-field
+                    # that allows sorting
+                    try:
+                        attr = getattr(lookup_opts.admin.manager.model, field_name)
+                        order_field = attr.admin_order_field
+                    except IndexError:
+                        pass
                 else:
                     if not isinstance(f.rel, models.ManyToOneRel) or not f.null:
                         order_field = f.name
@@ -711,10 +723,22 @@
         qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field)
 
         # Apply keyword searches.
+        def construct_search(field_name):
+            if field_name.startswith('^'):
+                return "%s__istartswith" % field_name[1:]
+            elif field_name.startswith('='):
+                return "%s__iexact" % field_name[1:]
+            elif field_name.startswith('@'):
+                return "%s__search" % field_name[1:]
+            else:
+                return "%s__icontains" % field_name
+
         if self.lookup_opts.admin.search_fields and self.query:
             for bit in self.query.split():
-                or_queries = [models.Q(**{'%s__icontains' % field_name: bit}) for field_name in self.lookup_opts.admin.search_fields]
+                or_queries = [models.Q(**{construct_search(field_name): bit}) for field_name in self.lookup_opts.admin.search_fields]
                 other_qs = QuerySet(self.model)
+                if qs._select_related:
+                    other_qs = other_qs.select_related()
                 other_qs = other_qs.filter(reduce(operator.or_, or_queries))
                 qs = qs & other_qs
 
@@ -729,7 +753,7 @@
 def change_list(request, app_label, model_name):
     model = models.get_model(app_label, model_name)
     if model is None:
-        raise Http404, "App %r, model %r, not found" % (app_label, model_name)
+        raise Http404("App %r, model %r, not found" % (app_label, model_name))
     if not request.user.has_perm(app_label + '.' + model._meta.get_change_permission()):
         raise PermissionDenied
     try:

Modified: vendor/django/current/django/contrib/admin/views/template.py
===================================================================
--- vendor/django/current/django/contrib/admin/views/template.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/admin/views/template.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,6 +1,6 @@
 from django.contrib.admin.views.decorators import staff_member_required
 from django.core import validators
-from django import template, forms
+from django import template, oldforms
 from django.template import loader
 from django.shortcuts import render_to_response
 from django.contrib.sites.models import Site
@@ -14,7 +14,7 @@
     # get a dict of {site_id : settings_module} for the validator
     settings_modules = {}
     for mod in settings.ADMIN_FOR:
-        settings_module = __import__(mod, '', '', [''])
+        settings_module = __import__(mod, {}, {}, [''])
         settings_modules[settings_module.SITE_ID] = settings_module
     manipulator = TemplateValidator(settings_modules)
     new_data, errors = {}, {}
@@ -25,17 +25,17 @@
             request.user.message_set.create(message='The template is valid.')
     return render_to_response('admin/template_validator.html', {
         'title': 'Template validator',
-        'form': forms.FormWrapper(manipulator, new_data, errors),
+        'form': oldforms.FormWrapper(manipulator, new_data, errors),
     }, context_instance=template.RequestContext(request))
 template_validator = staff_member_required(template_validator)
 
-class TemplateValidator(forms.Manipulator):
+class TemplateValidator(oldforms.Manipulator):
     def __init__(self, settings_modules):
         self.settings_modules = settings_modules
         site_list = Site.objects.in_bulk(settings_modules.keys()).values()
         self.fields = (
-            forms.SelectField('site', is_required=True, choices=[(s.id, s.name) for s in site_list]),
-            forms.LargeTextField('template', is_required=True, rows=25, validator_list=[self.isValidTemplate]),
+            oldforms.SelectField('site', is_required=True, choices=[(s.id, s.name) for s in site_list]),
+            oldforms.LargeTextField('template', is_required=True, rows=25, validator_list=[self.isValidTemplate]),
         )
 
     def isValidTemplate(self, field_data, all_data):

Modified: vendor/django/current/django/contrib/auth/__init__.py
===================================================================
--- vendor/django/current/django/contrib/auth/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -9,7 +9,7 @@
     i = path.rfind('.')
     module, attr = path[:i], path[i+1:]
     try:
-        mod = __import__(module, '', '', [attr])
+        mod = __import__(module, {}, {}, [attr])
     except ImportError, e:
         raise ImproperlyConfigured, 'Error importing authentication backend %s: "%s"' % (module, e)
     try:

Modified: vendor/django/current/django/contrib/auth/create_superuser.py
===================================================================
--- vendor/django/current/django/contrib/auth/create_superuser.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/create_superuser.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -46,6 +46,7 @@
             if not username.isalnum():
                 sys.stderr.write("Error: That username is invalid. Use only letters, digits and underscores.\n")
                 username = None
+                continue
             try:
                 User.objects.get(username=username)
             except User.DoesNotExist:

Modified: vendor/django/current/django/contrib/auth/decorators.py
===================================================================
--- vendor/django/current/django/contrib/auth/decorators.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/decorators.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -26,3 +26,11 @@
     to the log-in page if necessary.
     """
     )
+
+def permission_required(perm, login_url=LOGIN_URL):
+    """
+    Decorator for views that checks whether a user has a particular permission
+    enabled, redirecting to the log-in page if necessary.
+    """
+    return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)
+

Modified: vendor/django/current/django/contrib/auth/forms.py
===================================================================
--- vendor/django/current/django/contrib/auth/forms.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/forms.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,9 +3,32 @@
 from django.contrib.sites.models import Site
 from django.template import Context, loader
 from django.core import validators
-from django import forms
+from django import oldforms
+from django.utils.translation import gettext as _
 
-class AuthenticationForm(forms.Manipulator):
+class UserCreationForm(oldforms.Manipulator):
+    "A form that creates a user, with no privileges, from the given username and password."
+    def __init__(self):
+        self.fields = (
+            oldforms.TextField(field_name='username', length=30, maxlength=30, is_required=True,
+                validator_list=[validators.isAlphaNumeric, self.isValidUsername]),
+            oldforms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True),
+            oldforms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True,
+                validator_list=[validators.AlwaysMatchesOtherField('password1', _("The two password fields didn't match."))]),
+        )
+
+    def isValidUsername(self, field_data, all_data):
+        try:
+            User.objects.get(username=field_data)
+        except User.DoesNotExist:
+            return
+        raise validators.ValidationError, _('A user with that username already exists.')
+
+    def save(self, new_data):
+        "Creates the user."
+        return User.objects.create_user(new_data['username'], '', new_data['password1'])
+
+class AuthenticationForm(oldforms.Manipulator):
     """
     Base class for authenticating users. Extend this to get a form that accepts
     username/password logins.
@@ -19,9 +42,9 @@
         """
         self.request = request
         self.fields = [
-            forms.TextField(field_name="username", length=15, maxlength=30, is_required=True,
+            oldforms.TextField(field_name="username", length=15, maxlength=30, is_required=True,
                 validator_list=[self.isValidUser, self.hasCookiesEnabled]),
-            forms.PasswordField(field_name="password", length=15, maxlength=30, is_required=True),
+            oldforms.PasswordField(field_name="password", length=15, maxlength=30, is_required=True),
         ]
         self.user_cache = None
 
@@ -46,11 +69,11 @@
     def get_user(self):
         return self.user_cache
 
-class PasswordResetForm(forms.Manipulator):
+class PasswordResetForm(oldforms.Manipulator):
     "A form that lets a user request a password reset"
     def __init__(self):
         self.fields = (
-            forms.EmailField(field_name="email", length=40, is_required=True,
+            oldforms.EmailField(field_name="email", length=40, is_required=True,
                 validator_list=[self.isValidUserEmail]),
         )
 
@@ -59,7 +82,7 @@
         try:
             self.user_cache = User.objects.get(email__iexact=new_data)
         except User.DoesNotExist:
-            raise validators.ValidationError, "That e-mail address doesn't have an associated user acount. Are you sure you've registered?"
+            raise validators.ValidationError, _("That e-mail address doesn't have an associated user account. Are you sure you've registered?")
 
     def save(self, domain_override=None, email_template_name='registration/password_reset_email.html'):
         "Calculates a new password randomly and sends it to the user"
@@ -83,24 +106,39 @@
         }
         send_mail('Password reset on %s' % site_name, t.render(Context(c)), None, [self.user_cache.email])
 
-class PasswordChangeForm(forms.Manipulator):
+class PasswordChangeForm(oldforms.Manipulator):
     "A form that lets a user change his password."
     def __init__(self, user):
         self.user = user
         self.fields = (
-            forms.PasswordField(field_name="old_password", length=30, maxlength=30, is_required=True,
+            oldforms.PasswordField(field_name="old_password", length=30, maxlength=30, is_required=True,
                 validator_list=[self.isValidOldPassword]),
-            forms.PasswordField(field_name="new_password1", length=30, maxlength=30, is_required=True,
-                validator_list=[validators.AlwaysMatchesOtherField('new_password2', "The two 'new password' fields didn't match.")]),
-            forms.PasswordField(field_name="new_password2", length=30, maxlength=30, is_required=True),
+            oldforms.PasswordField(field_name="new_password1", length=30, maxlength=30, is_required=True,
+                validator_list=[validators.AlwaysMatchesOtherField('new_password2', _("The two 'new password' fields didn't match."))]),
+            oldforms.PasswordField(field_name="new_password2", length=30, maxlength=30, is_required=True),
         )
 
     def isValidOldPassword(self, new_data, all_data):
         "Validates that the old_password field is correct."
         if not self.user.check_password(new_data):
-            raise validators.ValidationError, "Your old password was entered incorrectly. Please enter it again."
+            raise validators.ValidationError, _("Your old password was entered incorrectly. Please enter it again.")
 
     def save(self, new_data):
         "Saves the new password."
         self.user.set_password(new_data['new_password1'])
         self.user.save()
+
+class AdminPasswordChangeForm(oldforms.Manipulator):
+    "A form used to change the password of a user in the admin interface."
+    def __init__(self, user):
+        self.user = user
+        self.fields = (
+            oldforms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True),
+            oldforms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True,
+                validator_list=[validators.AlwaysMatchesOtherField('password1', _("The two password fields didn't match."))]),
+        )
+
+    def save(self, new_data):
+        "Saves the new password."
+        self.user.set_password(new_data['password1'])
+        self.user.save()

Modified: vendor/django/current/django/contrib/auth/handlers/modpython.py
===================================================================
--- vendor/django/current/django/contrib/auth/handlers/modpython.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/handlers/modpython.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -22,6 +22,8 @@
         os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
 
     from django.contrib.auth.models import User
+    from django import db
+    db.reset_queries()
 
     # check that the username is valid
     kwargs = {'username': req.user, 'is_active': True}
@@ -30,18 +32,21 @@
     if superuser_only:
         kwargs['is_superuser'] = True
     try:
-        user = User.objects.get(**kwargs)
-    except User.DoesNotExist:
-        return apache.HTTP_UNAUTHORIZED
-
-    # check the password and any permission given
-    if user.check_password(req.get_basic_auth_pw()):
-        if permission_name:
-            if user.has_perm(permission_name):
+        try:
+            user = User.objects.get(**kwargs)
+        except User.DoesNotExist:
+            return apache.HTTP_UNAUTHORIZED
+    
+        # check the password and any permission given
+        if user.check_password(req.get_basic_auth_pw()):
+            if permission_name:
+                if user.has_perm(permission_name):
+                    return apache.OK
+                else:
+                    return apache.HTTP_UNAUTHORIZED
+            else:
                 return apache.OK
-            else:
-                return apache.HTTP_UNAUTHORIZED
         else:
-            return apache.OK
-    else:
-        return apache.HTTP_UNAUTHORIZED
+            return apache.HTTP_UNAUTHORIZED
+    finally:
+        db.connection.close()

Modified: vendor/django/current/django/contrib/auth/management.py
===================================================================
--- vendor/django/current/django/contrib/auth/management.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/management.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -16,7 +16,7 @@
         perms.append((_get_permission_codename(action, opts), 'Can %s %s' % (action, opts.verbose_name)))
     return perms + list(opts.permissions)
 
-def create_permissions(app, created_models):
+def create_permissions(app, created_models, verbosity):
     from django.contrib.contenttypes.models import ContentType
     from django.contrib.auth.models import Permission
     app_models = get_models(app)
@@ -27,13 +27,13 @@
         for codename, name in _get_all_permissions(klass._meta):
             p, created = Permission.objects.get_or_create(codename=codename, content_type__pk=ctype.id,
                 defaults={'name': name, 'content_type': ctype})
-            if created:
+            if created and verbosity >= 2:
                 print "Adding permission '%s'" % p
 
-def create_superuser(app, created_models):
+def create_superuser(app, created_models, verbosity, **kwargs):
     from django.contrib.auth.models import User
     from django.contrib.auth.create_superuser import createsuperuser as do_create
-    if User in created_models:
+    if User in created_models and kwargs.get('interactive', True):
         msg = "\nYou just installed Django's auth system, which means you don't have " \
                 "any superusers defined.\nWould you like to create one now? (yes/no): "
         confirm = raw_input(msg)

Modified: vendor/django/current/django/contrib/auth/models.py
===================================================================
--- vendor/django/current/django/contrib/auth/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -33,7 +33,7 @@
 
     Permissions are set globally per type of object, not per specific object instance. It is possible to say "Mary may change news stories," but it's not currently possible to say "Mary may change news stories, but only the ones she created herself" or "Mary may only change news stories that have a certain status or publication date."
 
-    Three basic permissions -- add, create and delete -- are automatically created for each Django model.
+    Three basic permissions -- add, change and delete -- are automatically created for each Django model.
     """
     name = models.CharField(_('name'), maxlength=50)
     content_type = models.ForeignKey(ContentType)
@@ -91,10 +91,10 @@
     first_name = models.CharField(_('first name'), maxlength=30, blank=True)
     last_name = models.CharField(_('last name'), maxlength=30, blank=True)
     email = models.EmailField(_('e-mail address'), blank=True)
-    password = models.CharField(_('password'), maxlength=128, help_text=_("Use '[algo]$[salt]$[hexdigest]'"))
-    is_staff = models.BooleanField(_('staff status'), help_text=_("Designates whether the user can log into this admin site."))
+    password = models.CharField(_('password'), maxlength=128, help_text=_("Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."))
+    is_staff = models.BooleanField(_('staff status'), default=False, help_text=_("Designates whether the user can log into this admin site."))
     is_active = models.BooleanField(_('active'), default=True, help_text=_("Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts."))
-    is_superuser = models.BooleanField(_('superuser status'), help_text=_("Designates that this user has all permissions without explicitly assigning them."))
+    is_superuser = models.BooleanField(_('superuser status'), default=False, help_text=_("Designates that this user has all permissions without explicitly assigning them."))
     last_login = models.DateTimeField(_('last login'), default=models.LazyDate())
     date_joined = models.DateTimeField(_('date joined'), default=models.LazyDate())
     groups = models.ManyToManyField(Group, verbose_name=_('groups'), blank=True,
@@ -126,7 +126,7 @@
     def is_anonymous(self):
         "Always returns False. This is a way of comparing User objects to anonymous users."
         return False
-    
+
     def is_authenticated(self):
         """Always return True. This is a way to tell if the user has been authenticated in templates.
         """
@@ -216,6 +216,8 @@
 
     def has_module_perms(self, app_label):
         "Returns True if the user has any permissions in the given app label."
+        if not self.is_active:
+            return False
         if self.is_superuser:
             return True
         return bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == app_label]))
@@ -268,6 +270,15 @@
     def __str__(self):
         return 'AnonymousUser'
 
+    def __eq__(self, other):
+        return isinstance(other, self.__class__)
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def __hash__(self):
+        return 1 # instances always return the same hash value
+
     def save(self):
         raise NotImplementedError
 
@@ -299,6 +310,6 @@
 
     def is_anonymous(self):
         return True
-    
+
     def is_authenticated(self):
         return False

Modified: vendor/django/current/django/contrib/auth/views.py
===================================================================
--- vendor/django/current/django/contrib/auth/views.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/auth/views.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,6 +1,6 @@
 from django.contrib.auth.forms import AuthenticationForm
 from django.contrib.auth.forms import PasswordResetForm, PasswordChangeForm
-from django import forms
+from django import oldforms
 from django.shortcuts import render_to_response
 from django.template import RequestContext
 from django.contrib.sites.models import Site
@@ -26,7 +26,7 @@
         errors = {}
     request.session.set_test_cookie()
     return render_to_response(template_name, {
-        'form': forms.FormWrapper(manipulator, request.POST, errors),
+        'form': oldforms.FormWrapper(manipulator, request.POST, errors),
         REDIRECT_FIELD_NAME: redirect_to,
         'site_name': Site.objects.get_current().name,
     }, context_instance=RequestContext(request))
@@ -62,7 +62,7 @@
             else:
                 form.save(email_template_name=email_template_name)
             return HttpResponseRedirect('%sdone/' % request.path)
-    return render_to_response(template_name, {'form': forms.FormWrapper(form, new_data, errors)},
+    return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)},
         context_instance=RequestContext(request))
 
 def password_reset_done(request, template_name='registration/password_reset_done.html'):
@@ -77,7 +77,7 @@
         if not errors:
             form.save(new_data)
             return HttpResponseRedirect('%sdone/' % request.path)
-    return render_to_response(template_name, {'form': forms.FormWrapper(form, new_data, errors)},
+    return render_to_response(template_name, {'form': oldforms.FormWrapper(form, new_data, errors)},
         context_instance=RequestContext(request))
 password_change = login_required(password_change)
 

Modified: vendor/django/current/django/contrib/comments/models.py
===================================================================
--- vendor/django/current/django/contrib/comments/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/comments/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -34,7 +34,7 @@
         """
         Given a rating_string, this returns a tuple of (rating_range, options).
         >>> s = "scale:1-10|First_category|Second_category"
-        >>> get_rating_options(s)
+        >>> Comment.objects.get_rating_options(s)
         ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ['First category', 'Second category'])
         """
         rating_range, options = rating_string.split('|', 1)

Modified: vendor/django/current/django/contrib/comments/views/comments.py
===================================================================
--- vendor/django/current/django/contrib/comments/views/comments.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/comments/views/comments.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 from django.core import validators
-from django import forms
+from django import oldforms
 from django.core.mail import mail_admins, mail_managers
 from django.http import Http404
 from django.core.exceptions import ObjectDoesNotExist
@@ -28,37 +28,37 @@
             else:
                 return []
         self.fields.extend([
-            forms.LargeTextField(field_name="comment", maxlength=3000, is_required=True,
+            oldforms.LargeTextField(field_name="comment", maxlength=3000, is_required=True,
                 validator_list=[self.hasNoProfanities]),
-            forms.RadioSelectField(field_name="rating1", choices=choices,
+            oldforms.RadioSelectField(field_name="rating1", choices=choices,
                 is_required=ratings_required and num_rating_choices > 0,
                 validator_list=get_validator_list(1),
             ),
-            forms.RadioSelectField(field_name="rating2", choices=choices,
+            oldforms.RadioSelectField(field_name="rating2", choices=choices,
                 is_required=ratings_required and num_rating_choices > 1,
                 validator_list=get_validator_list(2),
             ),
-            forms.RadioSelectField(field_name="rating3", choices=choices,
+            oldforms.RadioSelectField(field_name="rating3", choices=choices,
                 is_required=ratings_required and num_rating_choices > 2,
                 validator_list=get_validator_list(3),
             ),
-            forms.RadioSelectField(field_name="rating4", choices=choices,
+            oldforms.RadioSelectField(field_name="rating4", choices=choices,
                 is_required=ratings_required and num_rating_choices > 3,
                 validator_list=get_validator_list(4),
             ),
-            forms.RadioSelectField(field_name="rating5", choices=choices,
+            oldforms.RadioSelectField(field_name="rating5", choices=choices,
                 is_required=ratings_required and num_rating_choices > 4,
                 validator_list=get_validator_list(5),
             ),
-            forms.RadioSelectField(field_name="rating6", choices=choices,
+            oldforms.RadioSelectField(field_name="rating6", choices=choices,
                 is_required=ratings_required and num_rating_choices > 5,
                 validator_list=get_validator_list(6),
             ),
-            forms.RadioSelectField(field_name="rating7", choices=choices,
+            oldforms.RadioSelectField(field_name="rating7", choices=choices,
                 is_required=ratings_required and num_rating_choices > 6,
                 validator_list=get_validator_list(7),
             ),
-            forms.RadioSelectField(field_name="rating8", choices=choices,
+            oldforms.RadioSelectField(field_name="rating8", choices=choices,
                 is_required=ratings_required and num_rating_choices > 7,
                 validator_list=get_validator_list(8),
             ),
@@ -109,7 +109,7 @@
         # send the comment to the managers.
         if self.user_cache.comment_set.count() <= settings.COMMENTS_FIRST_FEW:
             message = ngettext('This comment was posted by a user who has posted fewer than %(count)s comment:\n\n%(text)s',
-                'This comment was posted by a user who has posted fewer than %(count)s comments:\n\n%(text)s') % \
+                'This comment was posted by a user who has posted fewer than %(count)s comments:\n\n%(text)s', settings.COMMENTS_FIRST_FEW) % \
                 {'count': settings.COMMENTS_FIRST_FEW, 'text': c.get_as_text()}
             mail_managers("Comment posted by rookie user", message)
         if settings.COMMENTS_SKETCHY_USERS_GROUP and settings.COMMENTS_SKETCHY_USERS_GROUP in [g.id for g in self.user_cache.get_group_list()]:
@@ -117,13 +117,13 @@
             mail_managers("Comment posted by sketchy user (%s)" % self.user_cache.username, c.get_as_text())
         return c
 
-class PublicFreeCommentManipulator(forms.Manipulator):
+class PublicFreeCommentManipulator(oldforms.Manipulator):
     "Manipulator that handles public free (unregistered) comments"
     def __init__(self):
         self.fields = (
-            forms.TextField(field_name="person_name", maxlength=50, is_required=True,
+            oldforms.TextField(field_name="person_name", maxlength=50, is_required=True,
                 validator_list=[self.hasNoProfanities]),
-            forms.LargeTextField(field_name="comment", maxlength=3000, is_required=True,
+            oldforms.LargeTextField(field_name="comment", maxlength=3000, is_required=True,
                 validator_list=[self.hasNoProfanities]),
         )
 
@@ -217,13 +217,13 @@
     errors = manipulator.get_validation_errors(new_data)
     # If user gave correct username/password and wasn't already logged in, log them in
     # so they don't have to enter a username/password again.
-    if manipulator.get_user() and new_data.has_key('password') and manipulator.get_user().check_password(new_data['password']):
+    if manipulator.get_user() and not manipulator.get_user().is_authenticated() and new_data.has_key('password') and manipulator.get_user().check_password(new_data['password']):
         from django.contrib.auth import login
         login(request, manipulator.get_user())
     if errors or request.POST.has_key('preview'):
-        class CommentFormWrapper(forms.FormWrapper):
+        class CommentFormWrapper(oldforms.FormWrapper):
             def __init__(self, manipulator, new_data, errors, rating_choices):
-                forms.FormWrapper.__init__(self, manipulator, new_data, errors)
+                oldforms.FormWrapper.__init__(self, manipulator, new_data, errors)
                 self.rating_choices = rating_choices
             def ratings(self):
                 field_list = [self['rating%d' % (i+1)] for i in range(len(rating_choices))]
@@ -302,7 +302,7 @@
         comment = errors and '' or manipulator.get_comment(new_data)
         return render_to_response('comments/free_preview.html', {
             'comment': comment,
-            'comment_form': forms.FormWrapper(manipulator, new_data, errors),
+            'comment_form': oldforms.FormWrapper(manipulator, new_data, errors),
             'options': options,
             'target': target,
             'hash': security_hash,

Modified: vendor/django/current/django/contrib/contenttypes/management.py
===================================================================
--- vendor/django/current/django/contrib/contenttypes/management.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/contenttypes/management.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,10 +3,11 @@
 """
 
 from django.dispatch import dispatcher
-from django.db.models import get_models, signals
+from django.db.models import get_apps, get_models, signals
 
-def create_contenttypes(app, created_models):
+def create_contenttypes(app, created_models, verbosity=2):
     from django.contrib.contenttypes.models import ContentType
+    ContentType.objects.clear_cache()
     app_models = get_models(app)
     if not app_models:
         return
@@ -19,6 +20,14 @@
             ct = ContentType(name=str(opts.verbose_name),
                 app_label=opts.app_label, model=opts.object_name.lower())
             ct.save()
-            print "Adding content type '%s | %s'" % (ct.app_label, ct.model)
+            if verbosity >= 2:
+                print "Adding content type '%s | %s'" % (ct.app_label, ct.model)
 
+def create_all_contenttypes(verbosity=2):
+    for app in get_apps():
+        create_contenttypes(app, None, verbosity)
+
 dispatcher.connect(create_contenttypes, signal=signals.post_syncdb)
+
+if __name__ == "__main__":
+    create_all_contenttypes()

Modified: vendor/django/current/django/contrib/contenttypes/models.py
===================================================================
--- vendor/django/current/django/contrib/contenttypes/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/contenttypes/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,6 +1,7 @@
 from django.db import models
 from django.utils.translation import gettext_lazy as _
 
+CONTENT_TYPE_CACHE = {}
 class ContentTypeManager(models.Manager):
     def get_for_model(self, model):
         """
@@ -8,11 +9,26 @@
         ContentType if necessary.
         """
         opts = model._meta
-        # The str() is needed around opts.verbose_name because it's a
-        # django.utils.functional.__proxy__ object.
-        ct, created = self.model._default_manager.get_or_create(app_label=opts.app_label,
-            model=opts.object_name.lower(), defaults={'name': str(opts.verbose_name)})
+        key = (opts.app_label, opts.object_name.lower())
+        try:
+            ct = CONTENT_TYPE_CACHE[key]
+        except KeyError:
+            # The str() is needed around opts.verbose_name because it's a
+            # django.utils.functional.__proxy__ object.
+            ct, created = self.model._default_manager.get_or_create(app_label=key[0],
+                model=key[1], defaults={'name': str(opts.verbose_name)})
+            CONTENT_TYPE_CACHE[key] = ct
         return ct
+        
+    def clear_cache(self):
+        """
+        Clear out the content-type cache. This needs to happen during database
+        flushes to prevent caching of "stale" content type IDs (see
+        django.contrib.contenttypes.management.create_contenttypes for where
+        this gets called).
+        """
+        global CONTENT_TYPE_CACHE
+        CONTENT_TYPE_CACHE = {}
 
 class ContentType(models.Model):
     name = models.CharField(maxlength=100)

Modified: vendor/django/current/django/contrib/csrf/middleware.py
===================================================================
--- vendor/django/current/django/contrib/csrf/middleware.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/csrf/middleware.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,7 +11,7 @@
 import re
 import itertools
 
-_ERROR_MSG = "<h1>403 Forbidden</h1><p>Cross Site Request Forgery detected.  Request aborted.</p>"
+_ERROR_MSG = '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><body><h1>403 Forbidden</h1><p>Cross Site Request Forgery detected. Request aborted.</p></body></html>'
 
 _POST_FORM_RE = \
     re.compile(r'(<form\W[^>]*\bmethod=(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE)

Modified: vendor/django/current/django/contrib/flatpages/README.TXT
===================================================================
--- vendor/django/current/django/contrib/flatpages/README.TXT	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/flatpages/README.TXT	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,7 +2,7 @@
 
 For full documentation, see either of these:
 
-    * The file django/docs/flatpages.txt in the Django distribution
+    * The file docs/flatpages.txt in the Django distribution
     * http://www.djangoproject.com/documentation/flatpages/ on the Web
 
-Both have identical content.
\ No newline at end of file
+Both have identical content.

Modified: vendor/django/current/django/contrib/flatpages/views.py
===================================================================
--- vendor/django/current/django/contrib/flatpages/views.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/flatpages/views.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,6 +3,7 @@
 from django.shortcuts import get_object_or_404
 from django.http import HttpResponse
 from django.conf import settings
+from django.core.xheaders import populate_xheaders
 
 DEFAULT_TEMPLATE = 'flatpages/default.html'
 
@@ -32,4 +33,6 @@
     c = RequestContext(request, {
         'flatpage': f,
     })
-    return HttpResponse(t.render(c))
+    response = HttpResponse(t.render(c))
+    populate_xheaders(request, response, FlatPage, f.id)
+    return response

Added: vendor/django/current/django/contrib/formtools/__init__.py
===================================================================

Added: vendor/django/current/django/contrib/formtools/preview.py
===================================================================
--- vendor/django/current/django/contrib/formtools/preview.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/formtools/preview.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,165 @@
+"""
+Formtools Preview application.
+
+This is an abstraction of the following workflow:
+
+    "Display an HTML form, force a preview, then do something with the submission."
+
+Given a django.newforms.Form object that you define, this takes care of the
+following:
+
+    * Displays the form as HTML on a Web page.
+    * Validates the form data once it's submitted via POST.
+        * If it's valid, displays a preview page.
+        * If it's not valid, redisplays the form with error messages.
+    * At the preview page, if the preview confirmation button is pressed, calls
+      a hook that you define -- a done() method.
+
+The framework enforces the required preview by passing a shared-secret hash to
+the preview page. If somebody tweaks the form parameters on the preview page,
+the form submission will fail the hash comparison test.
+
+Usage
+=====
+
+Subclass FormPreview and define a done() method:
+
+    def done(self, request, clean_data):
+        # ...
+
+This method takes an HttpRequest object and a dictionary of the form data after
+it has been validated and cleaned. It should return an HttpResponseRedirect.
+
+Then, just instantiate your FormPreview subclass by passing it a Form class,
+and pass that to your URLconf, like so:
+
+    (r'^post/$', MyFormPreview(MyForm)),
+
+The FormPreview class has a few other hooks. See the docstrings in the source
+code below.
+
+The framework also uses two templates: 'formtools/preview.html' and
+'formtools/form.html'. You can override these by setting 'preview_template' and
+'form_template' attributes on your FormPreview subclass. See
+django/contrib/formtools/templates for the default templates.
+"""
+
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.http import Http404
+from django.shortcuts import render_to_response
+from django.template.context import RequestContext
+import cPickle as pickle
+import md5
+
+AUTO_ID = 'formtools_%s' # Each form here uses this as its auto_id parameter.
+
+class FormPreview(object):
+    preview_template = 'formtools/preview.html'
+    form_template = 'formtools/form.html'
+
+    # METHODS SUBCLASSES SHOULDN'T OVERRIDE ###################################
+
+    def __init__(self, form):
+        # form should be a Form class, not an instance.
+        self.form, self.state = form, {}
+
+    def __call__(self, request, *args, **kwargs):
+        stage = {'1': 'preview', '2': 'post'}.get(request.POST.get(self.unused_name('stage')), 'preview')
+        self.parse_params(*args, **kwargs)
+        try:
+            method = getattr(self, stage + '_' + request.method.lower())
+        except AttributeError:
+            raise Http404
+        return method(request)
+
+    def unused_name(self, name):
+        """
+        Given a first-choice name, adds an underscore to the name until it
+        reaches a name that isn't claimed by any field in the form.
+
+        This is calculated rather than being hard-coded so that no field names
+        are off-limits for use in the form.
+        """
+        while 1:
+            try:
+                f = self.form.fields[name]
+            except KeyError:
+                break # This field name isn't being used by the form.
+            name += '_'
+        return name
+
+    def preview_get(self, request):
+        "Displays the form"
+        f = self.form(auto_id=AUTO_ID)
+        return render_to_response(self.form_template,
+            {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state},
+            context_instance=RequestContext(request))
+
+    def preview_post(self, request):
+        "Validates the POST data. If valid, displays the preview page. Else, redisplays form."
+        f = self.form(request.POST, auto_id=AUTO_ID)
+        context = {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state}
+        if f.is_valid():
+            context['hash_field'] = self.unused_name('hash')
+            context['hash_value'] = self.security_hash(request, f)
+            return render_to_response(self.preview_template, context, context_instance=RequestContext(request))
+        else:
+            return render_to_response(self.form_template, context, context_instance=RequestContext(request))
+
+    def post_post(self, request):
+        "Validates the POST data. If valid, calls done(). Else, redisplays form."
+        f = self.form(request.POST, auto_id=AUTO_ID)
+        if f.is_valid():
+            if self.security_hash(request, f) != request.POST.get(self.unused_name('hash')):
+                return self.failed_hash(request) # Security hash failed.
+            return self.done(request, f.clean_data)
+        else:
+            return render_to_response(self.form_template,
+                {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state},
+                context_instance=RequestContext(request))
+
+    # METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE ########################
+
+    def parse_params(self, *args, **kwargs):
+        """
+        Given captured args and kwargs from the URLconf, saves something in
+        self.state and/or raises Http404 if necessary.
+
+        For example, this URLconf captures a user_id variable:
+
+            (r'^contact/(?P<user_id>\d{1,6})/$', MyFormPreview(MyForm)),
+
+        In this case, the kwargs variable in parse_params would be
+        {'user_id': 32} for a request to '/contact/32/'. You can use that
+        user_id to make sure it's a valid user and/or save it for later, for
+        use in done().
+        """
+        pass
+
+    def security_hash(self, request, form):
+        """
+        Calculates the security hash for the given Form instance.
+
+        This creates a list of the form field names/values in a deterministic
+        order, pickles the result with the SECRET_KEY setting and takes an md5
+        hash of that.
+
+        Subclasses may want to take into account request-specific information
+        such as the IP address.
+        """
+        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)
+        return md5.new(pickled).hexdigest()
+
+    def failed_hash(self, request):
+        "Returns an HttpResponse in the case of an invalid security hash."
+        return self.preview_post(request)
+
+    # METHODS SUBCLASSES MUST OVERRIDE ########################################
+
+    def done(self, request, clean_data):
+        "Does something with the clean_data and returns an HttpResponseRedirect."
+        raise NotImplementedError('You must define a done() method on your %s subclass.' % self.__class__.__name__)

Added: vendor/django/current/django/contrib/formtools/templates/formtools/form.html
===================================================================
--- vendor/django/current/django/contrib/formtools/templates/formtools/form.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/formtools/templates/formtools/form.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+{% if form.errors %}<h1>Please correct the following errors</h1>{% else %}<h1>Submit</h1>{% endif %}
+
+<form action="" method="post">
+<table>
+{{ form }}
+</table>
+<input type="hidden" name="{{ stage_field }}" value="1" />
+<p><input type="submit" value="Preview" /></p>
+</form>
+
+{% endblock %}

Added: vendor/django/current/django/contrib/formtools/templates/formtools/preview.html
===================================================================
--- vendor/django/current/django/contrib/formtools/templates/formtools/preview.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/formtools/templates/formtools/preview.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,36 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+<h1>Preview your submission</h1>
+
+<table>
+{% for field in form %}
+<tr>
+<th>{{ field.label }}:</th>
+<td>{{ field.data|escape }}</td>
+</tr>
+{% endfor %}
+</table>
+
+<p>Security hash: {{ hash_value }}</p>
+
+<form action="" method="post">
+{% for field in form %}{{ field.as_hidden }}
+{% endfor %}
+<input type="hidden" name="{{ stage_field }}" value="2" />
+<input type="hidden" name="{{ hash_field }}" value="{{ hash_value }}" />
+<p><input type="submit" value="Submit" /></p>
+</form>
+
+<h1>Or edit it again</h1>
+
+<form action="" method="post">
+<table>
+{{ form }}
+</table>
+<input type="hidden" name="{{ stage_field }}" value="1" />
+<p><input type="submit" value="Preview" /></p>
+</form>
+
+{% endblock %}

Modified: vendor/django/current/django/contrib/humanize/templatetags/humanize.py
===================================================================
--- vendor/django/current/django/contrib/humanize/templatetags/humanize.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/humanize/templatetags/humanize.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,3 +1,5 @@
+from django.utils.translation import ngettext
+from django.utils.translation import gettext_lazy as _
 from django import template
 import re
 
@@ -12,9 +14,9 @@
         value = int(value)
     except ValueError:
         return value
-    t = ('th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th')
+    t = (_('th'), _('st'), _('nd'), _('rd'), _('th'), _('th'), _('th'), _('th'), _('th'), _('th'))
     if value % 100 in (11, 12, 13): # special case
-        return '%dth' % value
+        return "%d%s" % (value, t[0])
     return '%d%s' % (value, t[value % 10])
 register.filter(ordinal)
 
@@ -41,11 +43,14 @@
     if value < 1000000:
         return value
     if value < 1000000000:
-        return '%.1f million' % (value / 1000000.0)
+    	new_value = value / 1000000.0
+        return ngettext('%(value).1f million', '%(value).1f million', new_value) % {'value': new_value}
     if value < 1000000000000:
-        return '%.1f billion' % (value / 1000000000.0)
+        new_value = value / 1000000000.0
+        return ngettext('%(value).1f billion', '%(value).1f billion', new_value) % {'value': new_value}
     if value < 1000000000000000:
-        return '%.1f trillion' % (value / 1000000000000.0)
+        new_value = value / 1000000000000.0
+        return ngettext('%(value).1f trillion', '%(value).1f trillion', new_value) % {'value': new_value}
     return value
 register.filter(intword)
 
@@ -60,5 +65,5 @@
         return value
     if not 0 < value < 10:
         return value
-    return ('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine')[value-1]
+    return (_('one'), _('two'), _('three'), _('four'), _('five'), _('six'), _('seven'), _('eight'), _('nine'))[value-1]
 register.filter(apnumber)

Added: vendor/django/current/django/contrib/localflavor/__init__.py
===================================================================

Added: vendor/django/current/django/contrib/localflavor/uk/__init__.py
===================================================================

Added: vendor/django/current/django/contrib/localflavor/uk/forms.py
===================================================================
--- vendor/django/current/django/contrib/localflavor/uk/forms.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/localflavor/uk/forms.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,19 @@
+"""
+UK-specific Form helpers
+"""
+
+from django.newforms.fields import RegexField
+from django.utils.translation import gettext
+
+class UKPostcodeField(RegexField):
+    """
+    A form field that validates its input is a UK postcode.
+
+    The regular expression used is sourced from the schema for British Standard
+    BS7666 address types: http://www.govtalk.gov.uk/gdsc/schemas/bs7666-v2-0.xsd
+    """
+    def __init__(self, *args, **kwargs):
+        super(UKPostcodeField, self).__init__(r'^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HIK-Y][0-9](|[0-9]|[ABEHMNPRVWXY]))|[0-9][A-HJKSTUW]) [0-9][ABD-HJLNP-UW-Z]{2})$',
+            max_length=None, min_length=None,
+            error_message=gettext(u'Enter a postcode. A space is required between the two postcode parts.'),
+            *args, **kwargs)

Added: vendor/django/current/django/contrib/localflavor/usa/__init__.py
===================================================================

Added: vendor/django/current/django/contrib/localflavor/usa/forms.py
===================================================================
--- vendor/django/current/django/contrib/localflavor/usa/forms.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/localflavor/usa/forms.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,59 @@
+"""
+USA-specific Form helpers
+"""
+
+from django.newforms import ValidationError
+from django.newforms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.newforms.util import smart_unicode
+from django.utils.translation import gettext
+import re
+
+phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$')
+
+class USZipCodeField(RegexField):
+    def __init__(self, *args, **kwargs):
+        super(USZipCodeField, self).__init__(r'^\d{5}(?:-\d{4})?$',
+            max_length=None, min_length=None,
+            error_message=gettext(u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'),
+            *args, **kwargs)
+
+class USPhoneNumberField(Field):
+    def clean(self, value):
+        super(USPhoneNumberField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+        value = re.sub('(\(|\)|\s+)', '', smart_unicode(value))
+        m = phone_digits_re.search(value)
+        if m:
+            return u'%s-%s-%s' % (m.group(1), m.group(2), m.group(3))
+        raise ValidationError(u'Phone numbers must be in XXX-XXX-XXXX format.')
+
+class USStateField(Field):
+    """
+    A form field that validates its input is a U.S. state name or abbreviation.
+    It normalizes the input to the standard two-leter postal service
+    abbreviation for the given state.
+    """
+    def clean(self, value):
+        from us_states import STATES_NORMALIZED # relative import
+        super(USStateField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+        try:
+            value = value.strip().lower()
+        except AttributeError:
+            pass
+        else:
+            try:
+                return STATES_NORMALIZED[value.strip().lower()].decode('ascii')
+            except KeyError:
+                pass
+        raise ValidationError(u'Enter a U.S. state or territory.')
+
+class USStateSelect(Select):
+    """
+    A Select widget that uses a list of U.S. states/territories as its choices.
+    """
+    def __init__(self, attrs=None):
+        from us_states import STATE_CHOICES # relative import
+        super(USStateSelect, self).__init__(attrs, choices=STATE_CHOICES)

Added: vendor/django/current/django/contrib/localflavor/usa/us_states.py
===================================================================
--- vendor/django/current/django/contrib/localflavor/usa/us_states.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/localflavor/usa/us_states.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,239 @@
+"""
+A mapping of state misspellings/abbreviations to normalized abbreviations, and
+an alphabetical list of states for use as `choices` in a formfield.
+
+This exists in this standalone file so that it's only imported into memory
+when explicitly needed.
+"""
+
+STATE_CHOICES = (
+    ('AL', 'Alabama'),
+    ('AK', 'Alaska'),
+    ('AS', 'American Samoa'),
+    ('AZ', 'Arizona'),
+    ('AR', 'Arkansas'),
+    ('CA', 'California'),
+    ('CO', 'Colorado'),
+    ('CT', 'Connecticut'),
+    ('DE', 'Deleware'),
+    ('DC', 'District of Columbia'),
+    ('FM', 'Federated States of Micronesia'),
+    ('FL', 'Florida'),
+    ('GA', 'Georgia'),
+    ('GU', 'Guam'),
+    ('HI', 'Hawaii'),
+    ('ID', 'Idaho'),
+    ('IL', 'Illinois'),
+    ('IN', 'Indiana'),
+    ('IA', 'Iowa'),
+    ('KS', 'Kansas'),
+    ('KY', 'Kentucky'),
+    ('LA', 'Louisiana'),
+    ('ME', 'Maine'),
+    ('MH', 'Marshall Islands'),
+    ('MD', 'Maryland'),
+    ('MA', 'Massachusetts'),
+    ('MI', 'Michigan'),
+    ('MN', 'Minnesota'),
+    ('MS', 'Mississippi'),
+    ('MO', 'Missouri'),
+    ('MT', 'Montana'),
+    ('NE', 'Nebraska'),
+    ('NV', 'Nevada'),
+    ('NH', 'New Hampshire'),
+    ('NJ', 'New Jersey'),
+    ('NM', 'New Mexico'),
+    ('NY', 'New York'),
+    ('NC', 'North Carolina'),
+    ('ND', 'North Dakota'),
+    ('MP', 'Northern Mariana Islands'),
+    ('OH', 'Ohio'),
+    ('OK', 'Oklahoma'),
+    ('OR', 'Oregon'),
+    ('PW', 'Palau'),
+    ('PA', 'Pennsylvania'),
+    ('PR', 'Puerto Rico'),
+    ('RI', 'Rhode Island'),
+    ('SC', 'South Carolina'),
+    ('SD', 'South Dakota'),
+    ('TN', 'Tennessee'),
+    ('TX', 'Texas'),
+    ('UT', 'Utah'),
+    ('VT', 'Vermont'),
+    ('VI', 'Virgin Islands'),
+    ('VA', 'Virginia'),
+    ('WA', 'Washington'),
+    ('WV', 'West Virginia'),
+    ('WI', 'Wisconsin'),
+    ('WY', 'Wyoming'),
+)
+
+STATES_NORMALIZED = {
+    'ak': 'AK',
+    'al': 'AL',
+    'ala': 'AL',
+    'alabama': 'AL',
+    'alaska': 'AK',
+    'american samao': 'AS',
+    'american samoa': 'AS',
+    'ar': 'AR',
+    'ariz': 'AZ',
+    'arizona': 'AZ',
+    'ark': 'AR',
+    'arkansas': 'AR',
+    'as': 'AS',
+    'az': 'AZ',
+    'ca': 'CA',
+    'calf': 'CA',
+    'calif': 'CA',
+    'california': 'CA',
+    'co': 'CO',
+    'colo': 'CO',
+    'colorado': 'CO',
+    'conn': 'CT',
+    'connecticut': 'CT',
+    'ct': 'CT',
+    'dc': 'DC',
+    'de': 'DE',
+    'del': 'DE',
+    'delaware': 'DE',
+    'district of columbia': 'DC',
+    'federated states of micronesia': 'FM',
+    'fl': 'FL',
+    'fla': 'FL',
+    'florida': 'FL',
+    'fm': 'FM',
+    'ga': 'GA',
+    'georgia': 'GA',
+    'gu': 'GU',
+    'guam': 'GU',
+    'hawaii': 'HI',
+    'hi': 'HI',
+    'ia': 'IA',
+    'id': 'ID',
+    'idaho': 'ID',
+    'il': 'IL',
+    'ill': 'IL',
+    'illinois': 'IL',
+    'in': 'IN',
+    'ind': 'IN',
+    'indiana': 'IN',
+    'iowa': 'IA',
+    'kan': 'KS',
+    'kans': 'KS',
+    'kansas': 'KS',
+    'kentucky': 'KY',
+    'ks': 'KS',
+    'ky': 'KY',
+    'la': 'LA',
+    'louisiana': 'LA',
+    'ma': 'MA',
+    'maine': 'ME',
+    'marianas islands': 'MP',
+    'marianas islands of the pacific': 'MP',
+    'marinas islands of the pacific': 'MP',
+    'maryland': 'MD',
+    'mass': 'MA',
+    'massachusetts': 'MA',
+    'massachussetts': 'MA',
+    'md': 'MD',
+    'me': 'ME',
+    'mi': 'MI',
+    'mich': 'MI',
+    'michigan': 'MI',
+    'micronesia': 'FM',
+    'minn': 'MN',
+    'minnesota': 'MN',
+    'miss': 'MS',
+    'mississippi': 'MS',
+    'missouri': 'MO',
+    'mn': 'MN',
+    'mo': 'MO',
+    'mont': 'MT',
+    'montana': 'MT',
+    'mp': 'MP',
+    'ms': 'MS',
+    'mt': 'MT',
+    'n d': 'ND',
+    'n dak': 'ND',
+    'n h': 'NH',
+    'n j': 'NJ',
+    'n m': 'NM',
+    'n mex': 'NM',
+    'nc': 'NC',
+    'nd': 'ND',
+    'ne': 'NE',
+    'neb': 'NE',
+    'nebr': 'NE',
+    'nebraska': 'NE',
+    'nev': 'NV',
+    'nevada': 'NV',
+    'new hampshire': 'NH',
+    'new jersey': 'NJ',
+    'new mexico': 'NM',
+    'new york': 'NY',
+    'nh': 'NH',
+    'nj': 'NJ',
+    'nm': 'NM',
+    'nmex': 'NM',
+    'north carolina': 'NC',
+    'north dakota': 'ND',
+    'northern mariana islands': 'MP',
+    'nv': 'NV',
+    'ny': 'NY',
+    'oh': 'OH',
+    'ohio': 'OH',
+    'ok': 'OK',
+    'okla': 'OK',
+    'oklahoma': 'OK',
+    'or': 'OR',
+    'ore': 'OR',
+    'oreg': 'OR',
+    'oregon': 'OR',
+    'pa': 'PA',
+    'penn': 'PA',
+    'pennsylvania': 'PA',
+    'pr': 'PR',
+    'puerto rico': 'PR',
+    'rhode island': 'RI',
+    'ri': 'RI',
+    's dak': 'SD',
+    'sc': 'SC',
+    'sd': 'SD',
+    'sdak': 'SD',
+    'south carolina': 'SC',
+    'south dakota': 'SD',
+    'tenn': 'TN',
+    'tennessee': 'TN',
+    'territory of hawaii': 'HI',
+    'tex': 'TX',
+    'texas': 'TX',
+    'tn': 'TN',
+    'tx': 'TX',
+    'us virgin islands': 'VI',
+    'usvi': 'VI',
+    'ut': 'UT',
+    'utah': 'UT',
+    'va': 'VA',
+    'vermont': 'VT',
+    'vi': 'VI',
+    'viginia': 'VA',
+    'virgin islands': 'VI',
+    'virgina': 'VA',
+    'virginia': 'VA',
+    'vt': 'VT',
+    'w va': 'WV',
+    'wa': 'WA',
+    'wash': 'WA',
+    'washington': 'WA',
+    'west virginia': 'WV',
+    'wi': 'WI',
+    'wis': 'WI',
+    'wisc': 'WI',
+    'wisconsin': 'WI',
+    'wv': 'WV',
+    'wva': 'WV',
+    'wy': 'WY',
+    'wyo': 'WY',
+    'wyoming': 'WY',
+}

Modified: vendor/django/current/django/contrib/sessions/middleware.py
===================================================================
--- vendor/django/current/django/contrib/sessions/middleware.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sessions/middleware.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,6 @@
 from django.conf import settings
 from django.contrib.sessions.models import Session
+from django.core.exceptions import SuspiciousOperation
 from django.utils.cache import patch_vary_headers
 import datetime
 
@@ -9,6 +10,7 @@
 class SessionWrapper(object):
     def __init__(self, session_key):
         self.session_key = session_key
+        self.accessed = False
         self.modified = False
 
     def __contains__(self, key):
@@ -45,6 +47,7 @@
 
     def _get_session(self):
         # Lazily loads session from storage.
+        self.accessed = True
         try:
             return self._session_cache
         except AttributeError:
@@ -55,7 +58,7 @@
                     s = Session.objects.get(session_key=self.session_key,
                         expire_date__gt=datetime.datetime.now())
                     self._session_cache = s.get_decoded()
-                except Session.DoesNotExist:
+                except (Session.DoesNotExist, SuspiciousOperation):
                     self._session_cache = {}
                     # Set the session_key to None to force creation of a new
                     # key, for extra security.
@@ -71,14 +74,21 @@
     def process_response(self, request, response):
         # If request.session was modified, or if response.session was set, save
         # those changes and set a session cookie.
-        patch_vary_headers(response, ('Cookie',))
         try:
+            accessed = request.session.accessed
             modified = request.session.modified
         except AttributeError:
             pass
         else:
+            if accessed:
+                patch_vary_headers(response, ('Cookie',))
             if modified or settings.SESSION_SAVE_EVERY_REQUEST:
-                session_key = request.session.session_key or Session.objects.get_new_session_key()
+                if request.session.session_key:
+                    session_key = request.session.session_key
+                else:
+                    obj = Session.objects.get_new_session_object()
+                    session_key = obj.session_key
+
                 if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE:
                     max_age = None
                     expires = None
@@ -88,5 +98,6 @@
                 new_session = Session.objects.save(session_key, request.session._session,
                     datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,
-                    max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN)
+                    max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
+                    secure=settings.SESSION_COOKIE_SECURE or None)
         return response

Modified: vendor/django/current/django/contrib/sessions/models.py
===================================================================
--- vendor/django/current/django/contrib/sessions/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sessions/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,4 @@
-import base64, md5, random, sys
+import base64, md5, random, sys, datetime
 import cPickle as pickle
 from django.db import models
 from django.utils.translation import gettext_lazy as _
@@ -23,6 +23,23 @@
                 break
         return session_key
 
+    def get_new_session_object(self):
+        """
+        Returns a new session object.
+        """
+        # FIXME: There is a *small* chance of collision here, meaning we will
+        # return an existing object. That can be fixed when we add a way to
+        # validate (and guarantee) that non-auto primary keys are unique. For
+        # now, we save immediately in order to reduce the "window of
+        # misfortune" as much as possible.
+        created = False
+        while not created:
+            obj, created = self.get_or_create(session_key=self.get_new_session_key(),
+                    expire_date = datetime.datetime.now())
+            # Collision in key generation, so re-seed the generator
+            random.seed()
+        return obj
+
     def save(self, session_key, session_dict, expire_date):
         s = self.model(session_key, self.encode(session_dict), expire_date)
         if session_dict:

Added: vendor/django/current/django/contrib/sitemaps/__init__.py
===================================================================
--- vendor/django/current/django/contrib/sitemaps/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sitemaps/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,90 @@
+from django.core import urlresolvers
+import urllib
+
+PING_URL = "http://www.google.com/webmasters/sitemaps/ping"
+
+class SitemapNotFound(Exception):
+    pass
+
+def ping_google(sitemap_url=None, ping_url=PING_URL):
+    """
+    Alerts Google that the sitemap for the current site has been updated.
+    If sitemap_url is provided, it should be an absolute path to the sitemap
+    for this site -- e.g., '/sitemap.xml'. If sitemap_url is not provided, this
+    function will attempt to deduce it by using urlresolvers.reverse().
+    """
+    if sitemap_url is None:
+        try:
+            # First, try to get the "index" sitemap URL.
+            sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.index')
+        except urlresolvers.NoReverseMatch:
+            try:
+                # Next, try for the "global" sitemap URL.
+                sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap')
+            except urlresolvers.NoReverseMatch:
+                pass
+
+    if sitemap_url is None:
+        raise SitemapNotFound("You didn't provide a sitemap_url, and the sitemap URL couldn't be auto-detected.")
+
+    from django.contrib.sites.models import Site
+    current_site = Site.objects.get_current()
+    url = "%s%s" % (current_site.domain, sitemap_url)
+    params = urllib.urlencode({'sitemap':url})
+    urllib.urlopen("%s?%s" % (ping_url, params))
+
+class Sitemap:
+    def __get(self, name, obj, default=None):
+        try:
+            attr = getattr(self, name)
+        except AttributeError:
+            return default
+        if callable(attr):
+            return attr(obj)
+        return attr
+
+    def items(self):
+        return []
+
+    def location(self, obj):
+        return obj.get_absolute_url()
+
+    def get_urls(self):
+        from django.contrib.sites.models import Site
+        current_site = Site.objects.get_current()
+        urls = []
+        for item in self.items():
+            loc = "http://%s%s" % (current_site.domain, self.__get('location', item))
+            url_info = {
+                'location':   loc,
+                'lastmod':    self.__get('lastmod', item, None),
+                'changefreq': self.__get('changefreq', item, None),
+                'priority':   self.__get('priority', item, None)
+            }
+            urls.append(url_info)
+        return urls
+
+class FlatPageSitemap(Sitemap):
+    def items(self):
+        from django.contrib.sites.models import Site
+        current_site = Site.objects.get_current()
+        return current_site.flatpage_set.all()
+
+class GenericSitemap(Sitemap):
+    priority = None
+    changefreq = None
+
+    def __init__(self, info_dict, priority=None, changefreq=None):
+        self.queryset = info_dict['queryset']
+        self.date_field = info_dict.get('date_field', None)
+        self.priority = priority
+        self.changefreq = changefreq
+
+    def items(self):
+        # Make sure to return a clone; we don't want premature evaluation.
+        return self.queryset.filter()
+
+    def lastmod(self, item):
+        if self.date_field is not None:
+            return getattr(item, self.date_field)
+        return None

Added: vendor/django/current/django/contrib/sitemaps/templates/sitemap.xml
===================================================================
--- vendor/django/current/django/contrib/sitemaps/templates/sitemap.xml	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sitemaps/templates/sitemap.xml	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+{% spaceless %}
+{% for url in urlset %}
+  <url>
+    <loc>{{ url.location|escape }}</loc>
+    {% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
+    {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
+    {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
+   </url>
+{% endfor %}
+{% endspaceless %}
+</urlset>

Added: vendor/django/current/django/contrib/sitemaps/templates/sitemap_index.xml
===================================================================
--- vendor/django/current/django/contrib/sitemaps/templates/sitemap_index.xml	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sitemaps/templates/sitemap_index.xml	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+{% for location in sitemaps %}<sitemap><loc>{{ location|escape }}</loc></sitemap>{% endfor %}
+</sitemapindex>

Added: vendor/django/current/django/contrib/sitemaps/views.py
===================================================================
--- vendor/django/current/django/contrib/sitemaps/views.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sitemaps/views.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,30 @@
+from django.http import HttpResponse, Http404
+from django.template import loader
+from django.contrib.sites.models import Site
+from django.core import urlresolvers
+
+def index(request, sitemaps):
+    current_site = Site.objects.get_current()
+    sites = []
+    protocol = request.is_secure() and 'https' or 'http'
+    for section in sitemaps.keys():
+        sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap', kwargs={'section': section})
+        sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
+    xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
+    return HttpResponse(xml, mimetype='application/xml')
+
+def sitemap(request, sitemaps, section=None):
+    maps, urls = [], []
+    if section is not None:
+        if not sitemaps.has_key(section):
+            raise Http404("No sitemap available for section: %r" % section)
+        maps.append(sitemaps[section])
+    else:
+        maps = sitemaps.values()
+    for site in maps:
+        if callable(site):
+            urls.extend(site().get_urls())
+        else:
+            urls.extend(site.get_urls())
+    xml = loader.render_to_string('sitemap.xml', {'urlset': urls})
+    return HttpResponse(xml, mimetype='application/xml')

Modified: vendor/django/current/django/contrib/sites/management.py
===================================================================
--- vendor/django/current/django/contrib/sites/management.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/sites/management.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,9 +7,10 @@
 from django.contrib.sites.models import Site
 from django.contrib.sites import models as site_app
 
-def create_default_site(app, created_models):
+def create_default_site(app, created_models, verbosity):
     if Site in created_models:
-        print "Creating example.com Site object"
+        if verbosity >= 2:
+            print "Creating example.com Site object"
         s = Site(domain="example.com", name="example.com")
         s.save()
 

Modified: vendor/django/current/django/contrib/syndication/feeds.py
===================================================================
--- vendor/django/current/django/contrib/syndication/feeds.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/contrib/syndication/feeds.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -78,6 +78,7 @@
             author_link = self.__get_dynamic_attr('author_link', obj),
             author_email = self.__get_dynamic_attr('author_email', obj),
             categories = self.__get_dynamic_attr('categories', obj),
+            feed_copyright = self.__get_dynamic_attr('feed_copyright', obj),
         )
 
         try:
@@ -116,5 +117,6 @@
                 author_email = author_email,
                 author_link = author_link,
                 categories = self.__get_dynamic_attr('item_categories', item),
+                item_copyright = self.__get_dynamic_attr('item_copyright', item),
             )
         return feed

Modified: vendor/django/current/django/core/cache/__init__.py
===================================================================
--- vendor/django/current/django/core/cache/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/cache/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -48,7 +48,7 @@
     if host.endswith('/'):
         host = host[:-1]
 
-    cache_class = getattr(__import__('django.core.cache.backends.%s' % BACKENDS[scheme], '', '', ['']), 'CacheClass')
+    cache_class = getattr(__import__('django.core.cache.backends.%s' % BACKENDS[scheme], {}, {}, ['']), 'CacheClass')
     return cache_class(host, params)
 
 cache = get_cache(settings.CACHE_BACKEND)

Modified: vendor/django/current/django/core/cache/backends/dummy.py
===================================================================
--- vendor/django/current/django/core/cache/backends/dummy.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/cache/backends/dummy.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -6,8 +6,8 @@
     def __init__(self, *args, **kwargs):
         pass
 
-    def get(self, *args, **kwargs):
-        pass
+    def get(self, key, default=None):
+        return default
 
     def set(self, *args, **kwargs):
         pass
@@ -16,7 +16,7 @@
         pass
 
     def get_many(self, *args, **kwargs):
-        pass
+        return {}
 
     def has_key(self, *args, **kwargs):
         return False

Modified: vendor/django/current/django/core/cache/backends/memcached.py
===================================================================
--- vendor/django/current/django/core/cache/backends/memcached.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/cache/backends/memcached.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -20,7 +20,7 @@
             return val
 
     def set(self, key, value, timeout=0):
-        self._cache.set(key, value, timeout)
+        self._cache.set(key, value, timeout or self.default_timeout)
 
     def delete(self, key):
         self._cache.delete(key)

Modified: vendor/django/current/django/core/context_processors.py
===================================================================
--- vendor/django/current/django/core/context_processors.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/context_processors.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -51,15 +51,19 @@
 class PermLookupDict(object):
     def __init__(self, user, module_name):
         self.user, self.module_name = user, module_name
+
     def __repr__(self):
-        return str(self.user.get_permission_list())
+        return str(self.user.get_all_permissions())
+
     def __getitem__(self, perm_name):
         return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
+
     def __nonzero__(self):
         return self.user.has_module_perms(self.module_name)
 
 class PermWrapper(object):
     def __init__(self, user):
         self.user = user
+
     def __getitem__(self, module_name):
         return PermLookupDict(self.user, module_name)

Modified: vendor/django/current/django/core/handlers/base.py
===================================================================
--- vendor/django/current/django/core/handlers/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/handlers/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -26,7 +26,7 @@
                 raise exceptions.ImproperlyConfigured, '%s isn\'t a middleware module' % middleware_path
             mw_module, mw_classname = middleware_path[:dot], middleware_path[dot+1:]
             try:
-                mod = __import__(mw_module, '', '', [''])
+                mod = __import__(mw_module, {}, {}, [''])
             except ImportError, e:
                 raise exceptions.ImproperlyConfigured, 'Error importing middleware %s: "%s"' % (mw_module, e)
             try:
@@ -48,7 +48,7 @@
             if hasattr(mw_instance, 'process_exception'):
                 self._exception_middleware.insert(0, mw_instance.process_exception)
 
-    def get_response(self, path, request):
+    def get_response(self, request):
         "Returns an HttpResponse object for the given HttpRequest"
         from django.core import exceptions, urlresolvers
         from django.core.mail import mail_admins
@@ -60,9 +60,12 @@
             if response:
                 return response
 
-        resolver = urlresolvers.RegexURLResolver(r'^/', settings.ROOT_URLCONF)
+        # Get urlconf from request object, if available.  Otherwise use default.
+        urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF)
+
+        resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
         try:
-            callback, callback_args, callback_kwargs = resolver.resolve(path)
+            callback, callback_args, callback_kwargs = resolver.resolve(request.path)
 
             # Apply view middleware
             for middleware_method in self._view_middleware:
@@ -84,12 +87,17 @@
 
             # Complain if the view returned None (a common error).
             if response is None:
-                raise ValueError, "The view %s.%s didn't return an HttpResponse object." % (callback.__module__, callback.func_name)
+                try:
+                    view_name = callback.func_name # If it's a function
+                except AttributeError:
+                    view_name = callback.__class__.__name__ + '.__call__' # If it's a class
+                raise ValueError, "The view %s.%s didn't return an HttpResponse object." % (callback.__module__, view_name)
 
             return response
         except http.Http404, e:
             if settings.DEBUG:
-                return self.get_technical_error_response(request, is404=True, exception=e)
+                from django.views import debug
+                return debug.technical_404_response(request, e)
             else:
                 callback, param_dict = resolver.resolve404()
                 return callback(request, **param_dict)
@@ -99,40 +107,24 @@
             pass # See http://code.djangoproject.com/ticket/1023
         except: # Handle everything else, including SuspiciousOperation, etc.
             if settings.DEBUG:
-                return self.get_technical_error_response(request)
+                from django.views import debug
+                return debug.technical_500_response(request, *sys.exc_info())
             else:
                 # Get the exception info now, in case another exception is thrown later.
                 exc_info = sys.exc_info()
                 receivers = dispatcher.send(signal=signals.got_request_exception)
                 # When DEBUG is False, send an error message to the admins.
-                subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), getattr(request, 'path', ''))
+                subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
                 try:
                     request_repr = repr(request)
                 except:
                     request_repr = "Request repr() unavailable"
                 message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
                 mail_admins(subject, message, fail_silently=True)
-                return self.get_friendly_error_response(request, resolver)
+                # Return an HttpResponse that displays a friendly error message.
+                callback, param_dict = resolver.resolve500()
+                return callback(request, **param_dict)
 
-    def get_friendly_error_response(self, request, resolver):
-        """
-        Returns an HttpResponse that displays a PUBLIC error message for a
-        fundamental error.
-        """
-        callback, param_dict = resolver.resolve500()
-        return callback(request, **param_dict)
-
-    def get_technical_error_response(self, request, is404=False, exception=None):
-        """
-        Returns an HttpResponse that displays a TECHNICAL error message for a
-        fundamental error.
-        """
-        from django.views import debug
-        if is404:
-            return debug.technical_404_response(request, exception)
-        else:
-            return debug.technical_500_response(request, *sys.exc_info())
-
     def _get_traceback(self, exc_info=None):
         "Helper function to return the traceback as a string"
         import traceback

Modified: vendor/django/current/django/core/handlers/modpython.py
===================================================================
--- vendor/django/current/django/core/handlers/modpython.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/handlers/modpython.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -16,14 +16,32 @@
         self.path = req.uri
 
     def __repr__(self):
+        # Since this is called as part of error handling, we need to be very
+        # robust against potentially malformed input.
+        try:
+            get = pformat(self.GET)
+        except:
+            get = '<could not parse>'
+        try:
+            post = pformat(self.POST)
+        except:
+            post = '<could not parse>'
+        try:
+            cookies = pformat(self.COOKIES)
+        except:
+            cookies = '<could not parse>'
+        try:
+            meta = pformat(self.META)
+        except:
+            meta = '<could not parse>'
         return '<ModPythonRequest\npath:%s,\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' % \
-            (self.path, pformat(self.GET), pformat(self.POST), pformat(self.COOKIES),
-            pformat(self.META))
+            (self.path, get, post, cookies, meta)
 
     def get_full_path(self):
         return '%s%s' % (self.path, self._req.args and ('?' + self._req.args) or '')
 
     def is_secure(self):
+        # Note: modpython 3.2.10+ has req.is_https(), but we need to support previous versions
         return self._req.subprocess_env.has_key('HTTPS') and self._req.subprocess_env['HTTPS'] == 'on'
 
     def _load_post_and_files(self):
@@ -122,10 +140,6 @@
         # that use settings now can work
         from django.conf import settings
 
-        if settings.ENABLE_PSYCO:
-            import psyco
-            psyco.profile()
-
         # if we need to set up middleware, now that settings works we can do it now.
         if self._request_middleware is None:
             self.load_middleware()
@@ -133,7 +147,7 @@
         dispatcher.send(signal=signals.request_started)
         try:
             request = ModPythonRequest(req)
-            response = self.get_response(req.uri, request)
+            response = self.get_response(request)
 
             # Apply response middleware
             for middleware_method in self._response_middleware:
@@ -143,21 +157,21 @@
             dispatcher.send(signal=signals.request_finished)
 
         # Convert our custom HttpResponse object back into the mod_python req.
-        populate_apache_request(response, req)
+        req.content_type = response['Content-Type']
+        for key, value in response.headers.items():
+            if key != 'Content-Type':
+                req.headers_out[key] = value
+        for c in response.cookies.values():
+            req.headers_out.add('Set-Cookie', c.output(header=''))
+        req.status = response.status_code
+        try:
+            for chunk in response:
+                req.write(chunk)
+        finally:
+            response.close()
+
         return 0 # mod_python.apache.OK
 
-def populate_apache_request(http_response, mod_python_req):
-    "Populates the mod_python request object with an HttpResponse"
-    mod_python_req.content_type = http_response['Content-Type']
-    for key, value in http_response.headers.items():
-        if key != 'Content-Type':
-            mod_python_req.headers_out[key] = value
-    for c in http_response.cookies.values():
-        mod_python_req.headers_out.add('Set-Cookie', c.output(header=''))
-    mod_python_req.status = http_response.status_code
-    for chunk in http_response.iterator:
-        mod_python_req.write(chunk)
-
 def handler(req):
     # mod_python hooks into this function.
     return ModPythonHandler()(req)

Modified: vendor/django/current/django/core/handlers/wsgi.py
===================================================================
--- vendor/django/current/django/core/handlers/wsgi.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/handlers/wsgi.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -4,6 +4,11 @@
 from django.utils import datastructures
 from django import http
 from pprint import pformat
+from shutil import copyfileobj
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
 
 # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
 STATUS_CODE_TEXT = {
@@ -50,17 +55,49 @@
     505: 'HTTP VERSION NOT SUPPORTED',
 }
 
+def safe_copyfileobj(fsrc, fdst, length=16*1024, size=0):
+    """
+    A version of shutil.copyfileobj that will not read more than 'size' bytes.
+    This makes it safe from clients sending more than CONTENT_LENGTH bytes of
+    data in the body.
+    """
+    if not size:
+        return
+    while size > 0:
+        buf = fsrc.read(min(length, size))
+        if not buf:
+            break
+        fdst.write(buf)
+        size -= len(buf)
+
 class WSGIRequest(http.HttpRequest):
     def __init__(self, environ):
         self.environ = environ
         self.path = environ['PATH_INFO']
-        self.META = environ 
+        self.META = environ
         self.method = environ['REQUEST_METHOD'].upper()
 
     def __repr__(self):
+        # Since this is called as part of error handling, we need to be very
+        # robust against potentially malformed input.
+        try:
+            get = pformat(self.GET)
+        except:
+            get = '<could not parse>'
+        try:
+            post = pformat(self.POST)
+        except:
+            post = '<could not parse>'
+        try:
+            cookies = pformat(self.COOKIES)
+        except:
+            cookies = '<could not parse>'
+        try:
+            meta = pformat(self.META)
+        except:
+            meta = '<could not parse>'
         return '<WSGIRequest\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' % \
-            (pformat(self.GET), pformat(self.POST), pformat(self.COOKIES),
-            pformat(self.META))
+            (get, post, cookies, meta)
 
     def get_full_path(self):
         return '%s%s' % (self.path, self.environ.get('QUERY_STRING', '') and ('?' + self.environ.get('QUERY_STRING', '')) or '')
@@ -119,7 +156,15 @@
         try:
             return self._raw_post_data
         except AttributeError:
-            self._raw_post_data = self.environ['wsgi.input'].read(int(self.environ["CONTENT_LENGTH"]))
+            buf = StringIO()
+            try:
+                # CONTENT_LENGTH might be absent if POST doesn't have content at all (lighttpd)
+                content_length = int(self.environ.get('CONTENT_LENGTH', 0))
+            except ValueError: # if CONTENT_LENGTH was empty string or not an integer
+                content_length = 0
+            safe_copyfileobj(self.environ['wsgi.input'], buf, size=content_length)
+            self._raw_post_data = buf.getvalue()
+            buf.close()
             return self._raw_post_data
 
     GET = property(_get_get, _set_get)
@@ -133,10 +178,6 @@
     def __call__(self, environ, start_response):
         from django.conf import settings
 
-        if settings.ENABLE_PSYCO:
-            import psyco
-            psyco.profile()
-
         # Set up middleware if needed. We couldn't do this earlier, because
         # settings weren't available.
         if self._request_middleware is None:
@@ -145,7 +186,7 @@
         dispatcher.send(signal=signals.request_started)
         try:
             request = WSGIRequest(environ)
-            response = self.get_response(request.path, request)
+            response = self.get_response(request)
 
             # Apply response middleware
             for middleware_method in self._response_middleware:
@@ -163,4 +204,4 @@
         for c in response.cookies.values():
             response_headers.append(('Set-Cookie', c.output(header='')))
         start_response(status, response_headers)
-        return response.iterator
+        return response

Modified: vendor/django/current/django/core/mail.py
===================================================================
--- vendor/django/current/django/core/mail.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/mail.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,8 +3,25 @@
 from django.conf import settings
 from email.MIMEText import MIMEText
 from email.Header import Header
-import smtplib, rfc822
+from email.Utils import formatdate
+import smtplib
+import socket
+import time
+import random
 
+# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of
+# seconds, which slows down the restart of the server.
+class CachedDnsName(object):
+    def __str__(self):
+        return self.get_fqdn()
+
+    def get_fqdn(self):
+        if not hasattr(self, '_fqdn'):
+            self._fqdn = socket.getfqdn()
+        return self._fqdn
+
+DNS_NAME = CachedDnsName()
+
 class BadHeaderError(ValueError):
     pass
 
@@ -17,21 +34,34 @@
             val = Header(val, settings.DEFAULT_CHARSET)
         MIMEText.__setitem__(self, name, val)
 
-def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=settings.EMAIL_HOST_USER, auth_password=settings.EMAIL_HOST_PASSWORD):
+def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None):
     """
     Easy wrapper for sending a single message to a recipient list. All members
     of the recipient list will see the other recipients in the 'To' field.
+
+    If auth_user is None, the EMAIL_HOST_USER setting is used.
+    If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
     """
+    if auth_user is None:
+        auth_user = settings.EMAIL_HOST_USER
+    if auth_password is None:
+        auth_password = settings.EMAIL_HOST_PASSWORD
     return send_mass_mail([[subject, message, from_email, recipient_list]], fail_silently, auth_user, auth_password)
 
-def send_mass_mail(datatuple, fail_silently=False, auth_user=settings.EMAIL_HOST_USER, auth_password=settings.EMAIL_HOST_PASSWORD):
+def send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None):
     """
     Given a datatuple of (subject, message, from_email, recipient_list), sends
     each message to each recipient list. Returns the number of e-mails sent.
 
     If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
     If auth_user and auth_password are set, they're used to log in.
+    If auth_user is None, the EMAIL_HOST_USER setting is used.
+    If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
     """
+    if auth_user is None:
+        auth_user = settings.EMAIL_HOST_USER
+    if auth_password is None:
+        auth_password = settings.EMAIL_HOST_PASSWORD
     try:
         server = smtplib.SMTP(settings.EMAIL_HOST, settings.EMAIL_PORT)
         if auth_user and auth_password:
@@ -49,8 +79,13 @@
         msg['Subject'] = subject
         msg['From'] = from_email
         msg['To'] = ', '.join(recipient_list)
-        msg['Date'] = rfc822.formatdate()
+        msg['Date'] = formatdate()
         try:
+            random_bits = str(random.getrandbits(64))
+        except AttributeError: # Python 2.3 doesn't have random.getrandbits().
+            random_bits = ''.join([random.choice('1234567890') for i in range(19)])
+        msg['Message-ID'] = "<%d.%s@%s>" % (time.time(), random_bits, DNS_NAME)
+        try:
             server.sendmail(from_email, recipient_list, msg.as_string())
             num_sent += 1
         except:

Modified: vendor/django/current/django/core/management.py
===================================================================
--- vendor/django/current/django/core/management.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/management.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,13 +25,14 @@
 # which has been installed.
 PROJECT_TEMPLATE_DIR = os.path.join(django.__path__[0], 'conf', '%s_template')
 
-INVALID_PROJECT_NAMES = ('django', 'test')
+INVALID_PROJECT_NAMES = ('django', 'site', 'test')
 
 # Set up the terminal color scheme.
 class dummy: pass
 style = dummy()
 style.ERROR = termcolors.make_style(fg='red', opts=('bold',))
 style.ERROR_OUTPUT = termcolors.make_style(fg='red', opts=('bold',))
+style.NOTICE = termcolors.make_style(fg='red')
 style.SQL_FIELD = termcolors.make_style(fg='green', opts=('bold',))
 style.SQL_COLTYPE = termcolors.make_style(fg='green')
 style.SQL_KEYWORD = termcolors.make_style(fg='yellow')
@@ -67,6 +68,25 @@
     cursor = connection.cursor()
     return get_introspection_module().get_table_list(cursor)
 
+def _get_sequence_list():
+    "Returns a list of information about all DB sequences for all models in all apps"
+    from django.db import models
+
+    apps = models.get_apps()
+    sequence_list = []
+
+    for app in apps:
+        for model in models.get_models(app):
+            for f in model._meta.fields:
+                if isinstance(f, models.AutoField):
+                    sequence_list.append({'table':model._meta.db_table,'column':f.column,})
+                    break # Only one AutoField is allowed per model, so don't bother continuing.
+
+            for f in model._meta.many_to_many:
+                sequence_list.append({'table':f.m2m_db_table(),'column':None,})
+
+    return sequence_list
+
 # If the foreign key points to an AutoField, a PositiveIntegerField or a
 # PositiveSmallIntegerField, the foreign key should be an IntegerField, not the
 # referred field type. Otherwise, the foreign key should be the same type of
@@ -94,13 +114,15 @@
             "Edit your settings file and change DATABASE_ENGINE to something like 'postgresql' or 'mysql'.\n"))
         sys.exit(1)
 
-    # Get installed models, so we generate REFERENCES right
+    # Get installed models, so we generate REFERENCES right.
+    # We trim models from the current app so that the sqlreset command does not
+    # generate invalid SQL (leaving models out of known_models is harmless, so
+    # we can be conservative).
+    app_models = models.get_models(app)
     final_output = []
-    known_models = set(_get_installed_models(_get_table_list()))
+    known_models = set([model for model in _get_installed_models(_get_table_list()) if model not in app_models])
     pending_references = {}
 
-    app_models = models.get_models(app)
-
     for model in app_models:
         output, references = _get_sql_model_create(model, known_models)
         final_output.extend(output)
@@ -118,10 +140,13 @@
     # but don't exist physically
     not_installed_models = set(pending_references.keys())
     if not_installed_models:
-        final_output.append('-- The following references should be added but depend on non-existant tables:')
+        alter_sql = []
         for model in not_installed_models:
-            final_output.extend(['-- ' + sql for sql in
+            alter_sql.extend(['-- ' + sql for sql in
                 _get_sql_for_pending_references(model, pending_references)])
+        if alter_sql:
+            final_output.append('-- The following references should be added but depend on non-existent tables:')
+            final_output.extend(alter_sql)
 
     return final_output
 get_sql_create.help_doc = "Prints the CREATE TABLE SQL statements for the given app name(s)."
@@ -141,7 +166,7 @@
     table_output = []
     pending_references = {}
     for f in opts.fields:
-        if isinstance(f, models.ForeignKey):
+        if isinstance(f, (models.ForeignKey, models.OneToOneField)):
             rel_field = f.rel.get_related_field()
             data_type = get_rel_data_type(rel_field)
         else:
@@ -161,7 +186,8 @@
                 if f.rel.to in known_models:
                     field_output.append(style.SQL_KEYWORD('REFERENCES') + ' ' + \
                         style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)) + ' (' + \
-                        style.SQL_FIELD(backend.quote_name(f.rel.to._meta.get_field(f.rel.field_name).column)) + ')'
+                        style.SQL_FIELD(backend.quote_name(f.rel.to._meta.get_field(f.rel.field_name).column)) + ')' + 
+                        backend.get_deferrable_sql()
                     )
                 else:
                     # We haven't yet created the table to which this field
@@ -192,7 +218,6 @@
     data_types = get_creation_module().DATA_TYPES
 
     final_output = []
-    reference_names = {}
     if backend.supports_constraints:
         opts = model._meta
         if model in pending_references:
@@ -202,15 +227,13 @@
                 r_col = f.column
                 table = opts.db_table
                 col = opts.get_field(f.rel.field_name).column
-                r_name = '%s_referencing_%s_%s' % (r_col, table, col)
-                if r_name in reference_names:
-                    reference_names[r_name] += 1
-                    r_name += '_%s' % reference_names[r_name]
-                else:
-                    reference_names[r_name] = 0
-                final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s);' % \
+                # For MySQL, r_name must be unique in the first 64 characters.
+                # So we are careful with character usage here.
+                r_name = '%s_refs_%s_%x' % (r_col, col, abs(hash((r_table, table))))
+                final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' % \
                     (backend.quote_name(r_table), r_name,
-                    backend.quote_name(r_col), backend.quote_name(table), backend.quote_name(col)))
+                    backend.quote_name(r_col), backend.quote_name(table), backend.quote_name(col), 
+                    backend.get_deferrable_sql()))
             del pending_references[model]
     return final_output
 
@@ -230,18 +253,20 @@
                 (style.SQL_FIELD(backend.quote_name('id')),
                 style.SQL_COLTYPE(data_types['AutoField']),
                 style.SQL_KEYWORD('NOT NULL PRIMARY KEY')))
-            table_output.append('    %s %s %s %s (%s),' % \
+            table_output.append('    %s %s %s %s (%s)%s,' % \
                 (style.SQL_FIELD(backend.quote_name(f.m2m_column_name())),
                 style.SQL_COLTYPE(data_types[get_rel_data_type(opts.pk)] % opts.pk.__dict__),
                 style.SQL_KEYWORD('NOT NULL REFERENCES'),
                 style.SQL_TABLE(backend.quote_name(opts.db_table)),
-                style.SQL_FIELD(backend.quote_name(opts.pk.column))))
-            table_output.append('    %s %s %s %s (%s),' % \
+                style.SQL_FIELD(backend.quote_name(opts.pk.column)),
+                backend.get_deferrable_sql()))
+            table_output.append('    %s %s %s %s (%s)%s,' % \
                 (style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name())),
                 style.SQL_COLTYPE(data_types[get_rel_data_type(f.rel.to._meta.pk)] % f.rel.to._meta.pk.__dict__),
                 style.SQL_KEYWORD('NOT NULL REFERENCES'),
                 style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)),
-                style.SQL_FIELD(backend.quote_name(f.rel.to._meta.pk.column))))
+                style.SQL_FIELD(backend.quote_name(f.rel.to._meta.pk.column)),
+                backend.get_deferrable_sql()))
             table_output.append('    %s (%s, %s)' % \
                 (style.SQL_KEYWORD('UNIQUE'),
                 style.SQL_FIELD(backend.quote_name(f.m2m_column_name())),
@@ -255,7 +280,7 @@
     from django.db import backend, connection, models, get_introspection_module
     introspection = get_introspection_module()
 
-    # This should work even if a connecton isn't available
+    # This should work even if a connection isn't available
     try:
         cursor = connection.cursor()
     except:
@@ -299,7 +324,7 @@
                         (style.SQL_KEYWORD('ALTER TABLE'),
                         style.SQL_TABLE(backend.quote_name(table)),
                         style.SQL_KEYWORD(backend.get_drop_foreignkey_sql()),
-                        style.SQL_FIELD(backend.quote_name("%s_referencing_%s_%s" % (col, r_table, r_col)))))
+                        style.SQL_FIELD(backend.quote_name('%s_refs_%s_%x' % (col, r_col, abs(hash((table, r_table))))))))
                 del references_to_delete[model]
 
     # Output DROP TABLE statements for many-to-many tables.
@@ -328,7 +353,15 @@
 get_sql_reset.help_doc = "Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s)."
 get_sql_reset.args = APP_ARGS
 
-def get_sql_initial_data_for_model(model):
+def get_sql_flush():
+    "Returns a list of the SQL statements used to flush the database"
+    from django.db import backend
+    statements = backend.get_sql_flush(style, _get_table_list(), _get_sequence_list())
+    return statements
+get_sql_flush.help_doc = "Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed."
+get_sql_flush.args = ''
+
+def get_custom_sql_for_model(model):
     from django.db import models
     from django.conf import settings
 
@@ -345,16 +378,18 @@
                  os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
     for sql_file in sql_files:
         if os.path.exists(sql_file):
-            fp = open(sql_file)
+            fp = open(sql_file, 'U')
             for statement in statements.split(fp.read()):
+                # Remove any comments from the file
+                statement = re.sub(r"--.*[\n\Z]", "", statement)
                 if statement.strip():
                     output.append(statement + ";")
             fp.close()
 
     return output
 
-def get_sql_initial_data(app):
-    "Returns a list of the initial INSERT SQL statements for the given app."
+def get_custom_sql(app):
+    "Returns a list of the custom table modifying SQL statements for the given app."
     from django.db.models import get_models
     output = []
 
@@ -362,12 +397,18 @@
     app_dir = os.path.normpath(os.path.join(os.path.dirname(app.__file__), 'sql'))
 
     for model in app_models:
-        output.extend(get_sql_initial_data_for_model(model))
+        output.extend(get_custom_sql_for_model(model))
 
     return output
-get_sql_initial_data.help_doc = "Prints the initial INSERT SQL statements for the given app name(s)."
-get_sql_initial_data.args = APP_ARGS
+get_custom_sql.help_doc = "Prints the custom table modifying SQL statements for the given app name(s)."
+get_custom_sql.args = APP_ARGS
 
+def get_sql_initial_data(apps):
+    "Returns a list of the initial INSERT SQL statements for the given app."
+    return style.ERROR("This action has been renamed. Try './manage.py sqlcustom %s'." % ' '.join(apps and apps or ['app1', 'app2']))
+get_sql_initial_data.help_doc = "RENAMED: see 'sqlcustom'"
+get_sql_initial_data.args = ''
+
 def get_sql_sequence_reset(app):
     "Returns a list of the SQL statements to reset PostgreSQL sequences for the given app."
     from django.db import backend, models
@@ -396,37 +437,54 @@
 get_sql_sequence_reset.args = APP_ARGS
 
 def get_sql_indexes(app):
-    "Returns a list of the CREATE INDEX SQL statements for the given app."
-    from django.db import backend, models
+    "Returns a list of the CREATE INDEX SQL statements for all models in the given app."
+    from django.db import models
     output = []
-
     for model in models.get_models(app):
-        for f in model._meta.fields:
-            if f.db_index:
-                unique = f.unique and 'UNIQUE ' or ''
-                output.append(
-                    style.SQL_KEYWORD('CREATE %sINDEX' % unique) + ' ' + \
-                    style.SQL_TABLE('%s_%s' % (model._meta.db_table, f.column)) + ' ' + \
-                    style.SQL_KEYWORD('ON') + ' ' + \
-                    style.SQL_TABLE(backend.quote_name(model._meta.db_table)) + ' ' + \
-                    "(%s);" % style.SQL_FIELD(backend.quote_name(f.column))
-                )
+        output.extend(get_sql_indexes_for_model(model))
     return output
 get_sql_indexes.help_doc = "Prints the CREATE INDEX SQL statements for the given model module name(s)."
 get_sql_indexes.args = APP_ARGS
 
+def get_sql_indexes_for_model(model):
+    "Returns the CREATE INDEX SQL statements for a single model"
+    from django.db import backend
+    output = []
+
+    for f in model._meta.fields:
+        if f.db_index:
+            unique = f.unique and 'UNIQUE ' or ''
+            output.append(
+                style.SQL_KEYWORD('CREATE %sINDEX' % unique) + ' ' + \
+                style.SQL_TABLE('%s_%s' % (model._meta.db_table, f.column)) + ' ' + \
+                style.SQL_KEYWORD('ON') + ' ' + \
+                style.SQL_TABLE(backend.quote_name(model._meta.db_table)) + ' ' + \
+                "(%s);" % style.SQL_FIELD(backend.quote_name(f.column))
+            )
+    return output
+
 def get_sql_all(app):
     "Returns a list of CREATE TABLE SQL, initial-data inserts, and CREATE INDEX SQL for the given module."
-    return get_sql_create(app) + get_sql_initial_data(app) + get_sql_indexes(app)
+    return get_sql_create(app) + get_custom_sql(app) + get_sql_indexes(app)
 get_sql_all.help_doc = "Prints the CREATE TABLE, initial-data and CREATE INDEX SQL statements for the given model module name(s)."
 get_sql_all.args = APP_ARGS
 
-def syncdb():
+def _emit_post_sync_signal(created_models, verbosity, interactive):
+    from django.db import models
+    from django.dispatch import dispatcher
+    # Emit the post_sync signal for every application.
+    for app in models.get_apps():
+        app_name = app.__name__.split('.')[-2]
+        if verbosity >= 2:
+            print "Running post-sync handlers for application", app_name
+        dispatcher.send(signal=models.signals.post_syncdb, sender=app,
+            app=app, created_models=created_models,
+            verbosity=verbosity, interactive=interactive)
+
+def syncdb(verbosity=1, interactive=True):
     "Creates the database tables for all apps in INSTALLED_APPS whose tables haven't already been created."
     from django.db import connection, transaction, models, get_creation_module
-    from django.db.models import signals
     from django.conf import settings
-    from django.dispatch import dispatcher
 
     disable_termcolors()
 
@@ -437,7 +495,7 @@
     # dispatcher events.
     for app_name in settings.INSTALLED_APPS:
         try:
-            __import__(app_name + '.management', '', '', [''])
+            __import__(app_name + '.management', {}, {}, [''])
         except ImportError:
             pass
 
@@ -454,60 +512,90 @@
     created_models = set()
     pending_references = {}
 
+    # Create the tables for each model
     for app in models.get_apps():
+        app_name = app.__name__.split('.')[-2]
         model_list = models.get_models(app)
         for model in model_list:
             # Create the model's database table, if it doesn't already exist.
+            if verbosity >= 2:
+                print "Processing %s.%s model" % (app_name, model._meta.object_name)
             if model._meta.db_table in table_list:
                 continue
             sql, references = _get_sql_model_create(model, seen_models)
             seen_models.add(model)
             created_models.add(model)
             for refto, refs in references.items():
-                try:
-                    pending_references[refto].extend(refs)
-                except KeyError:
-                    pending_references[refto] = refs
+                pending_references.setdefault(refto, []).extend(refs)
             sql.extend(_get_sql_for_pending_references(model, pending_references))
-            print "Creating table %s" % model._meta.db_table
+            if verbosity >= 1:
+                print "Creating table %s" % model._meta.db_table
             for statement in sql:
                 cursor.execute(statement)
             table_list.append(model._meta.db_table)
 
+    # Create the m2m tables. This must be done after all tables have been created
+    # to ensure that all referred tables will exist.
+    for app in models.get_apps():
+        app_name = app.__name__.split('.')[-2]
+        model_list = models.get_models(app)
         for model in model_list:
             if model in created_models:
                 sql = _get_many_to_many_sql_for_model(model)
                 if sql:
-                    print "Creating many-to-many tables for %s model" % model.__name__
+                    if verbosity >= 2:
+                        print "Creating many-to-many tables for %s.%s model" % (app_name, model._meta.object_name)
                     for statement in sql:
                         cursor.execute(statement)
 
-        transaction.commit_unless_managed()
+    transaction.commit_unless_managed()
 
     # Send the post_syncdb signal, so individual apps can do whatever they need
     # to do at this point.
+    _emit_post_sync_signal(created_models, verbosity, interactive)
+
+    # Install custom SQL for the app (but only if this 
+    # is a model we've just created)
     for app in models.get_apps():
-        dispatcher.send(signal=signals.post_syncdb, sender=app,
-            app=app, created_models=created_models)
+        for model in models.get_models(app):
+            if model in created_models:
+                custom_sql = get_custom_sql_for_model(model)
+                if custom_sql:
+                    if verbosity >= 1:
+                        print "Installing custom SQL for %s.%s model" % (app_name, model._meta.object_name)
+                    try:
+                        for sql in custom_sql:
+                            cursor.execute(sql)
+                    except Exception, e:
+                        sys.stderr.write("Failed to install custom SQL for %s.%s model: %s" % \
+                                            (app_name, model._meta.object_name, e))
+                        transaction.rollback_unless_managed()
+                    else:
+                        transaction.commit_unless_managed()
 
-        # Install initial data for the app (but only if this is a model we've
-        # just created)
+    # Install SQL indicies for all newly created models
+    for app in models.get_apps():
+        app_name = app.__name__.split('.')[-2]
         for model in models.get_models(app):
             if model in created_models:
-                initial_sql = get_sql_initial_data_for_model(model)
-                if initial_sql:
-                    print "Installing initial data for %s model" % model._meta.object_name
+                index_sql = get_sql_indexes_for_model(model)
+                if index_sql:
+                    if verbosity >= 1:
+                        print "Installing index for %s.%s model" % (app_name, model._meta.object_name)
                     try:
-                        for sql in initial_sql:
+                        for sql in index_sql:
                             cursor.execute(sql)
                     except Exception, e:
-                        sys.stderr.write("Failed to install initial SQL data for %s model: %s" % \
-                                            (model._meta.object_name, e))
+                        sys.stderr.write("Failed to install index for %s.%s model: %s" % \
+                                            (app_name, model._meta.object_name, e))
                         transaction.rollback_unless_managed()
                     else:
                         transaction.commit_unless_managed()
 
-syncdb.args = ''
+    # Install the 'initialdata' fixture, using format discovery
+    load_data(['initial_data'], verbosity=verbosity)
+syncdb.help_doc = "Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created."
+syncdb.args = '[--verbosity] [--interactive]'
 
 def get_admin_index(app):
     "Returns admin-index template snippet (in list form) for the given app."
@@ -546,7 +634,7 @@
     # Inspired by Postfix's "postconf -n".
     from django.conf import settings, global_settings
 
-    user_settings = _module_to_dict(settings)
+    user_settings = _module_to_dict(settings._target)
     default_settings = _module_to_dict(global_settings)
 
     output = []
@@ -560,72 +648,109 @@
     print '\n'.join(output)
 diffsettings.args = ""
 
-def install(app):
-    "Executes the equivalent of 'get_sql_all' in the current database."
+def reset(app, interactive=True):
+    "Executes the equivalent of 'get_sql_reset' in the current database."
     from django.db import connection, transaction
-
+    from django.conf import settings
     app_name = app.__name__.split('.')[-2]
 
     disable_termcolors()
 
     # First, try validating the models.
     _check_for_validation_errors(app)
+    sql_list = get_sql_reset(app)
 
-    sql_list = get_sql_all(app)
+    if interactive:
+        confirm = raw_input("""
+You have requested a database reset.
+This will IRREVERSIBLY DESTROY any data for
+the "%s" application in the database "%s".
+Are you sure you want to do this?
 
-    try:
-        cursor = connection.cursor()
-        for sql in sql_list:
-            cursor.execute(sql)
-    except Exception, e:
-        sys.stderr.write(style.ERROR("""Error: %s couldn't be installed. Possible reasons:
+Type 'yes' to continue, or 'no' to cancel: """ % (app_name, settings.DATABASE_NAME))
+    else:
+        confirm = 'yes'
+
+    if confirm == 'yes':
+        try:
+            cursor = connection.cursor()
+            for sql in sql_list:
+                cursor.execute(sql)
+        except Exception, e:
+            sys.stderr.write(style.ERROR("""Error: %s couldn't be reset. Possible reasons:
   * The database isn't running or isn't configured correctly.
-  * At least one of the database tables already exists.
+  * At least one of the database tables doesn't exist.
   * The SQL was invalid.
-Hint: Look at the output of 'django-admin.py sqlall %s'. That's the SQL this command wasn't able to run.
+Hint: Look at the output of 'django-admin.py sqlreset %s'. That's the SQL this command wasn't able to run.
 The full error: """ % (app_name, app_name)) + style.ERROR_OUTPUT(str(e)) + '\n')
-        transaction.rollback_unless_managed()
-        sys.exit(1)
-    transaction.commit_unless_managed()
-install.help_doc = "Executes ``sqlall`` for the given app(s) in the current database."
-install.args = APP_ARGS
+            transaction.rollback_unless_managed()
+            sys.exit(1)
+        transaction.commit_unless_managed()
+    else:
+        print "Reset cancelled."
+reset.help_doc = "Executes ``sqlreset`` for the given app(s) in the current database."
+reset.args = '[--interactive]' + APP_ARGS
 
-def reset(app):
-    "Executes the equivalent of 'get_sql_reset' in the current database."
-    from django.db import connection, transaction
-    app_name = app.__name__.split('.')[-2]
-
+def flush(verbosity=1, interactive=True):
+    "Returns all tables in the database to the same state they were in immediately after syncdb."
+    from django.conf import settings
+    from django.db import connection, transaction, models
+    from django.dispatch import dispatcher
+    
     disable_termcolors()
 
     # First, try validating the models.
-    _check_for_validation_errors(app)
-    sql_list = get_sql_reset(app)
+    _check_for_validation_errors()
 
-    confirm = raw_input("""
-You have requested a database reset.
-This will IRREVERSIBLY DESTROY any data in your database.
+    # Import the 'management' module within each installed app, to register
+    # dispatcher events.
+    for app_name in settings.INSTALLED_APPS:
+        try:
+            __import__(app_name + '.management', {}, {}, [''])
+        except ImportError:
+            pass
+    
+    sql_list = get_sql_flush()
+
+    if interactive:
+        confirm = raw_input("""
+You have requested a flush of the database.
+This will IRREVERSIBLY DESTROY all data currently in the database,
+and return each table to the state it was in after syncdb.
 Are you sure you want to do this?
 
 Type 'yes' to continue, or 'no' to cancel: """)
+    else:
+        confirm = 'yes'
+
     if confirm == 'yes':
         try:
             cursor = connection.cursor()
             for sql in sql_list:
                 cursor.execute(sql)
         except Exception, e:
-            sys.stderr.write(style.ERROR("""Error: %s couldn't be installed. Possible reasons:
+            sys.stderr.write(style.ERROR("""Error: Database %s couldn't be flushed. Possible reasons:
   * The database isn't running or isn't configured correctly.
-  * At least one of the database tables already exists.
+  * At least one of the expected database tables doesn't exist.
   * The SQL was invalid.
-Hint: Look at the output of 'django-admin.py sqlreset %s'. That's the SQL this command wasn't able to run.
-The full error: """ % (app_name, app_name)) + style.ERROR_OUTPUT(str(e)) + '\n')
+Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
+The full error: """ % settings.DATABASE_NAME + style.ERROR_OUTPUT(str(e)) + '\n'))
             transaction.rollback_unless_managed()
             sys.exit(1)
         transaction.commit_unless_managed()
+
+        # Emit the post sync signal. This allows individual
+        # applications to respond as if the database had been
+        # sync'd from scratch.
+        _emit_post_sync_signal(models.get_models(), verbosity, interactive)
+        
+        # Reinstall the initial_data fixture
+        load_data(['initial_data'], verbosity=verbosity)
+        
     else:
-        print "Reset cancelled."
-reset.help_doc = "Executes ``sqlreset`` for the given app(s) in the current database."
-reset.args = APP_ARGS
+        print "Flush cancelled."
+flush.help_doc = "Executes ``sqlflush`` on the current database."
+flush.args = '[--verbosity] [--interactive]'
 
 def _start_helper(app_or_project, name, directory, other_name=''):
     other = {'project': 'app', 'app': 'project'}[app_or_project]
@@ -656,13 +781,16 @@
             fp_new.write(fp_old.read().replace('{{ %s_name }}' % app_or_project, name).replace('{{ %s_name }}' % other, other_name))
             fp_old.close()
             fp_new.close()
-            shutil.copymode(path_old, path_new)
+            try:
+                shutil.copymode(path_old, path_new)
+            except OSError:
+                sys.stderr.write(style.NOTICE("Notice: Couldn't set permission bits on %s. You're probably using an uncommon filesystem setup. No problem.\n" % path_new))
 
 def startproject(project_name, directory):
     "Creates a Django project for the given project_name in the given directory."
     from random import choice
     if project_name in INVALID_PROJECT_NAMES:
-        sys.stderr.write(style.ERROR("Error: %r isn't a valid project name. Please try another.\n" % project_name))
+        sys.stderr.write(style.ERROR("Error: '%r' conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name.\n" % project_name))
         sys.exit(1)
     _start_helper('project', project_name, directory)
     # Create a random SECRET_KEY hash, and put it in the main settings.
@@ -696,9 +824,7 @@
 
     introspection_module = get_introspection_module()
 
-    def table2model(table_name):
-        object_name = table_name.title().replace('_', '')
-        return object_name.endswith('s') and object_name[:-1] or object_name
+    table2model = lambda table_name: table_name.title().replace('_', '')
 
     cursor = connection.cursor()
     yield "# This is an auto-generated Django model module."
@@ -707,7 +833,7 @@
     yield "#     * Make sure each model has one field with primary_key=True"
     yield "# Feel free to rename the models, but don't rename db_table values or field names."
     yield "#"
-    yield "# Also note: You'll have to insert the output of 'django-admin.py sqlinitialdata [appname]'"
+    yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'"
     yield "# into your database."
     yield ''
     yield 'from django.db import models'
@@ -727,6 +853,10 @@
             comment_notes = [] # Holds Field notes, to be displayed in a Python comment.
             extra_params = {}  # Holds Field parameters such as 'db_column'.
 
+            if ' ' in att_name:
+                extra_params['db_column'] = att_name
+                att_name = att_name.replace(' ', '')
+                comment_notes.append('Field renamed to remove spaces.')
             if keyword.iskeyword(att_name):
                 extra_params['db_column'] = att_name
                 att_name += '_field'
@@ -812,7 +942,8 @@
     validates all models of all installed apps. Writes errors, if any, to outfile.
     Returns number of errors.
     """
-    from django.db import models
+    from django.conf import settings
+    from django.db import models, connection
     from django.db.models.loading import get_app_errors
     from django.db.models.fields.related import RelatedObject
 
@@ -854,6 +985,12 @@
             if f.db_index not in (None, True, False):
                 e.add(opts, '"%s": "db_index" should be either None, True or False.' % f.name)
 
+            # Check that maxlength <= 255 if using older MySQL versions.
+            if settings.DATABASE_ENGINE == 'mysql':
+                db_version = connection.get_server_version()
+                if db_version < (5, 0, 3) and isinstance(f, (models.CharField, models.CommaSeparatedIntegerField, models.SlugField)) and f.maxlength > 255:
+                    e.add(opts, '"%s": %s cannot have a "maxlength" greater than 255 when you are using a version of MySQL prior to 5.0.3 (you are using %s).' % (f.name, f.__class__.__name__, '.'.join([str(n) for n in db_version[:3]])))
+
             # Check to see if the related field will clash with any
             # existing fields, m2m fields, m2m related objects or related objects
             if f.rel:
@@ -895,27 +1032,32 @@
 
             rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name()
             rel_query_name = f.related_query_name()
-            for r in rel_opts.fields:
-                if r.name == rel_name:
-                    e.add(opts, "Accessor for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-                if r.name == rel_query_name:
-                    e.add(opts, "Reverse query name for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-            for r in rel_opts.many_to_many:
-                if r.name == rel_name:
-                    e.add(opts, "Accessor for m2m field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-                if r.name == rel_query_name:
-                    e.add(opts, "Reverse query name for m2m field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-            for r in rel_opts.get_all_related_many_to_many_objects():
-                if r.field is not f:
+            # If rel_name is none, there is no reverse accessor.
+            # (This only occurs for symmetrical m2m relations to self).
+            # If this is the case, there are no clashes to check for this field, as
+            # there are no reverse descriptors for this field.
+            if rel_name is not None:
+                for r in rel_opts.fields:
+                    if r.name == rel_name:
+                        e.add(opts, "Accessor for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                    if r.name == rel_query_name:
+                        e.add(opts, "Reverse query name for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                for r in rel_opts.many_to_many:
+                    if r.name == rel_name:
+                        e.add(opts, "Accessor for m2m field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                    if r.name == rel_query_name:
+                        e.add(opts, "Reverse query name for m2m field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                for r in rel_opts.get_all_related_many_to_many_objects():
+                    if r.field is not f:
+                        if r.get_accessor_name() == rel_name:
+                            e.add(opts, "Accessor for m2m field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                        if r.get_accessor_name() == rel_query_name:
+                            e.add(opts, "Reverse query name for m2m field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                for r in rel_opts.get_all_related_objects():
                     if r.get_accessor_name() == rel_name:
-                        e.add(opts, "Accessor for m2m field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                        e.add(opts, "Accessor for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
                     if r.get_accessor_name() == rel_query_name:
-                        e.add(opts, "Reverse query name for m2m field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
-            for r in rel_opts.get_all_related_objects():
-                if r.get_accessor_name() == rel_name:
-                    e.add(opts, "Accessor for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
-                if r.get_accessor_name() == rel_query_name:
-                    e.add(opts, "Reverse query name for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                        e.add(opts, "Reverse query name for m2m field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
 
         # Check admin attribute.
         if opts.admin is not None:
@@ -945,7 +1087,8 @@
                         try:
                             f = opts.get_field(fn)
                         except models.FieldDoesNotExist:
-                            e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn)
+                            if not hasattr(cls, fn):
+                                e.add(opts, '"admin.list_display_links" refers to %r, which isn\'t an attribute, method or property.' % fn)
                         if fn not in opts.admin.list_display:
                             e.add(opts, '"admin.list_display_links" refers to %r, which is not defined in "admin.list_display".' % fn)
                 # list_filter
@@ -957,6 +1100,12 @@
                             f = opts.get_field(fn)
                         except models.FieldDoesNotExist:
                             e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn)
+                # date_hierarchy
+                if opts.admin.date_hierarchy:
+                    try:
+                        f = opts.get_field(opts.admin.date_hierarchy)
+                    except models.FieldDoesNotExist:
+                        e.add(opts, '"admin.date_hierarchy" refers to %r, which isn\'t a field.' % opts.admin.date_hierarchy)
 
         # Check ordering attribute.
         if opts.ordering:
@@ -997,10 +1146,12 @@
 
     return len(e.errors)
 
-def validate(outfile=sys.stdout):
+def validate(outfile=sys.stdout, silent_success=False):
     "Validates all installed models."
     try:
         num_errors = get_validation_errors(outfile)
+        if silent_success and num_errors == 0:
+            return
         outfile.write('%s error%s found.\n' % (num_errors, num_errors != 1 and 's' or ''))
     except ImproperlyConfigured:
         outfile.write("Skipping validation because things aren't configured properly.")
@@ -1023,7 +1174,7 @@
         sys.stderr.write(s.read())
         sys.exit(1)
 
-def runserver(addr, port, use_reloader=True):
+def runserver(addr, port, use_reloader=True, admin_media_dir=''):
     "Starts a lightweight Web server for development."
     from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException
     from django.core.handlers.wsgi import WSGIHandler
@@ -1041,7 +1192,10 @@
         print "Development server is running at http://%s:%s/" % (addr, port)
         print "Quit the server with %s." % quit_command
         try:
-            run(addr, int(port), AdminMediaHandler(WSGIHandler()))
+            import django
+            path = admin_media_dir or django.__path__[0] + '/contrib/admin/media'
+            handler = AdminMediaHandler(WSGIHandler(), path)
+            run(addr, int(port), handler)
         except WSGIServerException, e:
             # Use helpful error messages instead of ugly tracebacks.
             ERRORS = {
@@ -1062,7 +1216,7 @@
         autoreload.main(inner_run)
     else:
         inner_run()
-runserver.args = '[--noreload] [optional port number, or ipaddr:port]'
+runserver.args = '[--noreload] [--adminmedia=ADMIN_MEDIA_PATH] [optional port number, or ipaddr:port]'
 
 def createcachetable(tablename):
     "Creates the table needed to use the SQL cache backend"
@@ -1102,6 +1256,11 @@
 
 def run_shell(use_plain=False):
     "Runs a Python interactive interpreter. Tries to use IPython, if it's available."
+    # XXX: (Temporary) workaround for ticket #1796: force early loading of all
+    # models from installed apps.
+    from django.db.models.loading import get_models
+    loaded_models = get_models()
+
     try:
         if use_plain:
             # Don't bother loading IPython, because the user wants plain Python.
@@ -1132,11 +1291,163 @@
 dbshell.args = ""
 
 def runfcgi(args):
-    """Run this project as a FastCGI application. requires flup."""
+    "Runs this project as a FastCGI application. Requires flup."
+    from django.conf import settings
+    from django.utils import translation
+    # Activate the current language, because it won't get activated later.
+    try:
+        translation.activate(settings.LANGUAGE_CODE)
+    except AttributeError:
+        pass
     from django.core.servers.fastcgi import runfastcgi
     runfastcgi(args)
 runfcgi.args = '[various KEY=val options, use `runfcgi help` for help]'
 
+def test(app_labels, verbosity=1):
+    "Runs the test suite for the specified applications"
+    from django.conf import settings
+    from django.db.models import get_app, get_apps
+
+    if len(app_labels) == 0:
+        app_list = get_apps()
+    else:
+        app_list = [get_app(app_label) for app_label in app_labels]
+
+    test_path = settings.TEST_RUNNER.split('.')
+    # Allow for Python 2.5 relative paths
+    if len(test_path) > 1:
+        test_module_name = '.'.join(test_path[:-1])
+    else:
+        test_module_name = '.'
+    test_module = __import__(test_module_name, {}, {}, test_path[-1])
+    test_runner = getattr(test_module, test_path[-1])
+
+    failures = test_runner(app_list, verbosity)
+    if failures:
+        sys.exit(failures)
+        
+test.help_doc = 'Runs the test suite for the specified applications, or the entire site if no apps are specified'
+test.args = '[--verbosity] ' + APP_ARGS
+
+def load_data(fixture_labels, verbosity=1):
+    "Installs the provided fixture file(s) as data in the database."
+    from django.db.models import get_apps
+    from django.core import serializers
+    from django.db import connection, transaction
+    from django.conf import settings
+    import sys
+     
+    # Keep a count of the installed objects and fixtures
+    count = [0,0]
+    
+    humanize = lambda dirname: dirname and "'%s'" % dirname or 'absolute path'
+
+    # Get a cursor (even though we don't need one yet). This has
+    # the side effect of initializing the test database (if 
+    # it isn't already initialized).
+    cursor = connection.cursor()
+    
+    # Start transaction management. All fixtures are installed in a 
+    # single transaction to ensure that all references are resolved.
+    transaction.commit_unless_managed()
+    transaction.enter_transaction_management()
+    transaction.managed(True)
+    
+    app_fixtures = [os.path.join(os.path.dirname(app.__file__),'fixtures') for app in get_apps()]
+    for fixture_label in fixture_labels:
+        if verbosity > 0:
+            print "Loading '%s' fixtures..." % fixture_label
+        for fixture_dir in app_fixtures + list(settings.FIXTURE_DIRS) + ['']:
+            if verbosity > 1:
+                print "Checking %s for fixtures..." % humanize(fixture_dir)
+            parts = fixture_label.split('.')
+            if len(parts) == 1:
+                fixture_name = fixture_label
+                formats = serializers.get_serializer_formats()
+            else:
+                fixture_name, format = '.'.join(parts[:-1]), parts[-1]
+                formats = [format]
+
+            label_found = False
+            for format in formats:
+                serializer = serializers.get_serializer(format)
+                if verbosity > 1:
+                    print "Trying %s for %s fixture '%s'..." % \
+                        (humanize(fixture_dir), format, fixture_name)
+                try:
+                    full_path = os.path.join(fixture_dir, '.'.join([fixture_name, format]))
+                    fixture = open(full_path, 'r')
+                    if label_found:
+                        fixture.close()
+                        print style.ERROR("Multiple fixtures named '%s' in %s. Aborting." % 
+                            (fixture_name, humanize(fixture_dir)))
+                        transaction.rollback()
+                        transaction.leave_transaction_management()
+                        return
+                    else:
+                        count[1] += 1
+                        if verbosity > 0:
+                            print "Installing %s fixture '%s' from %s." % \
+                                (format, fixture_name, humanize(fixture_dir))
+                        try:
+                            objects =  serializers.deserialize(format, fixture)
+                            for obj in objects:
+                                count[0] += 1
+                                obj.save()
+                            label_found = True
+                        except Exception, e:
+                            fixture.close()
+                            sys.stderr.write(
+                                style.ERROR("Problem installing fixture '%s': %s\n" % 
+                                     (full_path, str(e))))
+                            transaction.rollback()
+                            transaction.leave_transaction_management()
+                            return
+                        fixture.close()
+                except:
+                    if verbosity > 1:
+                        print "No %s fixture '%s' in %s." % \
+                            (format, fixture_name, humanize(fixture_dir))
+    if count[0] == 0:
+        if verbosity > 0:
+            print "No fixtures found."
+    else:
+        if verbosity > 0:
+            print "Installed %d object(s) from %d fixture(s)" % tuple(count)
+    transaction.commit()
+    transaction.leave_transaction_management()
+        
+load_data.help_doc = 'Installs the named fixture(s) in the database'
+load_data.args = "[--verbosity] fixture, fixture, ..."
+ 
+def dump_data(app_labels, format='json', indent=None):
+    "Output the current contents of the database as a fixture of the given format"
+    from django.db.models import get_app, get_apps, get_models
+    from django.core import serializers
+ 
+    if len(app_labels) == 0:
+        app_list = get_apps()
+    else:
+        app_list = [get_app(app_label) for app_label in app_labels]
+ 
+    # Check that the serialization format exists; this is a shortcut to
+    # avoid collating all the objects and _then_ failing.
+    try:
+        serializers.get_serializer(format)
+    except KeyError:
+        sys.stderr.write(style.ERROR("Unknown serialization format: %s\n" % format))        
+    
+    objects = []
+    for app in app_list:
+        for model in get_models(app):
+            objects.extend(model.objects.all())
+    try:
+        return serializers.serialize(format, objects, indent=indent)
+    except Exception, e:
+        sys.stderr.write(style.ERROR("Unable to serialize database: %s\n" % e))
+dump_data.help_doc = 'Output the contents of the database as a fixture of the given format'
+dump_data.args = '[--format]' + APP_ARGS
+
 # Utilities for command-line script
 
 DEFAULT_ACTION_MAPPING = {
@@ -1144,8 +1455,10 @@
     'createcachetable' : createcachetable,
     'dbshell': dbshell,
     'diffsettings': diffsettings,
+    'dumpdata': dump_data,
+    'flush': flush,
     'inspectdb': inspectdb,
-    'install': install,
+    'loaddata': load_data,
     'reset': reset,
     'runfcgi': runfcgi,
     'runserver': runserver,
@@ -1153,6 +1466,8 @@
     'sql': get_sql_create,
     'sqlall': get_sql_all,
     'sqlclear': get_sql_delete,
+    'sqlcustom': get_custom_sql,
+    'sqlflush': get_sql_flush,
     'sqlindexes': get_sql_indexes,
     'sqlinitialdata': get_sql_initial_data,
     'sqlreset': get_sql_reset,
@@ -1161,6 +1476,7 @@
     'startproject': startproject,
     'syncdb': syncdb,
     'validate': validate,
+    'test':test,
 }
 
 NO_SQL_TRANSACTION = (
@@ -1168,7 +1484,6 @@
     'createcachetable',
     'dbshell',
     'diffsettings',
-    'install',
     'reset',
     'sqlindexes',
     'syncdb',
@@ -1211,8 +1526,19 @@
         help='Lets you manually add a directory the Python path, e.g. "/home/djangoprojects/myproject".')
     parser.add_option('--plain', action='store_true', dest='plain',
         help='Tells Django to use plain Python, not IPython, for "shell" command.')
+    parser.add_option('--noinput', action='store_false', dest='interactive', default=True,
+        help='Tells Django to NOT prompt the user for input of any kind.')
     parser.add_option('--noreload', action='store_false', dest='use_reloader', default=True,
         help='Tells Django to NOT use the auto-reloader when running the development server.')
+    parser.add_option('--format', default='json', dest='format',
+        help='Specifies the output serialization format for fixtures')    
+    parser.add_option('--indent', default=None, dest='indent',
+        type='int', help='Specifies the indent level to use when pretty-printing output')
+    parser.add_option('--verbosity', action='store', dest='verbosity', default='1',
+        type='choice', choices=['0', '1', '2'],
+        help='Verbosity level; 0=minimal output, 1=normal output, 2=all output'),
+    parser.add_option('--adminmedia', dest='admin_media_path', default='', help='Specifies the directory from which to serve admin media for runserver.'),
+
     options, args = parser.parse_args(argv[1:])
 
     # Take care of options.
@@ -1239,8 +1565,10 @@
 
     if action == 'shell':
         action_mapping[action](options.plain is True)
-    elif action in ('syncdb', 'validate', 'diffsettings', 'dbshell'):
+    elif action in ('validate', 'diffsettings', 'dbshell'):
         action_mapping[action]()
+    elif action in ('flush', 'syncdb'):
+        action_mapping[action](int(options.verbosity), options.interactive)
     elif action == 'inspectdb':
         try:
             for line in action_mapping[action]():
@@ -1253,6 +1581,16 @@
             action_mapping[action](args[1])
         except IndexError:
             parser.print_usage_and_exit()
+    elif action in ('test', 'loaddata'):
+        try:
+            action_mapping[action](args[1:], int(options.verbosity))
+        except IndexError:
+            parser.print_usage_and_exit()
+    elif action == 'dumpdata':
+        try:
+            print action_mapping[action](args[1:], options.format, options.indent)
+        except IndexError:
+            parser.print_usage_and_exit()
     elif action in ('startapp', 'startproject'):
         try:
             name = args[1]
@@ -1268,11 +1606,16 @@
                 addr, port = args[1].split(':')
             except ValueError:
                 addr, port = '', args[1]
-        action_mapping[action](addr, port, options.use_reloader)
+        action_mapping[action](addr, port, options.use_reloader, options.admin_media_path)
     elif action == 'runfcgi':
         action_mapping[action](args[1:])
+    elif action == 'sqlinitialdata':
+        print action_mapping[action](args[1:])
+    elif action == 'sqlflush':
+        print '\n'.join(action_mapping[action]())
     else:
         from django.db import models
+        validate(silent_success=True)
         try:
             mod_list = [models.get_app(app_label) for app_label in args[1:]]
         except ImportError, e:
@@ -1283,25 +1626,35 @@
         if action not in NO_SQL_TRANSACTION:
             print style.SQL_KEYWORD("BEGIN;")
         for mod in mod_list:
-            output = action_mapping[action](mod)
+            if action == 'reset':
+                output = action_mapping[action](mod, options.interactive)
+            else:
+                output = action_mapping[action](mod)
             if output:
                 print '\n'.join(output)
         if action not in NO_SQL_TRANSACTION:
             print style.SQL_KEYWORD("COMMIT;")
 
-def execute_manager(settings_mod, argv=None):
+def setup_environ(settings_mod):
+    """
+    Configure the runtime environment. This can also be used by external
+    scripts wanting to set up a similar environment to manage.py.
+    """
     # Add this project to sys.path so that it's importable in the conventional
     # way. For example, if this file (manage.py) lives in a directory
     # "myproject", this code would add "/path/to/myproject" to sys.path.
     project_directory = os.path.dirname(settings_mod.__file__)
     project_name = os.path.basename(project_directory)
     sys.path.append(os.path.join(project_directory, '..'))
-    project_module = __import__(project_name, '', '', [''])
+    project_module = __import__(project_name, {}, {}, [''])
     sys.path.pop()
 
     # Set DJANGO_SETTINGS_MODULE appropriately.
     os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name
+    return project_directory
 
+def execute_manager(settings_mod, argv=None):
+    project_directory = setup_environ(settings_mod)
     action_mapping = DEFAULT_ACTION_MAPPING.copy()
 
     # Remove the "startproject" command from the action_mapping, because that's

Modified: vendor/django/current/django/core/paginator.py
===================================================================
--- vendor/django/current/django/core/paginator.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/paginator.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,54 +1,46 @@
-from math import ceil
-
 class InvalidPage(Exception):
     pass
 
 class ObjectPaginator(object):
     """
-    This class makes pagination easy. Feed it a QuerySet, plus the number of
-    objects you want on each page. Then read the hits and pages properties to
+    This class makes pagination easy. Feed it a QuerySet or list, plus the number
+    of objects you want on each page. Then read the hits and pages properties to
     see how many pages it involves. Call get_page with a page number (starting
     at 0) to get back a list of objects for that page.
 
     Finally, check if a page number has a next/prev page using
     has_next_page(page_number) and has_previous_page(page_number).
+    
+    Use orphans to avoid small final pages. For example:
+    13 records, num_per_page=10, orphans=2 --> pages==2, len(self.get_page(0))==10
+    12 records, num_per_page=10, orphans=2 --> pages==1, len(self.get_page(0))==12
     """
-    def __init__(self, query_set, num_per_page):
+    def __init__(self, query_set, num_per_page, orphans=0):
         self.query_set = query_set
         self.num_per_page = num_per_page
-        self._hits, self._pages = None, None
-        self._has_next = {} # Caches page_number -> has_next_boolean
+        self.orphans = orphans
+        self._hits = self._pages = None
 
-    def get_page(self, page_number):
+    def validate_page_number(self, page_number):
         try:
             page_number = int(page_number)
         except ValueError:
             raise InvalidPage
-        if page_number < 0:
+        if page_number < 0 or page_number > self.pages - 1:
             raise InvalidPage
+        return page_number
 
-        # Retrieve one extra record, and check for the existence of that extra
-        # record to determine whether there's a next page.
-        limit = self.num_per_page + 1
-        offset = page_number * self.num_per_page
+    def get_page(self, page_number):
+        page_number = self.validate_page_number(page_number)
+        bottom = page_number * self.num_per_page
+        top = bottom + self.num_per_page
+        if top + self.orphans >= self.hits:
+            top = self.hits
+        return self.query_set[bottom:top]
 
-        object_list = list(self.query_set[offset:offset+limit])
-
-        if not object_list:
-            raise InvalidPage
-
-        self._has_next[page_number] = (len(object_list) > self.num_per_page)
-        return object_list[:self.num_per_page]
-
     def has_next_page(self, page_number):
         "Does page $page_number have a 'next' page?"
-        if not self._has_next.has_key(page_number):
-            if self._pages is None:
-                offset = (page_number + 1) * self.num_per_page
-                self._has_next[page_number] = len(self.query_set[offset:offset+1]) > 0
-            else:
-                self._has_next[page_number] = page_number < (self.pages - 1)
-        return self._has_next[page_number]
+        return page_number < self.pages - 1
 
     def has_previous_page(self, page_number):
         return page_number > 0
@@ -58,8 +50,7 @@
         Returns the 1-based index of the first object on the given page,
         relative to total objects found (hits).
         """
-        if page_number == 0:
-            return 1
+        page_number = self.validate_page_number(page_number)
         return (self.num_per_page * page_number) + 1
 
     def last_on_page(self, page_number):
@@ -67,20 +58,30 @@
         Returns the 1-based index of the last object on the given page,
         relative to total objects found (hits).
         """
-        if page_number == 0 and self.num_per_page >= self._hits:
-            return self._hits
-        elif page_number == (self._pages - 1) and (page_number + 1) * self.num_per_page > self._hits:
-            return self._hits
-        return (page_number + 1) * self.num_per_page
+        page_number = self.validate_page_number(page_number)
+        page_number += 1   # 1-base
+        if page_number == self.pages:
+            return self.hits
+        return page_number * self.num_per_page
 
     def _get_hits(self):
         if self._hits is None:
-            self._hits = self.query_set.count()
+            # Try .count() or fall back to len().
+            try:
+                self._hits = int(self.query_set.count())
+            except (AttributeError, TypeError, ValueError):
+                # AttributeError if query_set has no object count.
+                # TypeError if query_set.count() required arguments.
+                # ValueError if int() fails.
+                self._hits = len(self.query_set)
         return self._hits
 
     def _get_pages(self):
         if self._pages is None:
-            self._pages = int(ceil(self.hits / float(self.num_per_page)))
+            hits = (self.hits - 1 - self.orphans)
+            if hits < 1:
+                hits = 0
+            self._pages = hits // self.num_per_page + 1
         return self._pages
 
     hits = property(_get_hits)

Modified: vendor/django/current/django/core/serializers/__init__.py
===================================================================
--- vendor/django/current/django/core/serializers/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/serializers/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,11 +25,18 @@
     "json"   : "django.core.serializers.json",
 }
 
+# Check for PyYaml and register the serializer if it's available.
+try:
+    import yaml
+    BUILTIN_SERIALIZERS["yaml"] = "django.core.serializers.pyyaml"
+except ImportError:
+    pass    
+
 _serializers = {}
         
 def register_serializer(format, serializer_module):
     """Register a new serializer by passing in a module name."""
-    module = __import__(serializer_module, '', '', [''])
+    module = __import__(serializer_module, {}, {}, [''])
     _serializers[format] = module
     
 def unregister_serializer(format):
@@ -40,6 +47,11 @@
     if not _serializers:
         _load_serializers()
     return _serializers[format].Serializer
+
+def get_serializer_formats():
+    if not _serializers:
+        _load_serializers()
+    return _serializers.keys()
     
 def get_deserializer(format):
     if not _serializers:

Modified: vendor/django/current/django/core/serializers/base.py
===================================================================
--- vendor/django/current/django/core/serializers/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/serializers/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,7 +11,7 @@
 class SerializationError(Exception):
     """Something bad happened during serialization."""
     pass
-    
+
 class DeserializationError(Exception):
     """Something bad happened during deserialization."""
     pass
@@ -20,31 +20,35 @@
     """
     Abstract serializer base class.
     """
-    
+
     def serialize(self, queryset, **options):
         """
         Serialize a queryset.
         """
         self.options = options
-        
+
         self.stream = options.get("stream", StringIO())
-        
+        self.selected_fields = options.get("fields")
+
         self.start_serialization()
         for obj in queryset:
             self.start_object(obj)
             for field in obj._meta.fields:
-                if field is obj._meta.pk:
-                    continue
-                elif field.rel is None:
-                    self.handle_field(obj, field)
-                else:
-                    self.handle_fk_field(obj, field)
+                if field.serialize:
+                    if field.rel is None:
+                        if self.selected_fields is None or field.attname in self.selected_fields:
+                            self.handle_field(obj, field)
+                    else:
+                        if self.selected_fields is None or field.attname[:-3] in self.selected_fields:
+                            self.handle_fk_field(obj, field)
             for field in obj._meta.many_to_many:
-                self.handle_m2m_field(obj, field)
+                if field.serialize:
+                    if self.selected_fields is None or field.attname in self.selected_fields:
+                        self.handle_m2m_field(obj, field)
             self.end_object(obj)
         self.end_serialization()
         return self.getvalue()
-    
+
     def get_string_value(self, obj, field):
         """
         Convert a field's value to a string.
@@ -56,49 +60,49 @@
         else:
             value = field.flatten_data(follow=None, obj=obj).get(field.name, "")
         return str(value)
-    
+
     def start_serialization(self):
         """
         Called when serializing of the queryset starts.
         """
         raise NotImplementedError
-    
+
     def end_serialization(self):
         """
         Called when serializing of the queryset ends.
         """
         pass
-    
+
     def start_object(self, obj):
         """
         Called when serializing of an object starts.
         """
         raise NotImplementedError
-    
+
     def end_object(self, obj):
         """
         Called when serializing of an object ends.
         """
         pass
-    
+
     def handle_field(self, obj, field):
         """
         Called to handle each individual (non-relational) field on an object.
         """
         raise NotImplementedError
-    
+
     def handle_fk_field(self, obj, field):
         """
         Called to handle a ForeignKey field.
         """
         raise NotImplementedError
-    
+
     def handle_m2m_field(self, obj, field):
         """
         Called to handle a ManyToManyField.
         """
         raise NotImplementedError
-    
+
     def getvalue(self):
         """
         Return the fully serialized queryset.
@@ -109,7 +113,7 @@
     """
     Abstract base deserializer class.
     """
-    
+
     def __init__(self, stream_or_string, **options):
         """
         Init this serializer given a stream or a string
@@ -123,39 +127,39 @@
         # deserialization starts (otherwise subclass calls to get_model()
         # and friends might fail...)
         models.get_apps()
-    
+
     def __iter__(self):
         return self
-    
+
     def next(self):
         """Iteration iterface -- return the next item in the stream"""
         raise NotImplementedError
-        
+
 class DeserializedObject(object):
     """
-    A deserialzed model.
-    
+    A deserialized model.
+
     Basically a container for holding the pre-saved deserialized data along
     with the many-to-many data saved with the object.
-    
+
     Call ``save()`` to save the object (with the many-to-many data) to the
     database; call ``save(save_m2m=False)`` to save just the object fields
     (and not touch the many-to-many stuff.)
     """
-    
+
     def __init__(self, obj, m2m_data=None):
         self.object = obj
         self.m2m_data = m2m_data
-        
+
     def __repr__(self):
         return "<DeserializedObject: %s>" % str(self.object)
-        
+
     def save(self, save_m2m=True):
         self.object.save()
         if self.m2m_data and save_m2m:
             for accessor_name, object_list in self.m2m_data.items():
                 setattr(self.object, accessor_name, object_list)
-        
-        # prevent a second (possibly accidental) call to save() from saving 
+
+        # prevent a second (possibly accidental) call to save() from saving
         # the m2m data twice.
         self.m2m_data = None

Modified: vendor/django/current/django/core/serializers/json.py
===================================================================
--- vendor/django/current/django/core/serializers/json.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/serializers/json.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -16,7 +16,7 @@
     Convert a queryset to JSON.
     """
     def end_serialization(self):
-        simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder)
+        simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder, **self.options)
         
     def getvalue(self):
         return self.stream.getvalue()
@@ -41,11 +41,11 @@
     TIME_FORMAT = "%H:%M:%S"
     
     def default(self, o):
-        if isinstance(o, datetime.date):
+        if isinstance(o, datetime.datetime):
+            return o.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT))
+        elif isinstance(o, datetime.date):
             return o.strftime(self.DATE_FORMAT)
         elif isinstance(o, datetime.time):
             return o.strftime(self.TIME_FORMAT)
-        elif isinstance(o, datetime.datetime):
-            return o.strftime("%s %s" % (self.DATE_FORMAT, self.TIME_FORMAT))
         else:
-            return super(self, DateTimeAwareJSONEncoder).default(o)
\ No newline at end of file
+            return super(DateTimeAwareJSONEncoder, self).default(o)

Modified: vendor/django/current/django/core/serializers/python.py
===================================================================
--- vendor/django/current/django/core/serializers/python.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/serializers/python.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -57,7 +57,7 @@
     for d in object_list:
         # Look up the model and starting build a dict of data for it.
         Model = _get_model(d["model"])
-        data = {Model._meta.pk.name : d["pk"]}
+        data = {Model._meta.pk.attname : Model._meta.pk.to_python(d["pk"])}
         m2m_data = {}
         
         # Handle each field
@@ -67,20 +67,20 @@
                 
             field = Model._meta.get_field(field_name)
             
-            # Handle M2M relations (with in_bulk() for performance)
+            # Handle M2M relations
             if field.rel and isinstance(field.rel, models.ManyToManyRel):
                 pks = []
+                m2m_convert = field.rel.to._meta.pk.to_python
                 for pk in field_value:
                     if isinstance(pk, unicode):
-                        pk = pk.encode(options.get("encoding", settings.DEFAULT_CHARSET))
-                m2m_data[field.name] = field.rel.to._default_manager.in_bulk(field_value).values()
+                        pks.append(m2m_convert(pk.encode(options.get("encoding", settings.DEFAULT_CHARSET))))
+                    else:
+                        pks.append(m2m_convert(pk))
+                m2m_data[field.name] = pks
                 
             # Handle FK fields
             elif field.rel and isinstance(field.rel, models.ManyToOneRel):
-                try:
-                    data[field.name] = field.rel.to._default_manager.get(pk=field_value)
-                except field.rel.to.DoesNotExist:
-                    data[field.name] = None
+                data[field.attname] = field.rel.to._meta.pk.to_python(field_value)
                     
             # Handle all other fields
             else:

Added: vendor/django/current/django/core/serializers/pyyaml.py
===================================================================
--- vendor/django/current/django/core/serializers/pyyaml.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/serializers/pyyaml.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,36 @@
+"""
+YAML serializer.
+
+Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
+"""
+
+import datetime
+from django.core.serializers.python import Serializer as PythonSerializer
+from django.core.serializers.python import Deserializer as PythonDeserializer
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
+import yaml
+
+class Serializer(PythonSerializer):
+    """
+    Convert a queryset to YAML.
+    """
+    def end_serialization(self):
+        yaml.dump(self.objects, self.stream, **self.options)
+        
+    def getvalue(self):
+        return self.stream.getvalue()
+
+def Deserializer(stream_or_string, **options):
+    """
+    Deserialize a stream or string of YAML data.
+    """
+    if isinstance(stream_or_string, basestring):
+        stream = StringIO(stream_or_string)
+    else:
+        stream = stream_or_string
+    for obj in PythonDeserializer(yaml.load(stream)):
+        yield obj
+        

Modified: vendor/django/current/django/core/serializers/xml_serializer.py
===================================================================
--- vendor/django/current/django/core/serializers/xml_serializer.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/serializers/xml_serializer.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -13,6 +13,10 @@
     Serializes a QuerySet to XML.
     """
     
+    def indent(self, level):
+        if self.options.get('indent', None) is not None:
+            self.xml.ignorableWhitespace('\n' + ' ' * self.options.get('indent', None) * level)
+
     def start_serialization(self):
         """
         Start serialization -- open the XML document and the root element.
@@ -25,6 +29,7 @@
         """
         End serialization -- end the document.
         """
+        self.indent(0)
         self.xml.endElement("django-objects")
         self.xml.endDocument()
         
@@ -35,6 +40,7 @@
         if not hasattr(obj, "_meta"):
             raise base.SerializationError("Non-model object (%s) encountered during serialization" % type(obj))
             
+        self.indent(1)
         self.xml.startElement("object", {
             "pk"    : str(obj._get_pk_val()),
             "model" : str(obj._meta),
@@ -44,6 +50,7 @@
         """
         Called after handling all fields for an object.
         """
+        self.indent(1)
         self.xml.endElement("object")
         
     def handle_field(self, obj, field):
@@ -51,16 +58,19 @@
         Called to handle each field on an object (except for ForeignKeys and
         ManyToManyFields)
         """
+        self.indent(2)
         self.xml.startElement("field", {
             "name" : field.name,
             "type" : field.get_internal_type()
         })
         
         # Get a "string version" of the object's data (this is handled by the
-        # serializer base class).  None is handled specially.
-        value = self.get_string_value(obj, field)
-        if value is not None:
+        # serializer base class). 
+        if getattr(obj, field.name) is not None:
+            value = self.get_string_value(obj, field)
             self.xml.characters(str(value))
+        else:
+            self.xml.addQuickElement("None")
 
         self.xml.endElement("field")
         
@@ -92,6 +102,7 @@
         """
         Helper to output the <field> element for relational fields
         """
+        self.indent(2)
         self.xml.startElement("field", {
             "name" : field.name,
             "rel"  : field.rel.__class__.__name__,
@@ -127,7 +138,8 @@
         pk = node.getAttribute("pk")
         if not pk:
             raise base.DeserializationError("<object> node is missing the 'pk' attribute")
-        data = {Model._meta.pk.name : pk}
+
+        data = {Model._meta.pk.attname : Model._meta.pk.to_python(pk)}
         
         # Also start building a dict of m2m data (this is saved as
         # {m2m_accessor_attribute : [list_of_related_objects]})
@@ -148,37 +160,37 @@
             
             # As is usually the case, relation fields get the special treatment.
             if field.rel and isinstance(field.rel, models.ManyToManyRel):
-                m2m_data[field.name] = self._handle_m2m_field_node(field_node)
+                m2m_data[field.name] = self._handle_m2m_field_node(field_node, field)
             elif field.rel and isinstance(field.rel, models.ManyToOneRel):
-                data[field.name] = self._handle_fk_field_node(field_node)
+                data[field.attname] = self._handle_fk_field_node(field_node, field)
             else:
-                value = field.to_python(getInnerText(field_node).strip().encode(self.encoding))
+                if len(field_node.childNodes) == 1 and field_node.childNodes[0].nodeName == 'None':
+                    value = None
+                else:
+                    value = field.to_python(getInnerText(field_node).strip().encode(self.encoding))
                 data[field.name] = value
         
         # Return a DeserializedObject so that the m2m data has a place to live.
         return base.DeserializedObject(Model(**data), m2m_data)
         
-    def _handle_fk_field_node(self, node):
+    def _handle_fk_field_node(self, node, field):
         """
         Handle a <field> node for a ForeignKey
         """
-        # Try to set the foreign key by looking up the foreign related object.
-        # If it doesn't exist, set the field to None (which might trigger 
-        # validation error, but that's expected).
-        RelatedModel = self._get_model_from_node(node, "to")
-        return RelatedModel.objects.get(pk=getInnerText(node).strip().encode(self.encoding))
+        # Check if there is a child node named 'None', returning None if so.
+        if len(node.childNodes) == 1 and node.childNodes[0].nodeName == 'None':
+            return None
+        else:
+            return field.rel.to._meta.pk.to_python(
+                       getInnerText(node).strip().encode(self.encoding))
         
-    def _handle_m2m_field_node(self, node):
+    def _handle_m2m_field_node(self, node, field):
         """
         Handle a <field> node for a ManyToManyField
         """
-        # Load the related model
-        RelatedModel = self._get_model_from_node(node, "to")
-        
-        # Look up all the related objects. Using the in_bulk() lookup ensures
-        # that missing related objects don't cause an exception
-        related_ids = [c.getAttribute("pk").encode(self.encoding) for c in node.getElementsByTagName("object")]
-        return RelatedModel._default_manager.in_bulk(related_ids).values()
+        return [field.rel.to._meta.pk.to_python(
+                    c.getAttribute("pk").encode(self.encoding)) 
+                    for c in node.getElementsByTagName("object")]
     
     def _get_model_from_node(self, node, attr):
         """

Modified: vendor/django/current/django/core/servers/basehttp.py
===================================================================
--- vendor/django/current/django/core/servers/basehttp.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/servers/basehttp.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -547,10 +547,6 @@
 
         env['PATH_INFO'] = urllib.unquote(path)
         env['QUERY_STRING'] = query
-
-        host = self.address_string()
-        if host != self.client_address[0]:
-            env['REMOTE_HOST'] = host
         env['REMOTE_ADDR'] = self.client_address[0]
 
         if self.headers.typeheader is None:
@@ -598,11 +594,14 @@
     Use this ONLY LOCALLY, for development! This hasn't been tested for
     security and is not super efficient.
     """
-    def __init__(self, application):
+    def __init__(self, application, media_dir=None):
         from django.conf import settings
-        import django
         self.application = application
-        self.media_dir = django.__path__[0] + '/contrib/admin/media'
+        if not media_dir:
+            import django
+            self.media_dir = django.__path__[0] + '/contrib/admin/media'
+        else:
+            self.media_dir = media_dir
         self.media_url = settings.ADMIN_MEDIA_PREFIX
 
     def __call__(self, environ, start_response):

Modified: vendor/django/current/django/core/servers/fastcgi.py
===================================================================
--- vendor/django/current/django/core/servers/fastcgi.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/servers/fastcgi.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -31,9 +31,11 @@
   port=PORTNUM         port to listen on.
   socket=FILE          UNIX socket to listen on.
   method=IMPL          prefork or threaded (default prefork)
-  maxspare=NUMBER      max number of spare processes to keep running.
-  minspare=NUMBER      min number of spare processes to prefork.
-  maxchildren=NUMBER   hard limit number of processes in prefork mode.
+  maxrequests=NUMBER   number of requests a child handles before it is 
+                       killed and a new child is forked (0 = no limit).
+  maxspare=NUMBER      max number of spare processes / threads
+  minspare=NUMBER      min number of spare processes / threads.
+  maxchildren=NUMBER   hard limit number of processes / threads
   daemonize=BOOL       whether to detach from terminal.
   pidfile=FILE         write the spawned process-id to this file.
   workdir=DIRECTORY    change to this directory when daemonizing
@@ -66,6 +68,7 @@
     'maxspare': 5,
     'minspare': 2,
     'maxchildren': 50,
+    'maxrequests': 0,
 }
 
 def fastcgi_help(message=None):
@@ -74,8 +77,9 @@
         print message
     return False
 
-def runfastcgi(argset):
+def runfastcgi(argset=[], **kwargs):
     options = FASTCGI_OPTIONS.copy()
+    options.update(kwargs)
     for x in argset:
         if "=" in x:
             k, v = x.split('=', 1)
@@ -102,15 +106,20 @@
             'maxSpare': int(options["maxspare"]),
             'minSpare': int(options["minspare"]),
             'maxChildren': int(options["maxchildren"]),
+            'maxRequests': int(options["maxrequests"]), 
         }
     elif options['method'] in ('thread', 'threaded'):
         from flup.server.fcgi import WSGIServer
-        wsgi_opts = {}
+        wsgi_opts = {
+            'maxSpare': int(options["maxspare"]),
+            'minSpare': int(options["minspare"]),
+            'maxThreads': int(options["maxchildren"]),
+        }
     else:
         return fastcgi_help("ERROR: Implementation must be one of prefork or thread.")
-    
+
     wsgi_opts['debug'] = False # Turn off flup tracebacks
-    
+
     # Prep up and go
     from django.core.handlers.wsgi import WSGIHandler
 

Modified: vendor/django/current/django/core/urlresolvers.py
===================================================================
--- vendor/django/current/django/core/urlresolvers.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/urlresolvers.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -15,12 +15,16 @@
     pass
 
 class NoReverseMatch(Exception):
-    pass
+    # Don't make this raise an error when used in a template.
+    silent_variable_failure = True
 
 def get_mod_func(callback):
     # Converts 'django.views.news.stories.story_detail' to
     # ['django.views.news.stories', 'story_detail']
-    dot = callback.rindex('.')
+    try:
+        dot = callback.rindex('.')
+    except ValueError:
+        return callback, ''
     return callback[:dot], callback[dot+1:]
 
 def reverse_helper(regex, *args, **kwargs):
@@ -86,10 +90,15 @@
 class RegexURLPattern(object):
     def __init__(self, regex, callback, default_args=None):
         # regex is a string representing a regular expression.
-        # callback is something like 'foo.views.news.stories.story_detail',
-        # which represents the path to a module and a view function name.
+        # callback is either a string like 'foo.views.news.stories.story_detail'
+        # which represents the path to a module and a view function name, or a
+        # callable object (view).
         self.regex = re.compile(regex)
-        self.callback = callback
+        if callable(callback):
+            self._callback = callback
+        else:
+            self._callback = None
+            self._callback_str = callback
         self.default_args = default_args or {}
 
     def resolve(self, path):
@@ -101,41 +110,47 @@
             kwargs = match.groupdict()
             if kwargs:
                 args = ()
-            if not kwargs:
+            else:
                 args = match.groups()
             # In both cases, pass any extra_kwargs as **kwargs.
             kwargs.update(self.default_args)
 
-            try: # Lazily load self.func.
-                return self.func, args, kwargs
-            except AttributeError:
-                self.func = self.get_callback()
-            return self.func, args, kwargs
+            return self.callback, args, kwargs
 
-    def get_callback(self):
-        mod_name, func_name = get_mod_func(self.callback)
+    def _get_callback(self):
+        if self._callback is not None:
+            return self._callback
+        mod_name, func_name = get_mod_func(self._callback_str)
         try:
-            return getattr(__import__(mod_name, '', '', ['']), func_name)
+            self._callback = getattr(__import__(mod_name, {}, {}, ['']), func_name)
         except ImportError, e:
             raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))
         except AttributeError, e:
             raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e))
+        return self._callback
+    callback = property(_get_callback)
 
     def reverse(self, viewname, *args, **kwargs):
-        if viewname != self.callback:
+        mod_name, func_name = get_mod_func(viewname)
+        try:
+            lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name)
+        except (ImportError, AttributeError):
             raise NoReverseMatch
+        if lookup_view != self.callback:
+            raise NoReverseMatch
         return self.reverse_helper(*args, **kwargs)
 
     def reverse_helper(self, *args, **kwargs):
         return reverse_helper(self.regex, *args, **kwargs)
 
 class RegexURLResolver(object):
-    def __init__(self, regex, urlconf_name):
+    def __init__(self, regex, urlconf_name, default_kwargs=None):
         # regex is a string representing a regular expression.
         # urlconf_name is a string representing the module containing urlconfs.
         self.regex = re.compile(regex)
         self.urlconf_name = urlconf_name
         self.callback = None
+        self.default_kwargs = default_kwargs or {}
 
     def resolve(self, path):
         tried = []
@@ -149,7 +164,8 @@
                     tried.extend([(pattern.regex.pattern + '   ' + t) for t in e.args[0]['tried']])
                 else:
                     if sub_match:
-                        return sub_match[0], sub_match[1], dict(match.groupdict(), **sub_match[2])
+                        sub_match_dict = dict(self.default_kwargs, **sub_match[2])
+                        return sub_match[0], sub_match[1], dict(match.groupdict(), **sub_match_dict)
                     tried.append(pattern.regex.pattern)
             raise Resolver404, {'tried': tried, 'path': new_path}
 
@@ -158,7 +174,7 @@
             return self._urlconf_module
         except AttributeError:
             try:
-                self._urlconf_module = __import__(self.urlconf_name, '', '', [''])
+                self._urlconf_module = __import__(self.urlconf_name, {}, {}, [''])
             except ValueError, e:
                 # Invalid urlconf_name, such as "foo.bar." (note trailing period)
                 raise ImproperlyConfigured, "Error while importing URLconf %r: %s" % (self.urlconf_name, e)
@@ -173,7 +189,7 @@
         callback = getattr(self.urlconf_module, 'handler%s' % view_type)
         mod_name, func_name = get_mod_func(callback)
         try:
-            return getattr(__import__(mod_name, '', '', ['']), func_name), {}
+            return getattr(__import__(mod_name, {}, {}, ['']), func_name), {}
         except (ImportError, AttributeError), e:
             raise ViewDoesNotExist, "Tried %s. Error was: %s" % (callback, str(e))
 
@@ -183,22 +199,28 @@
     def resolve500(self):
         return self._resolve_special('500')
 
-    def reverse(self, viewname, *args, **kwargs):
+    def reverse(self, lookup_view, *args, **kwargs):
+        if not callable(lookup_view):
+            mod_name, func_name = get_mod_func(lookup_view)
+            try:
+                lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name)
+            except (ImportError, AttributeError):
+                raise NoReverseMatch
         for pattern in self.urlconf_module.urlpatterns:
             if isinstance(pattern, RegexURLResolver):
                 try:
-                    return pattern.reverse_helper(viewname, *args, **kwargs)
+                    return pattern.reverse_helper(lookup_view, *args, **kwargs)
                 except NoReverseMatch:
                     continue
-            elif pattern.callback == viewname:
+            elif pattern.callback == lookup_view:
                 try:
                     return pattern.reverse_helper(*args, **kwargs)
                 except NoReverseMatch:
                     continue
         raise NoReverseMatch
 
-    def reverse_helper(self, viewname, *args, **kwargs):
-        sub_match = self.reverse(viewname, *args, **kwargs)
+    def reverse_helper(self, lookup_view, *args, **kwargs):
+        sub_match = self.reverse(lookup_view, *args, **kwargs)
         result = reverse_helper(self.regex, *args, **kwargs)
         return result + sub_match
 

Modified: vendor/django/current/django/core/validators.py
===================================================================
--- vendor/django/current/django/core/validators.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/validators.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,12 +8,13 @@
 form field is required.
 """
 
+import urllib2
 from django.conf import settings
 from django.utils.translation import gettext, gettext_lazy, ngettext
 from django.utils.functional import Promise, lazy
 import re
 
-_datere = r'(19|2\d)\d{2}-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[12][0-9])|(?:3[0-1]))'
+_datere = r'\d{4}-\d{1,2}-\d{1,2}'
 _timere = r'(?:[01]?[0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?'
 alnum_re = re.compile(r'^\w+$')
 alnumurl_re = re.compile(r'^[-\w/]+$')
@@ -68,7 +69,7 @@
 
 def isSlug(field_data, all_data):
     if not slug_re.search(field_data):
-        raise ValidationError, "This value must contain only letters, numbers, underscores or hyphens."
+        raise ValidationError, gettext("This value must contain only letters, numbers, underscores or hyphens.")
 
 def isLowerCase(field_data, all_data):
     if field_data.lower() != field_data:
@@ -122,9 +123,30 @@
     if not field_data.isalpha():
         raise ValidationError, gettext("Only alphabetical characters are allowed here.")
 
+def _isValidDate(date_string):
+    """
+    A helper function used by isValidANSIDate and isValidANSIDatetime to
+    check if the date is valid.  The date string is assumed to already be in
+    YYYY-MM-DD format.
+    """
+    from datetime import date
+    # Could use time.strptime here and catch errors, but datetime.date below
+    # produces much friendlier error messages.
+    year, month, day = map(int, date_string.split('-'))
+    # This check is needed because strftime is used when saving the date
+    # value to the database, and strftime requires that the year be >=1900.
+    if year < 1900:
+        raise ValidationError, gettext('Year must be 1900 or later.')
+    try:
+        date(year, month, day)
+    except ValueError, e:
+        msg = gettext('Invalid date: %s') % gettext(str(e))
+        raise ValidationError, msg    
+
 def isValidANSIDate(field_data, all_data):
     if not ansi_date_re.search(field_data):
         raise ValidationError, gettext('Enter a valid date in YYYY-MM-DD format.')
+    _isValidDate(field_data)
 
 def isValidANSITime(field_data, all_data):
     if not ansi_time_re.search(field_data):
@@ -133,6 +155,7 @@
 def isValidANSIDatetime(field_data, all_data):
     if not ansi_datetime_re.search(field_data):
         raise ValidationError, gettext('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
+    _isValidDate(field_data.split()[0])
 
 def isValidEmail(field_data, all_data):
     if not email_re.search(field_data):
@@ -202,18 +225,26 @@
     isWellFormedXml('<root>%s</root>' % field_data, all_data)
 
 def isExistingURL(field_data, all_data):
-    import urllib2
     try:
-        u = urllib2.urlopen(field_data)
+        headers = {
+            "Accept" : "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
+            "Accept-Language" : "en-us,en;q=0.5",
+            "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
+            "Connection" : "close",
+            "User-Agent": settings.URL_VALIDATOR_USER_AGENT
+            }
+        req = urllib2.Request(field_data,None, headers)
+        u = urllib2.urlopen(req)
     except ValueError:
-        raise ValidationError, gettext("Invalid URL: %s") % field_data
+        raise ValidationError, _("Invalid URL: %s") % field_data
     except urllib2.HTTPError, e:
         # 401s are valid; they just mean authorization is required.
-        if e.code not in ('401',):
-            raise ValidationError, gettext("The URL %s is a broken link.") % field_data
+        # 301 and 302 are redirects; they just mean look somewhere else.
+        if str(e.code) not in ('401','301','302'):
+            raise ValidationError, _("The URL %s is a broken link.") % field_data
     except: # urllib2.URLError, httplib.InvalidURL, etc.
-        raise ValidationError, gettext("The URL %s is a broken link.") % field_data
-
+        raise ValidationError, _("The URL %s is a broken link.") % field_data
+        
 def isValidUSState(field_data, all_data):
     "Checks that the given string is a valid two-letter U.S. state abbreviation"
     states = ['AA', 'AE', 'AK', 'AL', 'AP', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY']
@@ -227,9 +258,8 @@
     catch 'motherfucker' as well. Raises a ValidationError such as:
         Watch your mouth! The words "f--k" and "s--t" are not allowed here.
     """
-    bad_words = ['asshat', 'asshead', 'asshole', 'cunt', 'fuck', 'gook', 'nigger', 'shit'] # all in lower case
     field_data = field_data.lower() # normalize
-    words_seen = [w for w in bad_words if field_data.find(w) > -1]
+    words_seen = [w for w in settings.PROFANITIES_LIST if w in field_data]
     if words_seen:
         from django.utils.text import get_text_list
         plural = len(words_seen) > 1
@@ -283,11 +313,12 @@
         RequiredIfOtherFieldsGiven.__init__(self, [other_field_name], error_message)
 
 class RequiredIfOtherFieldEquals(object):
-    def __init__(self, other_field, other_value, error_message=None):
+    def __init__(self, other_field, other_value, error_message=None, other_label=None):
         self.other_field = other_field
         self.other_value = other_value
+        other_label = other_label or other_value
         self.error_message = error_message or lazy_inter(gettext_lazy("This field must be given if %(field)s is %(value)s"), {
-            'field': other_field, 'value': other_value})
+            'field': other_field, 'value': other_label})
         self.always_test = True
 
     def __call__(self, field_data, all_data):
@@ -295,11 +326,12 @@
             raise ValidationError(self.error_message)
 
 class RequiredIfOtherFieldDoesNotEqual(object):
-    def __init__(self, other_field, other_value, error_message=None):
+    def __init__(self, other_field, other_value, other_label=None, error_message=None):
         self.other_field = other_field
         self.other_value = other_value
+        other_label = other_label or other_value
         self.error_message = error_message or lazy_inter(gettext_lazy("This field must be given if %(field)s is not %(value)s"), {
-            'field': other_field, 'value': other_value})
+            'field': other_field, 'value': other_label})
         self.always_test = True
 
     def __call__(self, field_data, all_data):
@@ -324,6 +356,38 @@
             if field_name != self.field_name and value == field_data:
                 raise ValidationError, self.error_message
 
+class NumberIsInRange(object):
+    """
+    Validator that tests if a value is in a range (inclusive).
+    """
+    def __init__(self, lower=None, upper=None, error_message=''):
+        self.lower, self.upper = lower, upper
+        if not error_message:
+            if lower and upper:
+                 self.error_message = gettext("This value must be between %(lower)s and %(upper)s.") % {'lower': lower, 'upper': upper}
+            elif lower:
+                self.error_message = gettext("This value must be at least %s.") % lower
+            elif upper:
+                self.error_message = gettext("This value must be no more than %s.") % upper
+        else:
+            self.error_message = error_message
+
+    def __call__(self, field_data, all_data):
+        # Try to make the value numeric. If this fails, we assume another 
+        # validator will catch the problem.
+        try:
+            val = float(field_data)
+        except ValueError:
+            return
+            
+        # Now validate
+        if self.lower and self.upper and (val < self.lower or val > self.upper):
+            raise ValidationError(self.error_message)
+        elif self.lower and val < self.lower:
+            raise ValidationError(self.error_message)
+        elif self.upper and val > self.upper:
+            raise ValidationError(self.error_message)
+
 class IsAPowerOf(object):
     """
     >>> v = IsAPowerOf(2)
@@ -352,10 +416,12 @@
             float(data)
         except ValueError:
             raise ValidationError, gettext("Please enter a valid decimal number.")
-        if len(data) > (self.max_digits + 1):
+        # Negative floats require more space to input.
+        max_allowed_length = data.startswith('-') and (self.max_digits + 2) or (self.max_digits + 1)
+        if len(data) > max_allowed_length:
             raise ValidationError, ngettext("Please enter a valid decimal number with at most %s total digit.",
                 "Please enter a valid decimal number with at most %s total digits.", self.max_digits) % self.max_digits
-        if (not '.' in data and len(data) > (self.max_digits - self.decimal_places)) or ('.' in data and len(data) > (self.max_digits - (self.decimal_places - len(data.split('.')[1])) + 1)):
+        if (not '.' in data and len(data) > (max_allowed_length - self.decimal_places - 1)) or ('.' in data and len(data) > (max_allowed_length - (self.decimal_places - len(data.split('.')[1])))):
             raise ValidationError, ngettext( "Please enter a valid decimal number with a whole part of at most %s digit.",
                 "Please enter a valid decimal number with a whole part of at most %s digits.", str(self.max_digits-self.decimal_places)) % str(self.max_digits-self.decimal_places)
         if '.' in data and len(data.split('.')[1]) > self.decimal_places:

Modified: vendor/django/current/django/core/xheaders.py
===================================================================
--- vendor/django/current/django/core/xheaders.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/core/xheaders.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -13,9 +13,10 @@
     """
     Adds the "X-Object-Type" and "X-Object-Id" headers to the given
     HttpResponse according to the given model and object_id -- but only if the
-    given HttpRequest object has an IP address within the INTERNAL_IPS setting.
+    given HttpRequest object has an IP address within the INTERNAL_IPS setting
+    or if the request is from a logged in staff member.
     """
     from django.conf import settings
-    if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
+    if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or (hasattr(request, 'user') and request.user.is_authenticated() and request.user.is_staff):
         response['X-Object-Type'] = "%s.%s" % (model._meta.app_label, model._meta.object_name.lower())
         response['X-Object-Id'] = str(object_id)

Modified: vendor/django/current/django/db/__init__.py
===================================================================
--- vendor/django/current/django/db/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,7 +8,7 @@
     settings.DATABASE_ENGINE = 'dummy'
 
 try:
-    backend = __import__('django.db.backends.%s.base' % settings.DATABASE_ENGINE, '', '', [''])
+    backend = __import__('django.db.backends.%s.base' % settings.DATABASE_ENGINE, {}, {}, [''])
 except ImportError, e:
     # The database backend wasn't found. Display a helpful error message
     # listing all possible database backends.
@@ -18,16 +18,16 @@
     available_backends = [f for f in os.listdir(backend_dir) if not f.startswith('_') and not f.startswith('.') and not f.endswith('.py') and not f.endswith('.pyc')]
     available_backends.sort()
     if settings.DATABASE_ENGINE not in available_backends:
-        raise ImproperlyConfigured, "%r isn't an available database backend. vailable options are: %s" % \
+        raise ImproperlyConfigured, "%r isn't an available database backend. Available options are: %s" % \
             (settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends)))
     else:
         raise # If there's some other error, this must be an error in Django itself.
 
-get_introspection_module = lambda: __import__('django.db.backends.%s.introspection' % settings.DATABASE_ENGINE, '', '', [''])
-get_creation_module = lambda: __import__('django.db.backends.%s.creation' % settings.DATABASE_ENGINE, '', '', [''])
-runshell = lambda: __import__('django.db.backends.%s.client' % settings.DATABASE_ENGINE, '', '', ['']).runshell()
+get_introspection_module = lambda: __import__('django.db.backends.%s.introspection' % settings.DATABASE_ENGINE, {}, {}, [''])
+get_creation_module = lambda: __import__('django.db.backends.%s.creation' % settings.DATABASE_ENGINE, {}, {}, [''])
+runshell = lambda: __import__('django.db.backends.%s.client' % settings.DATABASE_ENGINE, {}, {}, ['']).runshell()
 
-connection = backend.DatabaseWrapper()
+connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)
 DatabaseError = backend.DatabaseError
 
 # Register an event that closes the database connection

Modified: vendor/django/current/django/db/backends/ado_mssql/base.py
===================================================================
--- vendor/django/current/django/db/backends/ado_mssql/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/ado_mssql/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -55,7 +55,7 @@
     from django.utils._threading_local import local
 
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
 
@@ -76,10 +76,11 @@
         return cursor
 
     def _commit(self):
-        return self.connection.commit()
+        if self.connection is not None:
+            return self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             return self.connection.rollback()
 
     def close(self):
@@ -125,6 +126,9 @@
 def get_random_function_sql():
     return "RAND()"
 
+def get_deferrable_sql():
+    return " DEFERRABLE INITIALLY DEFERRED"
+
 def get_fulltext_search_sql(field_name):
     raise NotImplementedError
 
@@ -134,6 +138,19 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+def get_sql_flush(sql_styler, full_table_list):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    """
+    # Return a list of 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements
+    # TODO - SQL not actually tested against ADO MSSQL yet!
+    # TODO - autoincrement indices reset required? See other get_sql_flush() implementations
+    sql_list = ['%s %s;' % \
+                (sql_styler.SQL_KEYWORD('TRUNCATE'),
+                 sql_styler.SQL_FIELD(quote_name(table))
+                 )  for table in full_table_list]
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'LIKE %s',

Modified: vendor/django/current/django/db/backends/ado_mssql/creation.py
===================================================================
--- vendor/django/current/django/db/backends/ado_mssql/creation.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/ado_mssql/creation.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -21,6 +21,5 @@
     'SmallIntegerField': 'smallint',
     'TextField':         'text',
     'TimeField':         'time',
-    'URLField':          'varchar(200)',
     'USStateField':      'varchar(2)',
 }

Modified: vendor/django/current/django/db/backends/dummy/base.py
===================================================================
--- vendor/django/current/django/db/backends/dummy/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/dummy/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -20,6 +20,9 @@
     _commit = complain
     _rollback = complain
 
+    def __init__(self, **kwargs):
+        pass
+
     def close(self):
         pass # close()
 
@@ -33,6 +36,9 @@
 get_date_trunc_sql = complain
 get_limit_offset_sql = complain
 get_random_function_sql = complain
+get_deferrable_sql = complain
 get_fulltext_search_sql = complain
 get_drop_foreignkey_sql = complain
+get_sql_flush = complain
+
 OPERATOR_MAPPING = {}

Modified: vendor/django/current/django/db/backends/mysql/base.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -10,46 +10,46 @@
 except ImportError, e:
     from django.core.exceptions import ImproperlyConfigured
     raise ImproperlyConfigured, "Error loading MySQLdb module: %s" % e
+
+# We want version (1, 2, 1, 'final', 2) or later. We can't just use
+# lexicographic ordering in this check because then (1, 2, 1, 'gamma')
+# inadvertently passes the version test.
+version = Database.version_info
+if (version < (1,2,1) or (version[:3] == (1, 2, 1) and 
+        (len(version) < 5 or version[3] != 'final' or version[4] < 2))):
+    raise ImportError, "MySQLdb-1.2.1p2 or newer is required; you have %s" % Database.__version__
+
 from MySQLdb.converters import conversions
 from MySQLdb.constants import FIELD_TYPE
 import types
+import re
 
 DatabaseError = Database.DatabaseError
 
+# MySQLdb-1.2.1 supports the Python boolean type, and only uses datetime
+# module for time-related columns; older versions could have used mx.DateTime
+# or strings if there were no datetime module. However, MySQLdb still returns
+# TIME columns as timedelta -- they are more like timedelta in terms of actual
+# behavior as they are signed and include days -- and Django expects time, so
+# we still need to override that.
 django_conversions = conversions.copy()
 django_conversions.update({
-    types.BooleanType: util.rev_typecast_boolean,
-    FIELD_TYPE.DATETIME: util.typecast_timestamp,
-    FIELD_TYPE.DATE: util.typecast_date,
     FIELD_TYPE.TIME: util.typecast_time,
 })
 
-# This is an extra debug layer over MySQL queries, to display warnings.
-# It's only used when DEBUG=True.
-class MysqlDebugWrapper:
-    def __init__(self, cursor):
-        self.cursor = cursor
+# This should match the numerical portion of the version numbers (we can treat
+# versions like 5.0.24 and 5.0.24a as the same). Based on the list of version
+# at http://dev.mysql.com/doc/refman/4.1/en/news.html and
+# http://dev.mysql.com/doc/refman/5.0/en/news.html .
+server_version_re = re.compile(r'(\d{1,2})\.(\d{1,2})\.(\d{1,2})')
 
-    def execute(self, sql, params=()):
-        try:
-            return self.cursor.execute(sql, params)
-        except Database.Warning, w:
-            self.cursor.execute("SHOW WARNINGS")
-            raise Database.Warning, "%s: %s" % (w, self.cursor.fetchall())
+# MySQLdb-1.2.1 and newer automatically makes use of SHOW WARNINGS on
+# MySQL-4.1 and newer, so the MysqlDebugWrapper is unnecessary. Since the
+# point is to raise Warnings as exceptions, this can be done with the Python
+# warning module, and this is setup when the connection is created, and the
+# standard util.CursorDebugWrapper can be used. Also, using sql_mode
+# TRADITIONAL will automatically cause most warnings to be treated as errors.
 
-    def executemany(self, sql, param_list):
-        try:
-            return self.cursor.executemany(sql, param_list)
-        except Database.Warning, w:
-            self.cursor.execute("SHOW WARNINGS")
-            raise Database.Warning, "%s: %s" % (w, self.cursor.fetchall())
-
-    def __getattr__(self, attr):
-        if self.__dict__.has_key(attr):
-            return self.__dict__[attr]
-        else:
-            return getattr(self.cursor, attr)
-
 try:
     # Only exists in Python 2.4+
     from threading import local
@@ -58,9 +58,11 @@
     from django.utils._threading_local import local
 
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
+        self.server_version = None
+        self.options = kwargs
 
     def _valid_connection(self):
         if self.connection is not None:
@@ -74,32 +76,41 @@
 
     def cursor(self):
         from django.conf import settings
+        from warnings import filterwarnings
         if not self._valid_connection():
             kwargs = {
-                'user': settings.DATABASE_USER,
-                'db': settings.DATABASE_NAME,
-                'passwd': settings.DATABASE_PASSWORD,
                 'conv': django_conversions,
+                'charset': 'utf8',
+                'use_unicode': False,
             }
+            if settings.DATABASE_USER:
+                kwargs['user'] = settings.DATABASE_USER
+            if settings.DATABASE_NAME:
+                kwargs['db'] = settings.DATABASE_NAME
+            if settings.DATABASE_PASSWORD:
+                kwargs['passwd'] = settings.DATABASE_PASSWORD
             if settings.DATABASE_HOST.startswith('/'):
                 kwargs['unix_socket'] = settings.DATABASE_HOST
-            else:
+            elif settings.DATABASE_HOST:
                 kwargs['host'] = settings.DATABASE_HOST
             if settings.DATABASE_PORT:
                 kwargs['port'] = int(settings.DATABASE_PORT)
+            kwargs.update(self.options)
             self.connection = Database.connect(**kwargs)
-        cursor = self.connection.cursor()
-        if self.connection.get_server_info() >= '4.1':
-            cursor.execute("SET NAMES 'utf8'")
+            cursor = self.connection.cursor()
+        else:
+            cursor = self.connection.cursor()
         if settings.DEBUG:
-            return util.CursorDebugWrapper(MysqlDebugWrapper(cursor), self)
+            filterwarnings("error", category=Database.Warning)
+            return util.CursorDebugWrapper(cursor, self)
         return cursor
 
     def _commit(self):
-        self.connection.commit()
+        if self.connection is not None:
+            self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             try:
                 self.connection.rollback()
             except Database.NotSupportedError:
@@ -110,6 +121,16 @@
             self.connection.close()
             self.connection = None
 
+    def get_server_version(self):
+        if not self.server_version:
+            if not self._valid_connection():
+                self.cursor()
+            m = server_version_re.match(self.connection.get_server_info())
+            if not m:
+                raise Exception('Unable to determine MySQL version from version string %r' % self.connection.get_server_info())
+            self.server_version = tuple([int(x) for x in m.groups()])
+        return self.server_version
+
 supports_constraints = True
 
 def quote_name(name):
@@ -152,6 +173,9 @@
 def get_random_function_sql():
     return "RAND()"
 
+def get_deferrable_sql():
+    return ""
+
 def get_fulltext_search_sql(field_name):
     return 'MATCH (%s) AGAINST (%%s IN BOOLEAN MODE)' % field_name
 
@@ -161,6 +185,36 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+def get_sql_flush(style, tables, sequences):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    
+    """
+    # NB: The generated SQL below is specific to MySQL
+    # 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements
+    # to clear all tables of all data
+    if tables:
+        sql = ['SET FOREIGN_KEY_CHECKS = 0;'] + \
+              ['%s %s;' % \
+                (style.SQL_KEYWORD('TRUNCATE'),
+                 style.SQL_FIELD(quote_name(table))
+                )  for table in tables] + \
+              ['SET FOREIGN_KEY_CHECKS = 1;']
+              
+        # 'ALTER TABLE table AUTO_INCREMENT = 1;'... style SQL statements
+        # to reset sequence indices
+        sql.extend(["%s %s %s %s %s;" % \
+            (style.SQL_KEYWORD('ALTER'),
+             style.SQL_KEYWORD('TABLE'),
+             style.SQL_TABLE(quote_name(sequence['table'])),
+             style.SQL_KEYWORD('AUTO_INCREMENT'),
+             style.SQL_FIELD('= 1'),
+            ) for sequence in sequences])
+        return sql
+    else:
+        return []
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'LIKE %s',

Modified: vendor/django/current/django/db/backends/mysql/client.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/client.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql/client.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,12 +3,25 @@
 
 def runshell():
     args = ['']
-    args += ["--user=%s" % settings.DATABASE_USER]
-    if settings.DATABASE_PASSWORD:
-        args += ["--password=%s" % settings.DATABASE_PASSWORD]
-    if settings.DATABASE_HOST:
-        args += ["--host=%s" % settings.DATABASE_HOST]
-    if settings.DATABASE_PORT:
-        args += ["--port=%s" % settings.DATABASE_PORT]
-    args += [settings.DATABASE_NAME]
+    db = settings.DATABASE_OPTIONS.get('db', settings.DATABASE_NAME)
+    user = settings.DATABASE_OPTIONS.get('user', settings.DATABASE_USER)
+    passwd = settings.DATABASE_OPTIONS.get('passwd', settings.DATABASE_PASSWORD)
+    host = settings.DATABASE_OPTIONS.get('host', settings.DATABASE_HOST)
+    port = settings.DATABASE_OPTIONS.get('port', settings.DATABASE_PORT)
+    defaults_file = settings.DATABASE_OPTIONS.get('read_default_file')
+    # Seems to be no good way to set sql_mode with CLI
+    
+    if defaults_file:
+        args += ["--defaults-file=%s" % defaults_file]
+    if user:
+        args += ["--user=%s" % user]
+    if passwd:
+        args += ["--password=%s" % passwd]
+    if host:
+        args += ["--host=%s" % host]
+    if port:
+        args += ["--port=%s" % port]
+    if db:
+        args += [db]
+
     os.execvp('mysql', args)

Modified: vendor/django/current/django/db/backends/mysql/creation.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/creation.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql/creation.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,6 +25,5 @@
     'SmallIntegerField': 'smallint',
     'TextField':         'longtext',
     'TimeField':         'time',
-    'URLField':          'varchar(200)',
     'USStateField':      'varchar(2)',
 }

Modified: vendor/django/current/django/db/backends/mysql/introspection.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/introspection.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql/introspection.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -36,13 +36,14 @@
             SELECT column_name, referenced_table_name, referenced_column_name
             FROM information_schema.key_column_usage
             WHERE table_name = %s
+                AND table_schema = DATABASE()
                 AND referenced_table_name IS NOT NULL
                 AND referenced_column_name IS NOT NULL""", [table_name])
         constraints.extend(cursor.fetchall())
     except (ProgrammingError, OperationalError):
         # Fall back to "SHOW CREATE TABLE", for previous MySQL versions.
         # Go through all constraints and save the equal matches.
-        cursor.execute("SHOW CREATE TABLE %s" % table_name)
+        cursor.execute("SHOW CREATE TABLE %s" % quote_name(table_name))
         for row in cursor.fetchall():
             pos = 0
             while True:

Copied: vendor/django/current/django/db/backends/mysql_old (from rev 7716, vendor/django/current/django/db/backends/mysql)

Modified: vendor/django/current/django/db/backends/mysql_old/base.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql_old/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -13,6 +13,7 @@
 from MySQLdb.converters import conversions
 from MySQLdb.constants import FIELD_TYPE
 import types
+import re
 
 DatabaseError = Database.DatabaseError
 
@@ -24,6 +25,12 @@
     FIELD_TYPE.TIME: util.typecast_time,
 })
 
+# This should match the numerical portion of the version numbers (we can treat
+# versions like 5.0.24 and 5.0.24a as the same). Based on the list of version
+# at http://dev.mysql.com/doc/refman/4.1/en/news.html and
+# http://dev.mysql.com/doc/refman/5.0/en/news.html .
+server_version_re = re.compile(r'(\d{1,2})\.(\d{1,2})\.(\d{1,2})')
+
 # This is an extra debug layer over MySQL queries, to display warnings.
 # It's only used when DEBUG=True.
 class MysqlDebugWrapper:
@@ -58,9 +65,11 @@
     from django.utils._threading_local import local
 
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
+        self.server_version = None
+        self.options = kwargs
 
     def _valid_connection(self):
         if self.connection is not None:
@@ -87,19 +96,23 @@
                 kwargs['host'] = settings.DATABASE_HOST
             if settings.DATABASE_PORT:
                 kwargs['port'] = int(settings.DATABASE_PORT)
+            kwargs.update(self.options)
             self.connection = Database.connect(**kwargs)
-        cursor = self.connection.cursor()
-        if self.connection.get_server_info() >= '4.1':
-            cursor.execute("SET NAMES 'utf8'")
+            cursor = self.connection.cursor()
+            if self.connection.get_server_info() >= '4.1':
+                cursor.execute("SET NAMES 'utf8'")
+        else:
+            cursor = self.connection.cursor()
         if settings.DEBUG:
             return util.CursorDebugWrapper(MysqlDebugWrapper(cursor), self)
         return cursor
 
     def _commit(self):
-        self.connection.commit()
+        if self.connection is not None:
+            self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             try:
                 self.connection.rollback()
             except Database.NotSupportedError:
@@ -110,6 +123,16 @@
             self.connection.close()
             self.connection = None
 
+    def get_server_version(self):
+        if not self.server_version:
+            if not self._valid_connection():
+                self.cursor()
+            m = server_version_re.match(self.connection.get_server_info())
+            if not m:
+                raise Exception('Unable to determine MySQL version from version string %r' % self.connection.get_server_info())
+            self.server_version = tuple([int(x) for x in m.groups()])
+        return self.server_version
+
 supports_constraints = True
 
 def quote_name(name):
@@ -152,6 +175,9 @@
 def get_random_function_sql():
     return "RAND()"
 
+def get_deferrable_sql():
+    return ""
+
 def get_fulltext_search_sql(field_name):
     return 'MATCH (%s) AGAINST (%%s IN BOOLEAN MODE)' % field_name
 
@@ -161,6 +187,36 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+def get_sql_flush(style, tables, sequences):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    
+    """
+    # NB: The generated SQL below is specific to MySQL
+    # 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements
+    # to clear all tables of all data
+    if tables:
+        sql = ['SET FOREIGN_KEY_CHECKS = 0;'] + \
+              ['%s %s;' % \
+                (style.SQL_KEYWORD('TRUNCATE'),
+                 style.SQL_FIELD(quote_name(table))
+                )  for table in tables] + \
+              ['SET FOREIGN_KEY_CHECKS = 1;']
+              
+        # 'ALTER TABLE table AUTO_INCREMENT = 1;'... style SQL statements
+        # to reset sequence indices
+        sql.extend(["%s %s %s %s %s;" % \
+            (style.SQL_KEYWORD('ALTER'),
+             style.SQL_KEYWORD('TABLE'),
+             style.SQL_TABLE(quote_name(sequence['table'])),
+             style.SQL_KEYWORD('AUTO_INCREMENT'),
+             style.SQL_FIELD('= 1'),
+            ) for sequence in sequences])
+        return sql
+    else:
+        return []
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'LIKE %s',

Modified: vendor/django/current/django/db/backends/mysql_old/creation.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/creation.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql_old/creation.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,6 +25,5 @@
     'SmallIntegerField': 'smallint',
     'TextField':         'longtext',
     'TimeField':         'time',
-    'URLField':          'varchar(200)',
     'USStateField':      'varchar(2)',
 }

Modified: vendor/django/current/django/db/backends/mysql_old/introspection.py
===================================================================
--- vendor/django/current/django/db/backends/mysql/introspection.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/mysql_old/introspection.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,4 @@
-from django.db.backends.mysql.base import quote_name
+from django.db.backends.mysql_old.base import quote_name
 from MySQLdb import ProgrammingError, OperationalError
 from MySQLdb.constants import FIELD_TYPE
 import re
@@ -36,13 +36,14 @@
             SELECT column_name, referenced_table_name, referenced_column_name
             FROM information_schema.key_column_usage
             WHERE table_name = %s
+                AND table_schema = DATABASE()
                 AND referenced_table_name IS NOT NULL
                 AND referenced_column_name IS NOT NULL""", [table_name])
         constraints.extend(cursor.fetchall())
     except (ProgrammingError, OperationalError):
         # Fall back to "SHOW CREATE TABLE", for previous MySQL versions.
         # Go through all constraints and save the equal matches.
-        cursor.execute("SHOW CREATE TABLE %s" % table_name)
+        cursor.execute("SHOW CREATE TABLE %s" % quote_name(table_name))
         for row in cursor.fetchall():
             pos = 0
             while True:

Modified: vendor/django/current/django/db/backends/oracle/base.py
===================================================================
--- vendor/django/current/django/db/backends/oracle/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/oracle/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -21,9 +21,10 @@
     from django.utils._threading_local import local
 
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
+        self.options = kwargs
 
     def _valid_connection(self):
         return self.connection is not None
@@ -35,17 +36,18 @@
                 settings.DATABASE_HOST = 'localhost'
             if len(settings.DATABASE_PORT.strip()) != 0:
                 dsn = Database.makedsn(settings.DATABASE_HOST, int(settings.DATABASE_PORT), settings.DATABASE_NAME)
-                self.connection = Database.connect(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn)
+                self.connection = Database.connect(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn, **self.options)
             else:
                 conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
-                self.connection = Database.connect(conn_string)
+                self.connection = Database.connect(conn_string, **self.options)
         return FormatStylePlaceholderCursor(self.connection)
 
     def _commit(self):
-        self.connection.commit()
+        if self.connection is not None:
+            self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             try:
                 self.connection.rollback()
             except Database.NotSupportedError:
@@ -107,6 +109,9 @@
 def get_random_function_sql():
     return "DBMS_RANDOM.RANDOM"
 
+def get_deferrable_sql():
+    return " DEFERRABLE INITIALLY DEFERRED"
+
 def get_fulltext_search_sql(field_name):
     raise NotImplementedError
 
@@ -116,6 +121,20 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+def get_sql_flush(style, tables, sequences):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    """
+    # Return a list of 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements
+    # TODO - SQL not actually tested against Oracle yet!
+    # TODO - autoincrement indices reset required? See other get_sql_flush() implementations
+    sql = ['%s %s;' % \
+            (style.SQL_KEYWORD('TRUNCATE'),
+             style.SQL_FIELD(quote_name(table))
+             )  for table in tables]
+
+
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'LIKE %s',

Modified: vendor/django/current/django/db/backends/oracle/creation.py
===================================================================
--- vendor/django/current/django/db/backends/oracle/creation.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/oracle/creation.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -21,6 +21,5 @@
     'SmallIntegerField': 'smallint',
     'TextField':         'long',
     'TimeField':         'timestamp',
-    'URLField':          'varchar(200)',
     'USStateField':      'varchar(2)',
 }

Modified: vendor/django/current/django/db/backends/postgresql/base.py
===================================================================
--- vendor/django/current/django/db/backends/postgresql/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/postgresql/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -20,14 +20,51 @@
     # Import copy of _thread_local.py from Python 2.4
     from django.utils._threading_local import local
 
+def smart_basestring(s, charset):
+    if isinstance(s, unicode):
+        return s.encode(charset)
+    return s
+
+class UnicodeCursorWrapper(object):
+    """
+    A thin wrapper around psycopg cursors that allows them to accept Unicode
+    strings as params.
+
+    This is necessary because psycopg doesn't apply any DB quoting to
+    parameters that are Unicode strings. If a param is Unicode, this will
+    convert it to a bytestring using DEFAULT_CHARSET before passing it to
+    psycopg.
+    """
+    def __init__(self, cursor, charset):
+        self.cursor = cursor
+        self.charset = charset
+
+    def execute(self, sql, params=()):
+        return self.cursor.execute(sql, [smart_basestring(p, self.charset) for p in params])
+
+    def executemany(self, sql, param_list):
+        new_param_list = [tuple([smart_basestring(p, self.charset) for p in params]) for params in param_list]
+        return self.cursor.executemany(sql, new_param_list)
+
+    def __getattr__(self, attr):
+        if self.__dict__.has_key(attr):
+            return self.__dict__[attr]
+        else:
+            return getattr(self.cursor, attr)
+
+postgres_version = None
+
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
+        self.options = kwargs
 
     def cursor(self):
         from django.conf import settings
+        set_tz = False
         if self.connection is None:
+            set_tz = True
             if settings.DATABASE_NAME == '':
                 from django.core.exceptions import ImproperlyConfigured
                 raise ImproperlyConfigured, "You need to specify DATABASE_NAME in your Django settings file."
@@ -40,19 +77,26 @@
                 conn_string += " host=%s" % settings.DATABASE_HOST
             if settings.DATABASE_PORT:
                 conn_string += " port=%s" % settings.DATABASE_PORT
-            self.connection = Database.connect(conn_string)
+            self.connection = Database.connect(conn_string, **self.options)
             self.connection.set_isolation_level(1) # make transactions transparent to all cursors
         cursor = self.connection.cursor()
-        cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+        if set_tz:
+            cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+        cursor = UnicodeCursorWrapper(cursor, settings.DEFAULT_CHARSET)
+        global postgres_version
+        if not postgres_version:
+            cursor.execute("SELECT version()")
+            postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')]        
         if settings.DEBUG:
             return util.CursorDebugWrapper(cursor, self)
         return cursor
 
     def _commit(self):
-        return self.connection.commit()
+        if self.connection is not None:
+            return self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             return self.connection.rollback()
 
     def close(self):
@@ -102,6 +146,9 @@
 def get_random_function_sql():
     return "RANDOM()"
 
+def get_deferrable_sql():
+    return " DEFERRABLE INITIALLY DEFERRED"
+    
 def get_fulltext_search_sql(field_name):
     raise NotImplementedError
 
@@ -111,13 +158,69 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+def get_sql_flush(style, tables, sequences):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    
+    """    
+    if tables:
+        if postgres_version[0] >= 8 and postgres_version[1] >= 1:
+            # Postgres 8.1+ can do 'TRUNCATE x, y, z...;'. In fact, it *has to* in order to be able to
+            # truncate tables referenced by a foreign key in any other table. The result is a
+            # single SQL TRUNCATE statement.
+            sql = ['%s %s;' % \
+                (style.SQL_KEYWORD('TRUNCATE'),
+                 style.SQL_FIELD(', '.join([quote_name(table) for table in tables]))
+            )]
+        else:
+            # Older versions of Postgres can't do TRUNCATE in a single call, so they must use 
+            # a simple delete.
+            sql = ['%s %s %s;' % \
+                    (style.SQL_KEYWORD('DELETE'),
+                     style.SQL_KEYWORD('FROM'),
+                     style.SQL_FIELD(quote_name(table))
+                     ) for table in tables]
+
+        # 'ALTER SEQUENCE sequence_name RESTART WITH 1;'... style SQL statements
+        # to reset sequence indices
+        for sequence_info in sequences:
+            table_name = sequence_info['table']
+            column_name = sequence_info['column']
+            if column_name and len(column_name)>0:
+                # sequence name in this case will be <table>_<column>_seq
+                sql.append("%s %s %s %s %s %s;" % \
+                    (style.SQL_KEYWORD('ALTER'),
+                    style.SQL_KEYWORD('SEQUENCE'),
+                    style.SQL_FIELD('%s_%s_seq' % (table_name, column_name)),
+                    style.SQL_KEYWORD('RESTART'),
+                    style.SQL_KEYWORD('WITH'),
+                    style.SQL_FIELD('1')
+                    )
+                )
+            else:
+                # sequence name in this case will be <table>_id_seq
+                sql.append("%s %s %s %s %s %s;" % \
+                    (style.SQL_KEYWORD('ALTER'),
+                     style.SQL_KEYWORD('SEQUENCE'),
+                     style.SQL_FIELD('%s_id_seq' % table_name),
+                     style.SQL_KEYWORD('RESTART'),
+                     style.SQL_KEYWORD('WITH'),
+                     style.SQL_FIELD('1')
+                     )
+                )
+        return sql
+    else:
+        return []
+
+        
 # Register these custom typecasts, because Django expects dates/times to be
 # in Python's native (standard-library) datetime/time format, whereas psycopg
 # use mx.DateTime by default.
 try:
     Database.register_type(Database.new_type((1082,), "DATE", util.typecast_date))
 except AttributeError:
-    raise Exception, "You appear to be using psycopg version 2, which isn't supported yet, because it's still in beta. Use psycopg version 1 instead: http://initd.org/projects/psycopg1"
+    raise Exception, "You appear to be using psycopg version 2. Set your DATABASE_ENGINE to 'postgresql_psycopg2' instead of 'postgresql'."
 Database.register_type(Database.new_type((1083,1266), "TIME", util.typecast_time))
 Database.register_type(Database.new_type((1114,1184), "TIMESTAMP", util.typecast_timestamp))
 Database.register_type(Database.new_type((16,), "BOOLEAN", util.typecast_boolean))

Modified: vendor/django/current/django/db/backends/postgresql/creation.py
===================================================================
--- vendor/django/current/django/db/backends/postgresql/creation.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/postgresql/creation.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,6 +25,5 @@
     'SmallIntegerField': 'smallint',
     'TextField':         'text',
     'TimeField':         'time',
-    'URLField':          'varchar(200)',
     'USStateField':      'varchar(2)',
 }

Modified: vendor/django/current/django/db/backends/postgresql_psycopg2/base.py
===================================================================
--- vendor/django/current/django/db/backends/postgresql_psycopg2/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/postgresql_psycopg2/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -20,14 +20,19 @@
     # Import copy of _thread_local.py from Python 2.4
     from django.utils._threading_local import local
 
+postgres_version = None
+
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
+        self.options = kwargs
 
     def cursor(self):
         from django.conf import settings
+        set_tz = False
         if self.connection is None:
+            set_tz = True
             if settings.DATABASE_NAME == '':
                 from django.core.exceptions import ImproperlyConfigured
                 raise ImproperlyConfigured, "You need to specify DATABASE_NAME in your Django settings file."
@@ -40,19 +45,26 @@
                 conn_string += " host=%s" % settings.DATABASE_HOST
             if settings.DATABASE_PORT:
                 conn_string += " port=%s" % settings.DATABASE_PORT
-            self.connection = Database.connect(conn_string)
+            self.connection = Database.connect(conn_string, **self.options)
             self.connection.set_isolation_level(1) # make transactions transparent to all cursors
         cursor = self.connection.cursor()
-        cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+        cursor.tzinfo_factory = None
+        if set_tz:
+            cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+        global postgres_version
+        if not postgres_version:
+            cursor.execute("SELECT version()")
+            postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')]        
         if settings.DEBUG:
             return util.CursorDebugWrapper(cursor, self)
         return cursor
 
     def _commit(self):
-        return self.connection.commit()
+        if self.connection is not None:
+            return self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             return self.connection.rollback()
 
     def close(self):
@@ -67,24 +79,10 @@
         return name # Quoting once is enough.
     return '"%s"' % name
 
-def dictfetchone(cursor):
-    "Returns a row from the cursor as a dict"
-    # TODO: cursor.dictfetchone() doesn't exist in psycopg2,
-    # but no Django code uses this. Safe to remove?
-    return cursor.dictfetchone()
+dictfetchone = util.dictfetchone
+dictfetchmany = util.dictfetchmany
+dictfetchall = util.dictfetchall
 
-def dictfetchmany(cursor, number):
-    "Returns a certain number of rows from a cursor as a dict"
-    # TODO: cursor.dictfetchmany() doesn't exist in psycopg2,
-    # but no Django code uses this. Safe to remove?
-    return cursor.dictfetchmany(number)
-
-def dictfetchall(cursor):
-    "Returns all rows from a cursor as a dict"
-    # TODO: cursor.dictfetchall() doesn't exist in psycopg2,
-    # but no Django code uses this. Safe to remove?
-    return cursor.dictfetchall()
-
 def get_last_insert_id(cursor, table_name, pk_name):
     cursor.execute("SELECT CURRVAL('\"%s_%s_seq\"')" % (table_name, pk_name))
     return cursor.fetchone()[0]
@@ -108,6 +106,9 @@
 def get_random_function_sql():
     return "RANDOM()"
 
+def get_deferrable_sql():
+    return " DEFERRABLE INITIALLY DEFERRED"
+
 def get_fulltext_search_sql(field_name):
     raise NotImplementedError
 
@@ -117,6 +118,58 @@
 def get_pk_default_value():
     return "DEFAULT"
 
+def get_sql_flush(style, tables, sequences):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    """
+    if tables:
+        if postgres_version[0] >= 8 and postgres_version[1] >= 1:
+            # Postgres 8.1+ can do 'TRUNCATE x, y, z...;'. In fact, it *has to* in order to be able to
+            # truncate tables referenced by a foreign key in any other table. The result is a
+            # single SQL TRUNCATE statement
+            sql = ['%s %s;' % \
+                    (style.SQL_KEYWORD('TRUNCATE'),
+                     style.SQL_FIELD(', '.join([quote_name(table) for table in tables]))
+                    )]
+        else:
+            sql = ['%s %s %s;' % \
+                    (style.SQL_KEYWORD('DELETE'),
+                     style.SQL_KEYWORD('FROM'),
+                     style.SQL_FIELD(quote_name(table))
+                     ) for table in tables]
+                     
+        # 'ALTER SEQUENCE sequence_name RESTART WITH 1;'... style SQL statements
+        # to reset sequence indices
+        for sequence in sequences:
+            table_name = sequence['table']
+            column_name = sequence['column']
+            if column_name and len(column_name) > 0:
+                # sequence name in this case will be <table>_<column>_seq
+                sql.append("%s %s %s %s %s %s;" % \
+                    (style.SQL_KEYWORD('ALTER'),
+                     style.SQL_KEYWORD('SEQUENCE'),
+                     style.SQL_FIELD('%s_%s_seq' % (table_name, column_name)),
+                     style.SQL_KEYWORD('RESTART'),
+                     style.SQL_KEYWORD('WITH'),
+                     style.SQL_FIELD('1')
+                     )
+                )
+            else:
+                # sequence name in this case will be <table>_id_seq
+                sql.append("%s %s %s %s %s %s;" % \
+                    (style.SQL_KEYWORD('ALTER'),
+                     style.SQL_KEYWORD('SEQUENCE'),
+                     style.SQL_FIELD('%s_id_seq' % table_name),
+                     style.SQL_KEYWORD('RESTART'),
+                     style.SQL_KEYWORD('WITH'),
+                     style.SQL_FIELD('1')
+                     )
+                )
+        return sql
+    else:
+        return []
+        
 OPERATOR_MAPPING = {
     'exact': '= %s',
     'iexact': 'ILIKE %s',

Modified: vendor/django/current/django/db/backends/sqlite3/base.py
===================================================================
--- vendor/django/current/django/db/backends/sqlite3/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/sqlite3/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -4,10 +4,18 @@
 
 from django.db.backends import util
 try:
-    from pysqlite2 import dbapi2 as Database
+    try:
+        from sqlite3 import dbapi2 as Database
+    except ImportError:
+        from pysqlite2 import dbapi2 as Database
 except ImportError, e:
+    import sys
     from django.core.exceptions import ImproperlyConfigured
-    raise ImproperlyConfigured, "Error loading pysqlite2 module: %s" % e
+    if sys.version_info < (2, 5, 0):
+        module = 'pysqlite2'
+    else:
+        module = 'sqlite3'
+    raise ImproperlyConfigured, "Error loading %s module: %s" % (module, e)
 
 DatabaseError = Database.DatabaseError
 
@@ -34,16 +42,20 @@
     from django.utils._threading_local import local
 
 class DatabaseWrapper(local):
-    def __init__(self):
+    def __init__(self, **kwargs):
         self.connection = None
         self.queries = []
+        self.options = kwargs
 
     def cursor(self):
         from django.conf import settings
         if self.connection is None:
-            self.connection = Database.connect(settings.DATABASE_NAME,
-                detect_types=Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES)
-
+            kwargs = {
+                'database': settings.DATABASE_NAME,
+                'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES,
+            }
+            kwargs.update(self.options)
+            self.connection = Database.connect(**kwargs)
             # Register extract and date_trunc functions.
             self.connection.create_function("django_extract", 2, _sqlite_extract)
             self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
@@ -55,14 +67,18 @@
             return cursor
 
     def _commit(self):
-        self.connection.commit()
+        if self.connection is not None:
+            self.connection.commit()
 
     def _rollback(self):
-        if self.connection:
+        if self.connection is not None:
             self.connection.rollback()
 
     def close(self):
-        if self.connection is not None:
+        from django.conf import settings
+        # If database is in memory, closing the connection destroys the database.
+        # To prevent accidental data loss, ignore close requests on an in-memory db.
+        if self.connection is not None and settings.DATABASE_NAME != ":memory:":
             self.connection.close()
             self.connection = None
 
@@ -124,6 +140,9 @@
 def get_random_function_sql():
     return "RANDOM()"
 
+def get_deferrable_sql():
+    return ""
+
 def get_fulltext_search_sql(field_name):
     raise NotImplementedError
 
@@ -133,6 +152,24 @@
 def get_pk_default_value():
     return "NULL"
 
+def get_sql_flush(style, tables, sequences):
+    """Return a list of SQL statements required to remove all data from
+    all tables in the database (without actually removing the tables
+    themselves) and put the database in an empty 'initial' state
+    
+    """
+    # NB: The generated SQL below is specific to SQLite
+    # Note: The DELETE FROM... SQL generated below works for SQLite databases
+    # because constraints don't exist
+    sql = ['%s %s %s;' % \
+            (style.SQL_KEYWORD('DELETE'),
+             style.SQL_KEYWORD('FROM'),
+             style.SQL_FIELD(quote_name(table))
+             ) for table in tables]
+    # Note: No requirement for reset of auto-incremented indices (cf. other
+    # get_sql_flush() implementations). Just return SQL at this point
+    return sql
+
 def _sqlite_date_trunc(lookup_type, dt):
     try:
         dt = util.typecast_timestamp(dt)

Modified: vendor/django/current/django/db/backends/sqlite3/creation.py
===================================================================
--- vendor/django/current/django/db/backends/sqlite3/creation.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/sqlite3/creation.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -24,6 +24,5 @@
     'SmallIntegerField':            'smallint',
     'TextField':                    'text',
     'TimeField':                    'time',
-    'URLField':                     'varchar(200)',
     'USStateField':                 'varchar(2)',
 }

Modified: vendor/django/current/django/db/backends/util.py
===================================================================
--- vendor/django/current/django/db/backends/util.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/backends/util.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,7 +17,7 @@
             if not isinstance(params, (tuple, dict)):
                 params = tuple(params)
             self.db.queries.append({
-                'sql': sql % tuple(params),
+                'sql': sql % params,
                 'time': "%.3f" % (stop - start),
             })
 
@@ -98,7 +98,7 @@
 
 def _dict_helper(desc, row):
     "Returns a dictionary for the given cursor.description and result row."
-    return dict([(desc[col[0]][0], col[1]) for col in enumerate(row)])
+    return dict(zip([col[0] for col in desc], row))
 
 def dictfetchone(cursor):
     "Returns a row from the cursor as a dict"
@@ -110,9 +110,11 @@
 def dictfetchmany(cursor, number):
     "Returns a certain number of rows from a cursor as a dict"
     desc = cursor.description
-    return [_dict_helper(desc, row) for row in cursor.fetchmany(number)]
+    for row in cursor.fetchmany(number):
+        yield _dict_helper(desc, row)
 
 def dictfetchall(cursor):
     "Returns all rows from a cursor as a dict"
     desc = cursor.description
-    return [_dict_helper(desc, row) for row in cursor.fetchall()]
+    for row in cursor.fetchall():
+        yield _dict_helper(desc, row)

Modified: vendor/django/current/django/db/models/__init__.py
===================================================================
--- vendor/django/current/django/db/models/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,7 +25,7 @@
     def inner(*args, **kwargs):
         bits = func(*args, **kwargs)
         viewname = bits[0]
-        return reverse(bits[0], None, *bits[1:2])
+        return reverse(bits[0], None, *bits[1:3])
     return inner
 
 class LazyDate(object):
@@ -47,7 +47,12 @@
         return "<LazyDate: %s>" % self.delta
 
     def __get_value__(self):
-        return datetime.datetime.now() + self.delta
+        return (datetime.datetime.now() + self.delta).date()
 
     def __getattr__(self, attr):
+        if attr == 'delta':
+            # To fix ticket #3377. Note that normal accesses to LazyDate.delta
+            # (after construction) will still work, because they don't go
+            # through __getattr__). This is mainly needed for unpickling.
+            raise AttributeError
         return getattr(self.__get_value__(), attr)

Modified: vendor/django/current/django/db/models/base.py
===================================================================
--- vendor/django/current/django/db/models/base.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/base.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -13,6 +13,7 @@
 from django.utils.datastructures import SortedDict
 from django.utils.functional import curry
 from django.conf import settings
+from itertools import izip
 import types
 import sys
 import os
@@ -21,8 +22,8 @@
     "Metaclass for all models"
     def __new__(cls, name, bases, attrs):
         # If this isn't a subclass of Model, don't do anything special.
-        if not bases or bases == (object,):
-            return type.__new__(cls, name, bases, attrs)
+        if name == 'Model' or not filter(lambda b: issubclass(b, Model), bases):
+            return super(ModelBase, cls).__new__(cls, name, bases, attrs)
 
         # Create the class.
         new_class = type.__new__(cls, name, bases, {'__module__': attrs.pop('__module__')})
@@ -44,7 +45,7 @@
             new_class._meta.app_label = model_module.__name__.split('.')[-2]
 
         # Bail out early if we have already created this class.
-        m = get_model(new_class._meta.app_label, name)
+        m = get_model(new_class._meta.app_label, name, False)
         if m is not None:
             return m
 
@@ -68,7 +69,7 @@
         # the first class for this model to register with the framework. There
         # should only be one class for each model, so we must always return the
         # registered version.
-        return get_model(new_class._meta.app_label, name)
+        return get_model(new_class._meta.app_label, name, False)
 
 class Model(object):
     __metaclass__ = ModelBase
@@ -90,41 +91,74 @@
 
     def __init__(self, *args, **kwargs):
         dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs)
-        for f in self._meta.fields:
-            if isinstance(f.rel, ManyToOneRel):
-                try:
-                    # Assume object instance was passed in.
-                    rel_obj = kwargs.pop(f.name)
-                except KeyError:
+        
+        # There is a rather weird disparity here; if kwargs, it's set, then args
+        # overrides it. It should be one or the other; don't duplicate the work 
+        # The reason for the kwargs check is that standard iterator passes in by
+        # args, and nstantiation for iteration is 33% faster.
+        args_len = len(args)
+        if args_len > len(self._meta.fields):
+            # Daft, but matches old exception sans the err msg.
+            raise IndexError("Number of args exceeds number of fields")
+
+        fields_iter = iter(self._meta.fields)
+        if not kwargs:
+            # The ordering of the izip calls matter - izip throws StopIteration
+            # when an iter throws it. So if the first iter throws it, the second
+            # is *not* consumed. We rely on this, so don't change the order
+            # without changing the logic.
+            for val, field in izip(args, fields_iter):
+                setattr(self, field.attname, val)
+        else:
+            # Slower, kwargs-ready version.
+            for val, field in izip(args, fields_iter):
+                setattr(self, field.attname, val)
+                kwargs.pop(field.name, None)
+                # Maintain compatibility with existing calls.
+                if isinstance(field.rel, ManyToOneRel):
+                    kwargs.pop(field.attname, None)
+        
+        # Now we're left with the unprocessed fields that *must* come from
+        # keywords, or default.
+        
+        for field in fields_iter:
+            if kwargs:
+                if isinstance(field.rel, ManyToOneRel):
                     try:
-                        # Object instance wasn't passed in -- must be an ID.
-                        val = kwargs.pop(f.attname)
+                        # Assume object instance was passed in.
+                        rel_obj = kwargs.pop(field.name)
                     except KeyError:
-                        val = f.get_default()
+                        try:
+                            # Object instance wasn't passed in -- must be an ID.
+                            val = kwargs.pop(field.attname)
+                        except KeyError:
+                            val = field.get_default()
+                    else:
+                        # Object instance was passed in. Special case: You can
+                        # pass in "None" for related objects if it's allowed.
+                        if rel_obj is None and field.null:
+                            val = None
+                        else:
+                            try:
+                                val = getattr(rel_obj, field.rel.get_related_field().attname)
+                            except AttributeError:
+                                raise TypeError("Invalid value: %r should be a %s instance, not a %s" % 
+                                    (field.name, field.rel.to, type(rel_obj)))
                 else:
-                    # Object instance was passed in.
-                    # Special case: You can pass in "None" for related objects if it's allowed.
-                    if rel_obj is None and f.null:
-                        val = None
-                    else:
-                        try:
-                            val = getattr(rel_obj, f.rel.get_related_field().attname)
-                        except AttributeError:
-                            raise TypeError, "Invalid value: %r should be a %s instance, not a %s" % (f.name, f.rel.to, type(rel_obj))
-                setattr(self, f.attname, val)
+                    val = kwargs.pop(field.attname, field.get_default())
             else:
-                val = kwargs.pop(f.attname, f.get_default())
-                setattr(self, f.attname, val)
-        for prop in kwargs.keys():
-            try:
-                if isinstance(getattr(self.__class__, prop), property):
-                    setattr(self, prop, kwargs.pop(prop))
-            except AttributeError:
-                pass
+                val = field.get_default()
+            setattr(self, field.attname, val)
+
         if kwargs:
-            raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
-        for i, arg in enumerate(args):
-            setattr(self, self._meta.fields[i].attname, arg)
+            for prop in kwargs.keys():
+                try:
+                    if isinstance(getattr(self.__class__, prop), property):
+                        setattr(self, prop, kwargs.pop(prop))
+                except AttributeError:
+                    pass
+            if kwargs:
+                raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
         dispatcher.send(signal=signals.post_init, sender=self.__class__, instance=self)
 
     def add_to_class(cls, name, value):
@@ -176,11 +210,12 @@
             # If it does already exist, do an UPDATE.
             if cursor.fetchone():
                 db_values = [f.get_db_prep_save(f.pre_save(self, False)) for f in non_pks]
-                cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
-                    (backend.quote_name(self._meta.db_table),
-                    ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]),
-                    backend.quote_name(self._meta.pk.column)),
-                    db_values + [pk_val])
+                if db_values:
+                    cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
+                        (backend.quote_name(self._meta.db_table),
+                        ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]),
+                        backend.quote_name(self._meta.pk.column)),
+                        db_values + [pk_val])
             else:
                 record_exists = False
         if not pk_set or not record_exists:
@@ -321,7 +356,7 @@
     def _get_FIELD_size(self, field):
         return os.path.getsize(self._get_FIELD_filename(field))
 
-    def _save_FIELD_file(self, field, filename, raw_contents):
+    def _save_FIELD_file(self, field, filename, raw_contents, save=True):
         directory = field.get_directory_name()
         try: # Create the date-based directory if it doesn't exist.
             os.makedirs(os.path.join(settings.MEDIA_ROOT, directory))
@@ -356,8 +391,9 @@
             if field.height_field:
                 setattr(self, field.height_field, height)
 
-        # Save the object, because it has changed.
-        self.save()
+        # Save the object because it has changed unless save is False
+        if save:
+            self.save()
 
     _save_FIELD_file.alters_data = True
 
@@ -375,24 +411,6 @@
             setattr(self, cachename, get_image_dimensions(filename))
         return getattr(self, cachename)
 
-    # Handles setting many-to-many related objects.
-    # Example: Album.set_songs()
-    def _set_related_many_to_many(self, rel_class, rel_field, id_list):
-        id_list = map(int, id_list) # normalize to integers
-        rel = rel_field.rel.to
-        m2m_table = rel_field.m2m_db_table()
-        this_id = self._get_pk_val()
-        cursor = connection.cursor()
-        cursor.execute("DELETE FROM %s WHERE %s = %%s" % \
-            (backend.quote_name(m2m_table),
-            backend.quote_name(rel_field.m2m_column_name())), [this_id])
-        sql = "INSERT INTO %s (%s, %s) VALUES (%%s, %%s)" % \
-            (backend.quote_name(m2m_table),
-            backend.quote_name(rel_field.m2m_column_name()),
-            backend.quote_name(rel_field.m2m_reverse_name()))
-        cursor.executemany(sql, [(this_id, i) for i in id_list])
-        transaction.commit_unless_managed()
-
 ############################################
 # HELPER FUNCTIONS (CURRIED MODEL METHODS) #
 ############################################

Modified: vendor/django/current/django/db/models/fields/__init__.py
===================================================================
--- vendor/django/current/django/db/models/fields/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/fields/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,9 +2,11 @@
 from django.dispatch import dispatcher
 from django.conf import settings
 from django.core import validators
-from django import forms
+from django import oldforms
+from django import newforms as forms
 from django.core.exceptions import ObjectDoesNotExist
 from django.utils.functional import curry
+from django.utils.itercompat import tee
 from django.utils.text import capfirst
 from django.utils.translation import gettext, gettext_lazy
 import datetime, os, time
@@ -20,7 +22,7 @@
 BLANK_CHOICE_NONE = [("", "None")]
 
 # prepares a value for use in a LIKE query
-prep_for_like_query = lambda x: str(x).replace("%", "\%").replace("_", "\_")
+prep_for_like_query = lambda x: str(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_")
 
 # returns the <ul> class for a given radio_admin value
 get_ul_class = lambda x: 'radiolist%s' % ((x == HORIZONTAL) and ' inline' or '')
@@ -65,7 +67,7 @@
 
     def __init__(self, verbose_name=None, name=None, primary_key=False,
         maxlength=None, unique=False, blank=False, null=False, db_index=False,
-        core=False, rel=None, default=NOT_PROVIDED, editable=True,
+        core=False, rel=None, default=NOT_PROVIDED, editable=True, serialize=True,
         prepopulate_from=None, unique_for_date=None, unique_for_month=None,
         unique_for_year=None, validator_list=None, choices=None, radio_admin=None,
         help_text='', db_column=None):
@@ -76,11 +78,12 @@
         self.blank, self.null = blank, null
         self.core, self.rel, self.default = core, rel, default
         self.editable = editable
+        self.serialize = serialize
         self.validator_list = validator_list or []
         self.prepopulate_from = prepopulate_from
         self.unique_for_date, self.unique_for_month = unique_for_date, unique_for_month
         self.unique_for_year = unique_for_year
-        self.choices = choices or []
+        self._choices = choices or []
         self.radio_admin = radio_admin
         self.help_text = help_text
         self.db_column = db_column
@@ -162,7 +165,7 @@
 
     def get_db_prep_lookup(self, lookup_type, value):
         "Returns field's value prepared for database lookup."
-        if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'year', 'month', 'day', 'search'):
+        if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'):
             return [value]
         elif lookup_type in ('range', 'in'):
             return value
@@ -176,7 +179,13 @@
             return ["%%%s" % prep_for_like_query(value)]
         elif lookup_type == 'isnull':
             return []
-        raise TypeError, "Field has invalid lookup: %s" % lookup_type
+        elif lookup_type == 'year':
+            try:
+                value = int(value)
+            except ValueError:
+                raise ValueError("The __year lookup type requires an integer argument")
+            return ['%s-01-01 00:00:00' % value, '%s-12-31 23:59:59.999999' % value]
+        raise TypeError("Field has invalid lookup: %s" % lookup_type)
 
     def has_default(self):
         "Returns a boolean of whether this field has a default value."
@@ -205,10 +214,10 @@
 
         if self.choices:
             if self.radio_admin:
-                field_objs = [forms.RadioSelectField]
+                field_objs = [oldforms.RadioSelectField]
                 params['ul_class'] = get_ul_class(self.radio_admin)
             else:
-                field_objs = [forms.SelectField]
+                field_objs = [oldforms.SelectField]
 
             params['choices'] = self.get_choices_default()
         else:
@@ -217,7 +226,7 @@
 
     def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
         """
-        Returns a list of forms.FormField instances for this field. It
+        Returns a list of oldforms.FormField instances for this field. It
         calculates the choices at runtime, not at compile time.
 
         name_prefix is a prefix to prepend to the "field_name" argument.
@@ -289,8 +298,11 @@
         if self.choices:
             return first_choice + list(self.choices)
         rel_model = self.rel.to
-        return first_choice + [(x._get_pk_val(), str(x))
-                               for x in rel_model._default_manager.complex_filter(self.rel.limit_choices_to)]
+        if hasattr(self.rel, 'get_related_field'):
+            lst = [(getattr(x, self.rel.get_related_field().attname), str(x)) for x in rel_model._default_manager.complex_filter(self.rel.limit_choices_to)]
+        else:
+            lst = [(x._get_pk_val(), str(x)) for x in rel_model._default_manager.complex_filter(self.rel.limit_choices_to)]
+        return first_choice + lst
 
     def get_choices_default(self):
         if self.radio_admin:
@@ -321,6 +333,24 @@
     def bind(self, fieldmapping, original, bound_field_class):
         return bound_field_class(self, fieldmapping, original)
 
+    def _get_choices(self):
+        if hasattr(self._choices, 'next'):
+            choices, self._choices = tee(self._choices)
+            return choices
+        else:
+            return self._choices
+    choices = property(_get_choices)
+
+    def formfield(self, **kwargs):
+        "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}
+        defaults.update(kwargs)
+        return forms.CharField(**defaults)
+
+    def value_from_object(self, obj):
+        "Returns the value of this field in the given model instance."
+        return getattr(obj, self.attname)
+
 class AutoField(Field):
     empty_strings_allowed = False
     def __init__(self, *args, **kwargs):
@@ -342,7 +372,7 @@
         return Field.get_manipulator_fields(self, opts, manipulator, change, name_prefix, rel, follow)
 
     def get_manipulator_field_objs(self):
-        return [forms.HiddenField]
+        return [oldforms.HiddenField]
 
     def get_manipulator_new_data(self, new_data, rel=False):
         # Never going to be called
@@ -357,6 +387,9 @@
         super(AutoField, self).contribute_to_class(cls, name)
         cls._meta.has_auto_field = True
 
+    def formfield(self, **kwargs):
+        return None
+
 class BooleanField(Field):
     def __init__(self, *args, **kwargs):
         kwargs['blank'] = True
@@ -364,16 +397,21 @@
 
     def to_python(self, value):
         if value in (True, False): return value
-        if value in ('t', 'True'): return True
-        if value in ('f', 'False'): return False
+        if value in ('t', 'True', '1'): return True
+        if value in ('f', 'False', '0'): return False
         raise validators.ValidationError, gettext("This value must be either True or False.")
 
     def get_manipulator_field_objs(self):
-        return [forms.CheckboxField]
+        return [oldforms.CheckboxField]
 
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.BooleanField(**defaults)
+
 class CharField(Field):
     def get_manipulator_field_objs(self):
-        return [forms.TextField]
+        return [oldforms.TextField]
 
     def to_python(self, value):
         if isinstance(value, basestring):
@@ -385,10 +423,15 @@
                 raise validators.ValidationError, gettext_lazy("This field cannot be null.")
         return str(value)
 
+    def formfield(self, **kwargs):
+        defaults = {'max_length': self.maxlength, 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.CharField(**defaults)
+
 # TODO: Maybe move this into contrib, because it's specialized.
 class CommaSeparatedIntegerField(CharField):
     def get_manipulator_field_objs(self):
-        return [forms.CommaSeparatedIntegerField]
+        return [oldforms.CommaSeparatedIntegerField]
 
 class DateField(Field):
     empty_strings_allowed = False
@@ -401,6 +444,8 @@
         Field.__init__(self, verbose_name, name, **kwargs)
 
     def to_python(self, value):
+        if value is None:
+            return value
         if isinstance(value, datetime.datetime):
             return value.date()
         if isinstance(value, datetime.date):
@@ -450,14 +495,21 @@
         return Field.get_db_prep_save(self, value)
 
     def get_manipulator_field_objs(self):
-        return [forms.DateField]
+        return [oldforms.DateField]
 
-    def flatten_data(self, follow, obj = None):
+    def flatten_data(self, follow, obj=None):
         val = self._get_val_from_obj(obj)
         return {self.attname: (val is not None and val.strftime("%Y-%m-%d") or '')}
 
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.DateField(**defaults)
+
 class DateTimeField(DateField):
     def to_python(self, value):
+        if value is None:
+            return value
         if isinstance(value, datetime.datetime):
             return value
         if isinstance(value, datetime.date):
@@ -491,7 +543,7 @@
         return Field.get_db_prep_lookup(self, lookup_type, value)
 
     def get_manipulator_field_objs(self):
-        return [forms.DateField, forms.TimeField]
+        return [oldforms.DateField, oldforms.TimeField]
 
     def get_manipulator_field_names(self, name_prefix):
         return [name_prefix + self.name + '_date', name_prefix + self.name + '_time']
@@ -514,6 +566,11 @@
         return {date_field: (val is not None and val.strftime("%Y-%m-%d") or ''),
                 time_field: (val is not None and val.strftime("%H:%M:%S") or '')}
 
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.DateTimeField(**defaults)
+
 class EmailField(CharField):
     def __init__(self, *args, **kwargs):
         kwargs['maxlength'] = 75
@@ -523,11 +580,16 @@
         return "CharField"
 
     def get_manipulator_field_objs(self):
-        return [forms.EmailField]
+        return [oldforms.EmailField]
 
     def validate(self, field_data, all_data):
         validators.isValidEmail(field_data, all_data)
 
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.EmailField(**defaults)
+
 class FileField(Field):
     def __init__(self, verbose_name=None, name=None, upload_to='', **kwargs):
         self.upload_to = upload_to
@@ -564,7 +626,7 @@
         # If the raw path is passed in, validate it's under the MEDIA_ROOT.
         def isWithinMediaRoot(field_data, all_data):
             f = os.path.abspath(os.path.join(settings.MEDIA_ROOT, field_data))
-            if not f.startswith(os.path.normpath(settings.MEDIA_ROOT)):
+            if not f.startswith(os.path.abspath(os.path.normpath(settings.MEDIA_ROOT))):
                 raise validators.ValidationError, _("Enter a valid filename.")
         field_list[1].validator_list.append(isWithinMediaRoot)
         return field_list
@@ -574,7 +636,7 @@
         setattr(cls, 'get_%s_filename' % self.name, curry(cls._get_FIELD_filename, field=self))
         setattr(cls, 'get_%s_url' % self.name, curry(cls._get_FIELD_url, field=self))
         setattr(cls, 'get_%s_size' % self.name, curry(cls._get_FIELD_size, field=self))
-        setattr(cls, 'save_%s_file' % self.name, lambda instance, filename, raw_contents: instance._save_FIELD_file(self, filename, raw_contents))
+        setattr(cls, 'save_%s_file' % self.name, lambda instance, filename, raw_contents, save=True: instance._save_FIELD_file(self, filename, raw_contents, save))
         dispatcher.connect(self.delete_file, signal=signals.post_delete, sender=cls)
 
     def delete_file(self, instance):
@@ -587,19 +649,19 @@
                 os.remove(file_name)
 
     def get_manipulator_field_objs(self):
-        return [forms.FileUploadField, forms.HiddenField]
+        return [oldforms.FileUploadField, oldforms.HiddenField]
 
     def get_manipulator_field_names(self, name_prefix):
         return [name_prefix + self.name + '_file', name_prefix + self.name]
 
-    def save_file(self, new_data, new_object, original_object, change, rel):
+    def save_file(self, new_data, new_object, original_object, change, rel, save=True):
         upload_field_name = self.get_manipulator_field_names('')[0]
         if new_data.get(upload_field_name, False):
             func = getattr(new_object, 'save_%s_file' % self.name)
             if rel:
-                func(new_data[upload_field_name][0]["filename"], new_data[upload_field_name][0]["content"])
+                func(new_data[upload_field_name][0]["filename"], new_data[upload_field_name][0]["content"], save)
             else:
-                func(new_data[upload_field_name]["filename"], new_data[upload_field_name]["content"])
+                func(new_data[upload_field_name]["filename"], new_data[upload_field_name]["content"], save)
 
     def get_directory_name(self):
         return os.path.normpath(datetime.datetime.now().strftime(self.upload_to))
@@ -615,7 +677,7 @@
         Field.__init__(self, verbose_name, name, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [curry(forms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)]
+        return [curry(oldforms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)]
 
 class FloatField(Field):
     empty_strings_allowed = False
@@ -624,7 +686,7 @@
         Field.__init__(self, verbose_name, name, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [curry(forms.FloatField, max_digits=self.max_digits, decimal_places=self.decimal_places)]
+        return [curry(oldforms.FloatField, max_digits=self.max_digits, decimal_places=self.decimal_places)]
 
 class ImageField(FileField):
     def __init__(self, verbose_name=None, name=None, width_field=None, height_field=None, **kwargs):
@@ -632,7 +694,7 @@
         FileField.__init__(self, verbose_name, name, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [forms.ImageUploadField, forms.HiddenField]
+        return [oldforms.ImageUploadField, oldforms.HiddenField]
 
     def contribute_to_class(self, cls, name):
         super(ImageField, self).contribute_to_class(cls, name)
@@ -643,12 +705,12 @@
         if not self.height_field:
             setattr(cls, 'get_%s_height' % self.name, curry(cls._get_FIELD_height, field=self))
 
-    def save_file(self, new_data, new_object, original_object, change, rel):
-        FileField.save_file(self, new_data, new_object, original_object, change, rel)
+    def save_file(self, new_data, new_object, original_object, change, rel, save=True):
+        FileField.save_file(self, new_data, new_object, original_object, change, rel, save)
         # If the image has height and/or width field(s) and they haven't
         # changed, set the width and/or height field(s) back to their original
         # values.
-        if change and (self.width_field or self.height_field):
+        if change and (self.width_field or self.height_field) and save:
             if self.width_field:
                 setattr(new_object, self.width_field, getattr(original_object, self.width_field))
             if self.height_field:
@@ -658,15 +720,20 @@
 class IntegerField(Field):
     empty_strings_allowed = False
     def get_manipulator_field_objs(self):
-        return [forms.IntegerField]
+        return [oldforms.IntegerField]
 
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.IntegerField(**defaults)
+
 class IPAddressField(Field):
     def __init__(self, *args, **kwargs):
         kwargs['maxlength'] = 15
         Field.__init__(self, *args, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [forms.IPAddressField]
+        return [oldforms.IPAddressField]
 
     def validate(self, field_data, all_data):
         validators.isValidIPAddress4(field_data, None)
@@ -676,23 +743,36 @@
         kwargs['null'] = True
         Field.__init__(self, *args, **kwargs)
 
+    def to_python(self, value):
+        if value in (None, True, False): return value
+        if value in ('None'): return None
+        if value in ('t', 'True', '1'): return True
+        if value in ('f', 'False', '0'): return False
+        raise validators.ValidationError, gettext("This value must be either None, True or False.")
+
     def get_manipulator_field_objs(self):
-        return [forms.NullBooleanField]
+        return [oldforms.NullBooleanField]
 
 class PhoneNumberField(IntegerField):
     def get_manipulator_field_objs(self):
-        return [forms.PhoneNumberField]
+        return [oldforms.PhoneNumberField]
 
     def validate(self, field_data, all_data):
         validators.isValidPhone(field_data, all_data)
 
+    def formfield(self, **kwargs):
+        from django.contrib.localflavor.usa.forms import USPhoneNumberField
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return USPhoneNumberField(**defaults)
+
 class PositiveIntegerField(IntegerField):
     def get_manipulator_field_objs(self):
-        return [forms.PositiveIntegerField]
+        return [oldforms.PositiveIntegerField]
 
 class PositiveSmallIntegerField(IntegerField):
     def get_manipulator_field_objs(self):
-        return [forms.PositiveSmallIntegerField]
+        return [oldforms.PositiveSmallIntegerField]
 
 class SlugField(Field):
     def __init__(self, *args, **kwargs):
@@ -704,16 +784,21 @@
         Field.__init__(self, *args, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [forms.TextField]
+        return [oldforms.TextField]
 
 class SmallIntegerField(IntegerField):
     def get_manipulator_field_objs(self):
-        return [forms.SmallIntegerField]
+        return [oldforms.SmallIntegerField]
 
 class TextField(Field):
     def get_manipulator_field_objs(self):
-        return [forms.LargeTextField]
+        return [oldforms.LargeTextField]
 
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'widget': forms.Textarea, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.CharField(**defaults)
+
 class TimeField(Field):
     empty_strings_allowed = False
     def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
@@ -742,30 +827,45 @@
         if value is not None:
             # MySQL will throw a warning if microseconds are given, because it
             # doesn't support microseconds.
-            if settings.DATABASE_ENGINE == 'mysql':
+            if settings.DATABASE_ENGINE == 'mysql' and hasattr(value, 'microsecond'):
                 value = value.replace(microsecond=0)
             value = str(value)
         return Field.get_db_prep_save(self, value)
 
     def get_manipulator_field_objs(self):
-        return [forms.TimeField]
+        return [oldforms.TimeField]
 
     def flatten_data(self,follow, obj = None):
         val = self._get_val_from_obj(obj)
         return {self.attname: (val is not None and val.strftime("%H:%M:%S") or '')}
 
-class URLField(Field):
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.TimeField(**defaults)
+
+class URLField(CharField):
     def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs):
+        kwargs['maxlength'] = kwargs.get('maxlength', 200)
         if verify_exists:
             kwargs.setdefault('validator_list', []).append(validators.isExistingURL)
-        Field.__init__(self, verbose_name, name, **kwargs)
+        self.verify_exists = verify_exists
+        CharField.__init__(self, verbose_name, name, **kwargs)
 
     def get_manipulator_field_objs(self):
-        return [forms.URLField]
+        return [oldforms.URLField]
 
+    def get_internal_type(self):
+        return "CharField"
+
+    def formfield(self, **kwargs):
+        defaults = {'required': not self.blank, 'verify_exists': self.verify_exists, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.URLField(**defaults)
+
 class USStateField(Field):
     def get_manipulator_field_objs(self):
-        return [forms.USStateField]
+        return [oldforms.USStateField]
 
 class XMLField(TextField):
     def __init__(self, verbose_name=None, name=None, schema_path=None, **kwargs):
@@ -776,7 +876,7 @@
         return "TextField"
 
     def get_manipulator_field_objs(self):
-        return [curry(forms.XMLLargeTextField, schema_path=self.schema_path)]
+        return [curry(oldforms.XMLLargeTextField, schema_path=self.schema_path)]
 
 class OrderingField(IntegerField):
     empty_strings_allowed=False
@@ -789,4 +889,4 @@
         return "IntegerField"
 
     def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True):
-        return [forms.HiddenField(name_prefix + self.name)]
+        return [oldforms.HiddenField(name_prefix + self.name)]

Modified: vendor/django/current/django/db/models/fields/generic.py
===================================================================
--- vendor/django/current/django/db/models/fields/generic.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/fields/generic.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,7 +2,7 @@
 Classes allowing "generic" relations through ContentType and object-id fields.
 """
 
-from django import forms
+from django import oldforms
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import backend
 from django.db.models import signals
@@ -94,11 +94,12 @@
         
         kwargs['blank'] = True
         kwargs['editable'] = False
+        kwargs['serialize'] = False
         Field.__init__(self, **kwargs)
 
     def get_manipulator_field_objs(self):
         choices = self.get_choices_default()
-        return [curry(forms.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)]
+        return [curry(oldforms.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)]
 
     def get_choices_default(self):
         return Field.get_choices(self, include_blank=False)
@@ -117,7 +118,7 @@
         return self.object_id_field_name
         
     def m2m_reverse_name(self):
-        return self.model._meta.pk.attname
+        return self.object_id_field_name
 
     def contribute_to_class(self, cls, name):
         super(GenericRelation, self).contribute_to_class(cls, name)

Modified: vendor/django/current/django/db/models/fields/related.py
===================================================================
--- vendor/django/current/django/db/models/fields/related.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/fields/related.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,10 +2,12 @@
 from django.db.models import signals, get_model
 from django.db.models.fields import AutoField, Field, IntegerField, get_ul_class
 from django.db.models.related import RelatedObject
-from django.utils.translation import gettext_lazy, string_concat
+from django.utils.text import capfirst
+from django.utils.translation import gettext_lazy, string_concat, ngettext
 from django.utils.functional import curry
 from django.core import validators
-from django import forms
+from django import oldforms
+from django import newforms as forms
 from django.dispatch import dispatcher
 
 # For Python 2.3
@@ -25,7 +27,7 @@
     key = (module, name)
     # Has the model already been loaded?
     # If so, resolve the string reference right away
-    model = get_model(rel_cls._meta.app_label,field.rel.to)
+    model = get_model(rel_cls._meta.app_label, field.rel.to, False)
     if model:
         field.rel.to = model
         field.do_related_class(model, rel_cls)
@@ -256,8 +258,7 @@
         # Otherwise, just move the named objects into the set.
         if self.related.field.null:
             manager.clear()
-        for obj in value:
-            manager.add(obj)
+        manager.add(*value)
 
 def create_many_related_manager(superclass):
     """Creates a manager that subclasses 'superclass' (which is a Manager)
@@ -315,28 +316,36 @@
             # join_table: name of the m2m link table
             # source_col_name: the PK colname in join_table for the source object
             # target_col_name: the PK colname in join_table for the target object
-            # *objs - objects to add
+            # *objs - objects to add. Either object instances, or primary keys of object instances.
             from django.db import connection
 
-            # Add the newly created or already existing objects to the join table.
-            # First find out which items are already added, to avoid adding them twice
-            new_ids = set([obj._get_pk_val() for obj in objs])
-            cursor = connection.cursor()
-            cursor.execute("SELECT %s FROM %s WHERE %s = %%s AND %s IN (%s)" % \
-                (target_col_name, self.join_table, source_col_name,
-                target_col_name, ",".join(['%s'] * len(new_ids))),
-                [self._pk_val] + list(new_ids))
-            if cursor.rowcount is not None and cursor.rowcount != 0:
-                existing_ids = set([row[0] for row in cursor.fetchmany(cursor.rowcount)])
-            else:
-                existing_ids = set()
+            # If there aren't any objects, there is nothing to do.
+            if objs:
+                # Check that all the objects are of the right type
+                new_ids = set()
+                for obj in objs:
+                    if isinstance(obj, self.model):
+                        new_ids.add(obj._get_pk_val())
+                    else:
+                        new_ids.add(obj)
+                # Add the newly created or already existing objects to the join table.
+                # First find out which items are already added, to avoid adding them twice
+                cursor = connection.cursor()
+                cursor.execute("SELECT %s FROM %s WHERE %s = %%s AND %s IN (%s)" % \
+                    (target_col_name, self.join_table, source_col_name,
+                    target_col_name, ",".join(['%s'] * len(new_ids))),
+                    [self._pk_val] + list(new_ids))
+                if cursor.rowcount is not None and cursor.rowcount != 0:
+                    existing_ids = set([row[0] for row in cursor.fetchmany(cursor.rowcount)])
+                else:
+                    existing_ids = set()
 
-            # Add the ones that aren't there already
-            for obj_id in (new_ids - existing_ids):
-                cursor.execute("INSERT INTO %s (%s, %s) VALUES (%%s, %%s)" % \
-                    (self.join_table, source_col_name, target_col_name),
-                    [self._pk_val, obj_id])
-            transaction.commit_unless_managed()
+                # Add the ones that aren't there already
+                for obj_id in (new_ids - existing_ids):
+                    cursor.execute("INSERT INTO %s (%s, %s) VALUES (%%s, %%s)" % \
+                        (self.join_table, source_col_name, target_col_name),
+                        [self._pk_val, obj_id])
+                transaction.commit_unless_managed()
 
         def _remove_items(self, source_col_name, target_col_name, *objs):
             # source_col_name: the PK colname in join_table for the source object
@@ -344,16 +353,22 @@
             # *objs - objects to remove
             from django.db import connection
 
-            for obj in objs:
-                if not isinstance(obj, self.model):
-                    raise ValueError, "objects to remove() must be %s instances" % self.model._meta.object_name
-            # Remove the specified objects from the join table
-            cursor = connection.cursor()
-            for obj in objs:
-                cursor.execute("DELETE FROM %s WHERE %s = %%s AND %s = %%s" % \
-                    (self.join_table, source_col_name, target_col_name),
-                    [self._pk_val, obj._get_pk_val()])
-            transaction.commit_unless_managed()
+            # If there aren't any objects, there is nothing to do.
+            if objs:
+                # Check that all the objects are of the right type
+                old_ids = set()
+                for obj in objs:
+                    if isinstance(obj, self.model):
+                        old_ids.add(obj._get_pk_val())
+                    else:
+                        old_ids.add(obj)
+                # Remove the specified objects from the join table
+                cursor = connection.cursor()
+                cursor.execute("DELETE FROM %s WHERE %s = %%s AND %s IN (%s)" % \
+                    (self.join_table, source_col_name,
+                    target_col_name, ",".join(['%s'] * len(old_ids))),
+                    [self._pk_val] + list(old_ids))
+                transaction.commit_unless_managed()
 
         def _clear_items(self, source_col_name):
             # source_col_name: the PK colname in join_table for the source object
@@ -405,8 +420,7 @@
 
         manager = self.__get__(instance)
         manager.clear()
-        for obj in value:
-            manager.add(obj)
+        manager.add(*value)
 
 class ReverseManyRelatedObjectsDescriptor(object):
     # This class provides the functionality that makes the related-object
@@ -447,8 +461,7 @@
 
         manager = self.__get__(instance)
         manager.clear()
-        for obj in value:
-            manager.add(obj)
+        manager.add(*value)
 
 class ForeignKey(RelatedField, Field):
     empty_strings_allowed = False
@@ -493,13 +506,13 @@
             params['validator_list'].append(curry(manipulator_valid_rel_key, self, manipulator))
         else:
             if self.radio_admin:
-                field_objs = [forms.RadioSelectField]
+                field_objs = [oldforms.RadioSelectField]
                 params['ul_class'] = get_ul_class(self.radio_admin)
             else:
                 if self.null:
-                    field_objs = [forms.NullSelectField]
+                    field_objs = [oldforms.NullSelectField]
                 else:
-                    field_objs = [forms.SelectField]
+                    field_objs = [oldforms.SelectField]
             params['choices'] = self.get_choices_default()
         return field_objs, params
 
@@ -508,7 +521,7 @@
         if self.rel.raw_id_admin and not isinstance(rel_field, AutoField):
             return rel_field.get_manipulator_field_objs()
         else:
-            return [forms.IntegerField]
+            return [oldforms.IntegerField]
 
     def get_db_prep_save(self, value):
         if value == '' or value == None:
@@ -539,6 +552,11 @@
     def contribute_to_related_class(self, cls, related):
         setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
 
+    def formfield(self, **kwargs):
+        defaults = {'queryset': self.rel.to._default_manager.all(), 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.ModelChoiceField(**defaults)
+
 class OneToOneField(RelatedField, IntegerField):
     def __init__(self, to, to_field=None, **kwargs):
         try:
@@ -581,13 +599,13 @@
             params['validator_list'].append(curry(manipulator_valid_rel_key, self, manipulator))
         else:
             if self.radio_admin:
-                field_objs = [forms.RadioSelectField]
+                field_objs = [oldforms.RadioSelectField]
                 params['ul_class'] = get_ul_class(self.radio_admin)
             else:
                 if self.null:
-                    field_objs = [forms.NullSelectField]
+                    field_objs = [oldforms.NullSelectField]
                 else:
-                    field_objs = [forms.SelectField]
+                    field_objs = [oldforms.SelectField]
             params['choices'] = self.get_choices_default()
         return field_objs, params
 
@@ -600,6 +618,11 @@
         if not cls._meta.one_to_one_field:
             cls._meta.one_to_one_field = self
 
+    def formfield(self, **kwargs):
+        defaults = {'queryset': self.rel.to._default_manager.all(), 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.ModelChoiceField(**defaults)
+
 class ManyToManyField(RelatedField, Field):
     def __init__(self, to, **kwargs):
         kwargs['verbose_name'] = kwargs.get('verbose_name', None)
@@ -610,6 +633,7 @@
             limit_choices_to=kwargs.pop('limit_choices_to', None),
             raw_id_admin=kwargs.pop('raw_id_admin', False),
             symmetrical=kwargs.pop('symmetrical', True))
+        self.db_table = kwargs.pop('db_table', None)
         if kwargs["rel"].raw_id_admin:
             kwargs.setdefault("validator_list", []).append(self.isValidIDList)
         Field.__init__(self, **kwargs)
@@ -618,21 +642,24 @@
             msg = gettext_lazy('Separate multiple IDs with commas.')
         else:
             msg = gettext_lazy('Hold down "Control", or "Command" on a Mac, to select more than one.')
-        self.help_text = string_concat(self.help_text, msg)
+        self.help_text = string_concat(self.help_text, ' ', msg)
 
     def get_manipulator_field_objs(self):
         if self.rel.raw_id_admin:
-            return [forms.RawIdAdminField]
+            return [oldforms.RawIdAdminField]
         else:
             choices = self.get_choices_default()
-            return [curry(forms.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)]
+            return [curry(oldforms.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)]
 
     def get_choices_default(self):
         return Field.get_choices(self, include_blank=False)
 
     def _get_m2m_db_table(self, opts):
         "Function that can be curried to provide the m2m table name for this relation"
-        return '%s_%s' % (opts.db_table, self.name)
+        if self.db_table:
+            return self.db_table
+        else:
+            return '%s_%s' % (opts.db_table, self.name)
 
     def _get_m2m_column_name(self, related):
         "Function that can be curried to provide the source column name for the m2m table"
@@ -706,6 +733,19 @@
     def set_attributes_from_rel(self):
         pass
 
+    def value_from_object(self, obj):
+        "Returns the value of this field in the given model instance."
+        return getattr(obj, self.attname).all()
+
+    def formfield(self, **kwargs):
+        # If initial is passed in, it's a list of related objects, but the
+        # MultipleChoiceField takes a list of IDs.
+        if kwargs.get('initial') is not None:
+            kwargs['initial'] = [i._get_pk_val() for i in kwargs['initial']]
+        defaults = {'queryset' : self.rel.to._default_manager.all(), 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults.update(kwargs)
+        return forms.ModelMultipleChoiceField(**defaults)
+
 class ManyToOneRel(object):
     def __init__(self, to, field_name, num_in_admin=3, min_num_in_admin=None,
         max_num_in_admin=None, num_extra_on_change=1, edit_inline=False,

Modified: vendor/django/current/django/db/models/loading.py
===================================================================
--- vendor/django/current/django/db/models/loading.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/loading.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -32,7 +32,7 @@
                 _app_errors[app_name] = e
     return _app_list
 
-def get_app(app_label, emptyOK = False):
+def get_app(app_label, emptyOK=False):
     "Returns the module containing the models for the given app_label. If the app has no models in it and 'emptyOK' is True, returns None."
     get_apps() # Run get_apps() to populate the _app_list cache. Slightly hackish.
     for app_name in settings.INSTALLED_APPS:
@@ -48,7 +48,7 @@
 def load_app(app_name):
     "Loads the app with the provided fully qualified name, and returns the model module."
     global _app_list
-    mod = __import__(app_name, '', '', ['models'])
+    mod = __import__(app_name, {}, {}, ['models'])
     if not hasattr(mod, 'models'):
         return None
     if mod.models not in _app_list:
@@ -75,11 +75,15 @@
             model_list.extend(get_models(app_mod))
         return model_list
 
-def get_model(app_label, model_name):
+def get_model(app_label, model_name, seed_cache=True):
     """
-    Returns the model matching the given app_label and case-insensitive model_name.
+    Returns the model matching the given app_label and case-insensitive
+    model_name.
+
     Returns None if no model is found.
     """
+    if seed_cache:
+        get_apps()
     try:
         model_dict = _app_models[app_label]
     except KeyError:

Modified: vendor/django/current/django/db/models/manager.py
===================================================================
--- vendor/django/current/django/db/models/manager.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/manager.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,4 @@
-from django.db.models.query import QuerySet
+from django.db.models.query import QuerySet, EmptyQuerySet
 from django.dispatch import dispatcher
 from django.db.models import signals
 from django.db.models.fields import FieldDoesNotExist
@@ -41,12 +41,18 @@
     #######################
     # PROXIES TO QUERYSET #
     #######################
+    
+    def get_empty_query_set(self):
+        return EmptyQuerySet(self.model)
 
     def get_query_set(self):
         """Returns a new QuerySet object.  Subclasses can override this method
         to easily customise the behaviour of the Manager.
         """
         return QuerySet(self.model)
+    
+    def none(self):
+        return self.get_empty_query_set()
 
     def all(self):
         return self.get_query_set()

Modified: vendor/django/current/django/db/models/manipulators.py
===================================================================
--- vendor/django/current/django/db/models/manipulators.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/manipulators.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 from django.core.exceptions import ObjectDoesNotExist
-from django import forms
+from django import oldforms
 from django.core import validators
 from django.db.models.fields import FileField, AutoField
 from django.dispatch import dispatcher
@@ -40,7 +40,7 @@
                 self.man._prepare(model)
             return self.man
 
-class AutomaticManipulator(forms.Manipulator):
+class AutomaticManipulator(oldforms.Manipulator):
     def _prepare(cls, model):
         cls.model = model
         cls.manager = model._default_manager
@@ -76,7 +76,7 @@
 
         # Add field for ordering.
         if self.change and self.opts.get_ordered_objects():
-            self.fields.append(forms.CommaSeparatedIntegerField(field_name="order_"))
+            self.fields.append(oldforms.CommaSeparatedIntegerField(field_name="order_"))
 
     def save(self, new_data):
         # TODO: big cleanup when core fields go -> use recursive manipulators.
@@ -96,15 +96,17 @@
         if self.change:
             params[self.opts.pk.attname] = self.obj_key
 
-        # First, save the basic object itself.
+        # First, create the basic object itself.
         new_object = self.model(**params)
-        new_object.save()
 
-        # Now that the object's been saved, save any uploaded files.
+        # Now that the object's been created, save any uploaded files.
         for f in self.opts.fields:
             if isinstance(f, FileField):
-                f.save_file(new_data, new_object, self.change and self.original_object or None, self.change, rel=False)
+                f.save_file(new_data, new_object, self.change and self.original_object or None, self.change, rel=False, save=False)
 
+        # Now save the object
+        new_object.save()
+
         # Calculate which primary fields have changed.
         if self.change:
             self.fields_added, self.fields_changed, self.fields_deleted = [], [], []
@@ -138,7 +140,7 @@
             child_follow = self.follow.get(related.name, None)
 
             if child_follow:
-                obj_list = expanded_data[related.var_name].items()
+                obj_list = expanded_data.get(related.var_name, {}).items()
                 if not obj_list:
                     continue
 
@@ -177,7 +179,7 @@
                         # case, because they'll be dealt with later.
 
                         if f == related.field:
-                            param = getattr(new_object, related.field.rel.field_name)
+                            param = getattr(new_object, related.field.rel.get_related_field().attname)
                         elif (not self.change) and isinstance(f, AutoField):
                             param = None
                         elif self.change and (isinstance(f, FileField) or not child_follow.get(f.name, None)):
@@ -215,8 +217,11 @@
                         # Save many-to-many objects.
                         for f in related.opts.many_to_many:
                             if child_follow.get(f.name, None) and not f.rel.edit_inline:
-                                was_changed = getattr(new_rel_obj, 'set_%s' % f.name)(rel_new_data[f.attname])
-                                if self.change and was_changed:
+                                new_value = rel_new_data[f.attname]
+                                if f.rel.raw_id_admin:
+                                    new_value = new_value[0]
+                                setattr(new_rel_obj, f.name, f.rel.to.objects.filter(pk__in=new_value))
+                                if self.change:
                                     self.fields_changed.append('%s for %s "%s"' % (f.verbose_name, related.opts.verbose_name, new_rel_obj))
 
                     # If, in the change stage, all of the core fields were blank and
@@ -283,7 +288,7 @@
         # This is really not going to work for fields that have different
         # form fields, e.g. DateTime.
         # This validation needs to occur after html2python to be effective.
-        field_val = all_data.get(f.attname, None)
+        field_val = all_data.get(f.name, None)
         if field_val is None:
             # This will be caught by another validator, assuming the field
             # doesn't have blank=True.
@@ -300,12 +305,12 @@
         pass
     else:
         raise validators.ValidationError, _("%(object)s with this %(type)s already exists for the given %(field)s.") % \
-            {'object': capfirst(opts.verbose_name), 'type': field_list[0].verbose_name, 'field': get_text_list(field_name_list[1:], 'and')}
+            {'object': capfirst(opts.verbose_name), 'type': field_list[0].verbose_name, 'field': get_text_list([f.verbose_name for f in field_list[1:]], _('and'))}
 
 def manipulator_validator_unique_for_date(from_field, date_field, opts, lookup_type, self, field_data, all_data):
     from django.db.models.fields.related import ManyToOneRel
     date_str = all_data.get(date_field.get_manipulator_field_names('')[0], None)
-    date_val = forms.DateField.html2python(date_str)
+    date_val = oldforms.DateField.html2python(date_str)
     if date_val is None:
         return # Date was invalid. This will be caught by another validator.
     lookup_kwargs = {'%s__year' % date_field.name: date_val.year}

Modified: vendor/django/current/django/db/models/options.py
===================================================================
--- vendor/django/current/django/db/models/options.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/options.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -84,6 +84,7 @@
             self.fields.insert(bisect(self.fields, field), field)
             if not self.pk and field.primary_key:
                 self.pk = field
+                field.serialize = False
 
     def __repr__(self):
         return '<Options for %s>' % self.object_name

Modified: vendor/django/current/django/db/models/query.py
===================================================================
--- vendor/django/current/django/db/models/query.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/query.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,6 @@
 from django.db import backend, connection, transaction
 from django.db.models.fields import DateField, FieldDoesNotExist
+from django.db.models.fields.generic import GenericRelation
 from django.db.models import signals
 from django.dispatch import dispatcher
 from django.utils.datastructures import SortedDict
@@ -25,6 +26,9 @@
 # Larger values are slightly faster at the expense of more storage space.
 GET_ITERATOR_CHUNK_SIZE = 100
 
+class EmptyResultSet(Exception):
+    pass
+
 ####################
 # HELPER FUNCTIONS #
 ####################
@@ -80,6 +84,7 @@
         self._filters = Q()
         self._order_by = None        # Ordering, e.g. ('date', '-name'). If None, use model's ordering.
         self._select_related = False # Whether to fill cache for related objects.
+        self._max_related_depth = 0  # Maximum "depth" for select_related
         self._distinct = False       # Whether the query should use SELECT DISTINCT.
         self._select = {}            # Dictionary of attname -> SQL.
         self._where = []             # List of extra WHERE clauses to use.
@@ -104,6 +109,8 @@
 
     def __getitem__(self, k):
         "Retrieve an item or slice from the set of results."
+        if not isinstance(k, (slice, int)):
+            raise TypeError
         assert (not isinstance(k, slice) and (k >= 0)) \
             or (isinstance(k, slice) and (k.start is None or k.start >= 0) and (k.stop is None or k.stop >= 0)), \
             "Negative indexing is not supported."
@@ -163,12 +170,16 @@
 
     def iterator(self):
         "Performs the SELECT database lookup of this QuerySet."
+        try:
+            select, sql, params = self._get_sql_clause()
+        except EmptyResultSet:
+            raise StopIteration
+
         # self._select is a dictionary, and dictionaries' key order is
         # undefined, so we convert it to a list of tuples.
         extra_select = self._select.items()
 
         cursor = connection.cursor()
-        select, sql, params = self._get_sql_clause()
         cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params)
         fill_cache = self._select_related
         index_end = len(self.model._meta.fields)
@@ -178,7 +189,8 @@
                 raise StopIteration
             for row in rows:
                 if fill_cache:
-                    obj, index_end = get_cached_row(self.model, row, 0)
+                    obj, index_end = get_cached_row(klass=self.model, row=row, 
+                                                    index_start=0, max_depth=self._max_related_depth)
                 else:
                     obj = self.model(*row[:index_end])
                 for i, k in enumerate(extra_select):
@@ -186,13 +198,31 @@
                 yield obj
 
     def count(self):
-        "Performs a SELECT COUNT() and returns the number of records as an integer."
+        """
+        Performs a SELECT COUNT() and returns the number of records as an
+        integer.
+        
+        If the queryset is already cached (i.e. self._result_cache is set) this
+        simply returns the length of the cached results set to avoid multiple
+        SELECT COUNT(*) calls.
+        """
+        if self._result_cache is not None:
+            return len(self._result_cache)
+            
         counter = self._clone()
         counter._order_by = ()
+        counter._select_related = False
+
+        offset = counter._offset
+        limit = counter._limit
         counter._offset = None
         counter._limit = None
-        counter._select_related = False
-        select, sql, params = counter._get_sql_clause()
+
+        try:
+            select, sql, params = counter._get_sql_clause()
+        except EmptyResultSet:
+            return 0
+
         cursor = connection.cursor()
         if self._distinct:
             id_col = "%s.%s" % (backend.quote_name(self.model._meta.db_table),
@@ -200,8 +230,17 @@
             cursor.execute("SELECT COUNT(DISTINCT(%s))" % id_col + sql, params)
         else:
             cursor.execute("SELECT COUNT(*)" + sql, params)
-        return cursor.fetchone()[0]
+        count = cursor.fetchone()[0]
 
+        # Apply any offset and limit constraints manually, since using LIMIT or
+        # OFFSET in SQL doesn't change the output of COUNT.
+        if offset:
+            count = max(0, count - offset)
+        if limit:
+            count = min(limit, count)
+
+        return count
+
     def get(self, *args, **kwargs):
         "Performs the SELECT and returns a single object matching the given keyword arguments."
         clone = self.filter(*args, **kwargs)
@@ -359,9 +398,9 @@
         else:
             return self._filter_or_exclude(None, **filter_obj)
 
-    def select_related(self, true_or_false=True):
+    def select_related(self, true_or_false=True, depth=0):
         "Returns a new QuerySet instance with '_select_related' modified."
-        return self._clone(_select_related=true_or_false)
+        return self._clone(_select_related=true_or_false, _max_related_depth=depth)
 
     def order_by(self, *field_names):
         "Returns a new QuerySet instance with the ordering changed."
@@ -395,6 +434,7 @@
         c._filters = self._filters
         c._order_by = self._order_by
         c._select_related = self._select_related
+        c._max_related_depth = self._max_related_depth
         c._distinct = self._distinct
         c._select = self._select.copy()
         c._where = self._where[:]
@@ -448,7 +488,10 @@
 
         # Add additional tables and WHERE clauses based on select_related.
         if self._select_related:
-            fill_table_cache(opts, select, tables, where, opts.db_table, [opts.db_table])
+            fill_table_cache(opts, select, tables, where, 
+                             old_prefix=opts.db_table, 
+                             cache_tables_seen=[opts.db_table], 
+                             max_depth=self._max_related_depth)
 
         # Add any additional SELECTs.
         if self._select:
@@ -509,11 +552,18 @@
         return select, " ".join(sql), params
 
 class ValuesQuerySet(QuerySet):
-    def iterator(self):
+    def __init__(self, *args, **kwargs):
+        super(ValuesQuerySet, self).__init__(*args, **kwargs)
         # select_related and select aren't supported in values().
         self._select_related = False
         self._select = {}
 
+    def iterator(self):
+        try:
+            select, sql, params = self._get_sql_clause()
+        except EmptyResultSet:
+            raise StopIteration
+
         # self._fields is a list of field names to fetch.
         if self._fields:
             columns = [self.model._meta.get_field(f, many_to_many=False).column for f in self._fields]
@@ -522,9 +572,8 @@
             columns = [f.column for f in self.model._meta.fields]
             field_names = [f.attname for f in self.model._meta.fields]
 
+        select = ['%s.%s' % (backend.quote_name(self.model._meta.db_table), backend.quote_name(c)) for c in columns]
         cursor = connection.cursor()
-        select, sql, params = self._get_sql_clause()
-        select = ['%s.%s' % (backend.quote_name(self.model._meta.db_table), backend.quote_name(c)) for c in columns]
         cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params)
         while 1:
             rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)
@@ -545,7 +594,12 @@
         if self._field.null:
             self._where.append('%s.%s IS NOT NULL' % \
                 (backend.quote_name(self.model._meta.db_table), backend.quote_name(self._field.column)))
-        select, sql, params = self._get_sql_clause()
+
+        try:
+            select, sql, params = self._get_sql_clause()
+        except EmptyResultSet:
+            raise StopIteration
+
         sql = 'SELECT %s %s GROUP BY 1 ORDER BY 1 %s' % \
             (backend.get_date_trunc_sql(self._kind, '%s.%s' % (backend.quote_name(self.model._meta.db_table),
             backend.quote_name(self._field.column))), sql, self._order)
@@ -563,6 +617,25 @@
         c._order = self._order
         return c
 
+class EmptyQuerySet(QuerySet):
+    def __init__(self, model=None):
+        super(EmptyQuerySet, self).__init__(model)
+        self._result_cache = []
+
+    def count(self):
+        return 0
+
+    def delete(self):
+        pass
+
+    def _clone(self, klass=None, **kwargs):
+        c = super(EmptyQuerySet, self)._clone(klass, **kwargs)
+        c._result_cache = []
+        return c
+
+    def _get_sql_clause(self):
+        raise EmptyResultSet
+
 class QOperator(object):
     "Base class for QAnd and QOr"
     def __init__(self, *args):
@@ -571,10 +644,14 @@
     def get_sql(self, opts):
         joins, where, params = SortedDict(), [], []
         for val in self.args:
-            joins2, where2, params2 = val.get_sql(opts)
-            joins.update(joins2)
-            where.extend(where2)
-            params.extend(params2)
+            try:
+                joins2, where2, params2 = val.get_sql(opts)
+                joins.update(joins2)
+                where.extend(where2)
+                params.extend(params2)
+            except EmptyResultSet:
+                if not isinstance(self, QOr):
+                    raise EmptyResultSet
         if where:
             return joins, ['(%s)' % self.operator.join(where)], params
         return joins, [], params
@@ -628,8 +705,11 @@
         self.q = q
 
     def get_sql(self, opts):
-        joins, where, params = self.q.get_sql(opts)
-        where2 = ['(NOT (%s))' % " AND ".join(where)]
+        try:
+            joins, where, params = self.q.get_sql(opts)
+            where2 = ['(NOT (%s))' % " AND ".join(where)]
+        except EmptyResultSet:
+            return SortedDict(), [], []
         return joins, where2, params
 
 def get_where_clause(lookup_type, table_prefix, field_name, value):
@@ -641,10 +721,14 @@
     except KeyError:
         pass
     if lookup_type == 'in':
-        return '%s%s IN (%s)' % (table_prefix, field_name, ','.join(['%s' for v in value]))
-    elif lookup_type == 'range':
+        in_string = ','.join(['%s' for id in value])
+        if in_string:
+            return '%s%s IN (%s)' % (table_prefix, field_name, in_string)
+        else:
+            raise EmptyResultSet
+    elif lookup_type in ('range', 'year'):
         return '%s%s BETWEEN %%s AND %%s' % (table_prefix, field_name)
-    elif lookup_type in ('year', 'month', 'day'):
+    elif lookup_type in ('month', 'day'):
         return "%s = %%s" % backend.get_date_extract_sql(lookup_type, table_prefix + field_name)
     elif lookup_type == 'isnull':
         return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or ''))
@@ -652,21 +736,33 @@
         return backend.get_fulltext_search_sql(table_prefix + field_name)
     raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type)
 
-def get_cached_row(klass, row, index_start):
-    "Helper function that recursively returns an object with cache filled"
+def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0):
+    """Helper function that recursively returns an object with cache filled"""
+    
+    # If we've got a max_depth set and we've exceeded that depth, bail now.
+    if max_depth and cur_depth > max_depth:
+        return None
+    
     index_end = index_start + len(klass._meta.fields)
     obj = klass(*row[index_start:index_end])
     for f in klass._meta.fields:
         if f.rel and not f.null:
-            rel_obj, index_end = get_cached_row(f.rel.to, row, index_end)
-            setattr(obj, f.get_cache_name(), rel_obj)
+            cached_row = get_cached_row(f.rel.to, row, index_end, max_depth, cur_depth+1)
+            if cached_row:
+                rel_obj, index_end = cached_row
+                setattr(obj, f.get_cache_name(), rel_obj)
     return obj, index_end
 
-def fill_table_cache(opts, select, tables, where, old_prefix, cache_tables_seen):
+def fill_table_cache(opts, select, tables, where, old_prefix, cache_tables_seen, max_depth=0, cur_depth=0):
     """
     Helper function that recursively populates the select, tables and where (in
     place) for select_related queries.
     """
+    
+    # If we've got a max_depth set and we've exceeded that depth, bail now.
+    if max_depth and cur_depth > max_depth:
+        return None
+    
     qn = backend.quote_name
     for f in opts.fields:
         if f.rel and not f.null:
@@ -681,12 +777,12 @@
             where.append('%s.%s = %s.%s' % \
                 (qn(old_prefix), qn(f.column), qn(db_table), qn(f.rel.get_related_field().column)))
             select.extend(['%s.%s' % (qn(db_table), qn(f2.column)) for f2 in f.rel.to._meta.fields])
-            fill_table_cache(f.rel.to._meta, select, tables, where, db_table, cache_tables_seen)
+            fill_table_cache(f.rel.to._meta, select, tables, where, db_table, cache_tables_seen, max_depth, cur_depth+1)
 
 def parse_lookup(kwarg_items, opts):
     # Helper function that handles converting API kwargs
     # (e.g. "name__exact": "tom") to SQL.
-    # Returns a tuple of (tables, joins, where, params).
+    # Returns a tuple of (joins, where, params).
 
     # 'joins' is a sorted dictionary describing the tables that must be joined
     # to complete the query. The dictionary is sorted because creation order
@@ -707,34 +803,35 @@
     joins, where, params = SortedDict(), [], []
 
     for kwarg, value in kwarg_items:
-        if value is not None:
-            path = kwarg.split(LOOKUP_SEPARATOR)
-            # Extract the last elements of the kwarg.
-            # The very-last is the lookup_type (equals, like, etc).
-            # The second-last is the table column on which the lookup_type is
-            # to be performed.
-            # The exceptions to this are:
-            # 1)  "pk", which is an implicit id__exact;
-            #     if we find "pk", make the lookup_type "exact', and insert
-            #     a dummy name of None, which we will replace when
-            #     we know which table column to grab as the primary key.
-            # 2)  If there is only one part, or the last part is not a query
-            #     term, assume that the query is an __exact
-            lookup_type = path.pop()
-            if lookup_type == 'pk':
-                lookup_type = 'exact'
-                path.append(None)
-            elif len(path) == 0 or lookup_type not in QUERY_TERMS:
-                path.append(lookup_type)
-                lookup_type = 'exact'
+        path = kwarg.split(LOOKUP_SEPARATOR)
+        # Extract the last elements of the kwarg.
+        # The very-last is the lookup_type (equals, like, etc).
+        # The second-last is the table column on which the lookup_type is
+        # to be performed. If this name is 'pk', it will be substituted with
+        # the name of the primary key.
+        # If there is only one part, or the last part is not a query
+        # term, assume that the query is an __exact
+        lookup_type = path.pop()
+        if lookup_type == 'pk':
+            lookup_type = 'exact'
+            path.append(None)
+        elif len(path) == 0 or lookup_type not in QUERY_TERMS:
+            path.append(lookup_type)
+            lookup_type = 'exact'
 
-            if len(path) < 1:
-                raise TypeError, "Cannot parse keyword query %r" % kwarg
+        if len(path) < 1:
+            raise TypeError, "Cannot parse keyword query %r" % kwarg
 
-            joins2, where2, params2 = lookup_inner(path, lookup_type, value, opts, opts.db_table, None)
-            joins.update(joins2)
-            where.extend(where2)
-            params.extend(params2)
+        if value is None:
+            # Interpret '__exact=None' as the sql '= NULL'; otherwise, reject
+            # all uses of None as a query value.
+            if lookup_type != 'exact':
+                raise ValueError, "Cannot use None as a query value"
+
+        joins2, where2, params2 = lookup_inner(path, lookup_type, value, opts, opts.db_table, None)
+        joins.update(joins2)
+        where.extend(where2)
+        params.extend(params2)
     return joins, where, params
 
 class FieldFound(Exception):
@@ -766,7 +863,7 @@
     name = path.pop(0)
     # Has the primary key been requested? If so, expand it out
     # to be the name of the current class' primary key
-    if name is None:
+    if name is None or name == 'pk':
         name = current_opts.pk.name
 
     # Try to find the name in the fields associated with the current class
@@ -826,9 +923,15 @@
                 new_opts = field.rel.to._meta
                 new_column = new_opts.pk.column
                 join_column = field.column
+                raise FieldFound
+            elif path:
+                # For regular fields, if there are still items on the path,
+                # an error has been made. We munge "name" so that the error
+                # properly identifies the cause of the problem.
+                name += LOOKUP_SEPARATOR + path[0]
+            else:
+                raise FieldFound
 
-            raise FieldFound
-
     except FieldFound: # Match found, loop has been shortcut.
         pass
     else: # No match found.
@@ -925,18 +1028,26 @@
 
         pk_list = [pk for pk,instance in seen_objs[cls]]
         for related in cls._meta.get_all_related_many_to_many_objects():
-            for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
-                cursor.execute("DELETE FROM %s WHERE %s IN (%s)" % \
-                    (qn(related.field.m2m_db_table()),
-                        qn(related.field.m2m_reverse_name()),
-                        ','.join(['%s' for pk in pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]])),
-                    pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE])
+            if not isinstance(related.field, GenericRelation):
+                for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
+                    cursor.execute("DELETE FROM %s WHERE %s IN (%s)" % \
+                        (qn(related.field.m2m_db_table()),
+                            qn(related.field.m2m_reverse_name()),
+                            ','.join(['%s' for pk in pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]])),
+                        pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE])
         for f in cls._meta.many_to_many:
+            if isinstance(f, GenericRelation):
+                from django.contrib.contenttypes.models import ContentType
+                query_extra = 'AND %s=%%s' % f.rel.to._meta.get_field(f.content_type_field_name).column
+                args_extra = [ContentType.objects.get_for_model(cls).id]
+            else:
+                query_extra = ''
+                args_extra = []
             for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
-                cursor.execute("DELETE FROM %s WHERE %s IN (%s)" % \
+                cursor.execute(("DELETE FROM %s WHERE %s IN (%s)" % \
                     (qn(f.m2m_db_table()), qn(f.m2m_column_name()),
-                    ','.join(['%s' for pk in pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]])),
-                    pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE])
+                    ','.join(['%s' for pk in pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE]]))) + query_extra,
+                    pk_list[offset:offset+GET_ITERATOR_CHUNK_SIZE] + args_extra)
         for field in cls._meta.fields:
             if field.rel and field.null and field.rel.to in seen_objs:
                 for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):

Modified: vendor/django/current/django/db/models/related.py
===================================================================
--- vendor/django/current/django/db/models/related.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/db/models/related.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,7 +1,7 @@
 class BoundRelatedObject(object):
     def __init__(self, related_object, field_mapping, original):
         self.relation = related_object
-        self.field_mappings = field_mapping[related_object.opts.module_name]
+        self.field_mappings = field_mapping[related_object.name]
 
     def template_name(self):
         raise NotImplementedError
@@ -16,7 +16,7 @@
         self.opts = model._meta
         self.field = field
         self.edit_inline = field.rel.edit_inline
-        self.name = self.opts.module_name
+        self.name = '%s:%s' % (self.opts.app_label, self.opts.module_name)
         self.var_name = self.opts.object_name.lower()
 
     def flatten_data(self, follow, obj=None):
@@ -68,7 +68,10 @@
                 # object
                 return [attr]
         else:
-            return [None] * self.field.rel.num_in_admin
+            if self.field.rel.min_num_in_admin:
+                return [None] * max(self.field.rel.num_in_admin, self.field.rel.min_num_in_admin)
+            else:
+                return [None] * self.field.rel.num_in_admin
 
     def get_db_prep_lookup(self, lookup_type, value):
         # Defer to the actual field definition for db prep
@@ -101,12 +104,12 @@
                 attr = getattr(manipulator.original_object, self.get_accessor_name())
                 count = attr.count()
                 count += self.field.rel.num_extra_on_change
-                if self.field.rel.min_num_in_admin:
-                    count = max(count, self.field.rel.min_num_in_admin)
-                if self.field.rel.max_num_in_admin:
-                    count = min(count, self.field.rel.max_num_in_admin)
             else:
                 count = self.field.rel.num_in_admin
+            if self.field.rel.min_num_in_admin:
+                count = max(count, self.field.rel.min_num_in_admin)
+            if self.field.rel.max_num_in_admin:
+                count = min(count, self.field.rel.max_num_in_admin)
         else:
             count = 1
 
@@ -131,6 +134,9 @@
         # many-to-many objects. It uses the lower-cased object_name + "_set",
         # but this can be overridden with the "related_name" option.
         if self.field.rel.multiple:
+            # If this is a symmetrical m2m relation on self, there is no reverse accessor.
+            if getattr(self.field.rel, 'symmetrical', False) and self.model == self.parent_model:
+                return None
             return self.field.rel.related_name or (self.opts.object_name.lower() + '_set')
         else:
             return self.field.rel.related_name or (self.opts.object_name.lower())

Modified: vendor/django/current/django/dispatch/dispatcher.py
===================================================================
--- vendor/django/current/django/dispatch/dispatcher.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/dispatch/dispatcher.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,7 +25,6 @@
         deletion, (considerably speeds up the cleanup process
         vs. the original code.)
 """
-from __future__ import generators
 import types, weakref
 from django.dispatch import saferef, robustapply, errors
 
@@ -33,11 +32,6 @@
 __cvsid__ = "$Id: dispatcher.py,v 1.9 2005/09/17 04:55:57 mcfletch Exp $"
 __version__ = "$Revision: 1.9 $"[11:-2]
 
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
 
 class _Parameter:
     """Used to represent default parameter values."""
@@ -140,10 +134,9 @@
     if weak:
         receiver = saferef.safeRef(receiver, onDelete=_removeReceiver)
     senderkey = id(sender)
-    if connections.has_key(senderkey):
-        signals = connections[senderkey]
-    else:
-        connections[senderkey] = signals = {}
+
+    signals = connections.setdefault(senderkey, {})
+
     # Keep track of senders for cleanup.
     # Is Anonymous something we want to clean up?
     if sender not in (None, Anonymous, Any):
@@ -251,10 +244,10 @@
     to retrieve the actual receiver objects as an iterable
     object.
     """
-    try:
-        return connections[id(sender)][signal]
-    except KeyError:
-        return []
+    existing = connections.get(id(sender))
+    if existing is not None:
+        return existing.get(signal, [])
+    return []
 
 def liveReceivers(receivers):
     """Filter sequence of receivers to get resolved, live receivers
@@ -278,31 +271,49 @@
 def getAllReceivers( sender = Any, signal = Any ):
     """Get list of all receivers from global tables
 
-    This gets all receivers which should receive
+    This gets all dereferenced receivers which should receive
     the given signal from sender, each receiver should
     be produced only once by the resulting generator
     """
     receivers = {}
-    for set in (
-        # Get receivers that receive *this* signal from *this* sender.
-        getReceivers( sender, signal ),
-        # Add receivers that receive *any* signal from *this* sender.
-        getReceivers( sender, Any ),
-        # Add receivers that receive *this* signal from *any* sender.
-        getReceivers( Any, signal ),
-        # Add receivers that receive *any* signal from *any* sender.
-        getReceivers( Any, Any ),
-    ):
-        for receiver in set:
-            if receiver: # filter out dead instance-method weakrefs
-                try:
-                    if not receivers.has_key( receiver ):
-                        receivers[receiver] = 1
-                        yield receiver
-                except TypeError:
-                    # dead weakrefs raise TypeError on hash...
-                    pass
+    # Get receivers that receive *this* signal from *this* sender.
+    # Add receivers that receive *any* signal from *this* sender.
+    # Add receivers that receive *this* signal from *any* sender.
+    # Add receivers that receive *any* signal from *any* sender.
+    l = []
+    i = id(sender)
+    if i in connections:
+        sender_receivers = connections[i]
+        if signal in sender_receivers:
+            l.extend(sender_receivers[signal])
+        if signal is not Any and Any in sender_receivers:
+            l.extend(sender_receivers[Any])
 
+    if sender is not Any:
+        i = id(Any)
+        if i in connections:
+            sender_receivers = connections[i]
+            if sender_receivers is not None:
+                if signal in sender_receivers:
+                    l.extend(sender_receivers[signal])
+                if signal is not Any and Any in sender_receivers:
+                    l.extend(sender_receivers[Any])
+
+    for receiver in l:
+        try:
+            if not receiver in receivers:
+                if isinstance(receiver, WEAKREF_TYPES):
+                    receiver = receiver()
+                    # this should only (rough guess) be possible if somehow, deref'ing
+                    # triggered a wipe.
+                    if receiver is None:
+                        continue
+                receivers[receiver] = 1
+                yield receiver
+        except TypeError:
+            # dead weakrefs raise TypeError on hash...
+            pass
+
 def send(signal=Any, sender=Anonymous, *arguments, **named):
     """Send signal from sender to all connected receivers.
     
@@ -340,7 +351,7 @@
     # Call each receiver with whatever arguments it can accept.
     # Return a list of tuple pairs [(receiver, response), ... ].
     responses = []
-    for receiver in liveReceivers(getAllReceivers(sender, signal)):
+    for receiver in getAllReceivers(sender, signal):
         response = robustapply.robustApply(
             receiver,
             signal=signal,
@@ -350,6 +361,8 @@
         )
         responses.append((receiver, response))
     return responses
+
+
 def sendExact( signal=Any, sender=Anonymous, *arguments, **named ):
     """Send signal only to those receivers registered for exact message
 
@@ -421,33 +434,18 @@
 def _removeSender(senderkey):
     """Remove senderkey from connections."""
     _removeBackrefs(senderkey)
-    try:
-        del connections[senderkey]
-    except KeyError:
-        pass
-    # Senderkey will only be in senders dictionary if sender 
-    # could be weakly referenced.
-    try: 
-        del senders[senderkey]
-    except: 
-        pass
 
+    connections.pop(senderkey, None)
+    senders.pop(senderkey, None)
 
+
 def _removeBackrefs( senderkey):
     """Remove all back-references to this senderkey"""
-    try:
-        signals = connections[senderkey]
-    except KeyError:
-        signals = None
-    else:
-        items = signals.items()
-        def allReceivers( ):
-            for signal,set in items:
-                for item in set:
-                    yield item
-        for receiver in allReceivers():
+    for receiver_list in connections.pop(senderkey, {}).values():
+        for receiver in receiver_list:
             _killBackref( receiver, senderkey )
 
+
 def _removeOldBackRefs(senderkey, signal, receiver, receivers):
     """Kill old sendersBack references from receiver
 
@@ -483,13 +481,13 @@
 def _killBackref( receiver, senderkey ):
     """Do the actual removal of back reference from receiver to senderkey"""
     receiverkey = id(receiver)
-    set = sendersBack.get( receiverkey, () )
-    while senderkey in set:
+    receivers_list = sendersBack.get( receiverkey, () )
+    while senderkey in receivers_list:
         try:
-            set.remove( senderkey )
+            receivers_list.remove( senderkey )
         except:
             break
-    if not set:
+    if not receivers_list:
         try:
             del sendersBack[ receiverkey ]
         except KeyError:

Modified: vendor/django/current/django/forms/__init__.py
===================================================================
--- vendor/django/current/django/forms/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/forms/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,995 +1 @@
-from django.core import validators
-from django.core.exceptions import PermissionDenied
-from django.utils.html import escape
-from django.conf import settings
-from django.utils.translation import gettext, gettext_lazy, ngettext
-
-FORM_FIELD_ID_PREFIX = 'id_'
-
-class EmptyValue(Exception):
-    "This is raised when empty data is provided"
-    pass
-
-class Manipulator(object):
-    # List of permission strings. User must have at least one to manipulate.
-    # None means everybody has permission.
-    required_permission = ''
-
-    def __init__(self):
-        # List of FormField objects
-        self.fields = []
-
-    def __getitem__(self, field_name):
-        "Looks up field by field name; raises KeyError on failure"
-        for field in self.fields:
-            if field.field_name == field_name:
-                return field
-        raise KeyError, "Field %s not found\n%s" % (field_name, repr(self.fields))
-
-    def __delitem__(self, field_name):
-        "Deletes the field with the given field name; raises KeyError on failure"
-        for i, field in enumerate(self.fields):
-            if field.field_name == field_name:
-                del self.fields[i]
-                return
-        raise KeyError, "Field %s not found" % field_name
-
-    def check_permissions(self, user):
-        """Confirms user has required permissions to use this manipulator; raises
-        PermissionDenied on failure."""
-        if self.required_permission is None:
-            return
-        if user.has_perm(self.required_permission):
-            return
-        raise PermissionDenied
-
-    def prepare(self, new_data):
-        """
-        Makes any necessary preparations to new_data, in place, before data has
-        been validated.
-        """
-        for field in self.fields:
-            field.prepare(new_data)
-
-    def get_validation_errors(self, new_data):
-        "Returns dictionary mapping field_names to error-message lists"
-        errors = {}
-        for field in self.fields:
-            errors.update(field.get_validation_errors(new_data))
-            val_name = 'validate_%s' % field.field_name
-            if hasattr(self, val_name):
-                val = getattr(self, val_name)
-                try:
-                    field.run_validator(new_data, val)
-                except (validators.ValidationError, validators.CriticalValidationError), e:
-                    errors.setdefault(field.field_name, []).extend(e.messages)
-
-#            if field.is_required and not new_data.get(field.field_name, False):
-#                errors.setdefault(field.field_name, []).append(gettext_lazy('This field is required.'))
-#                continue
-#            try:
-#                validator_list = field.validator_list
-#                if hasattr(self, 'validate_%s' % field.field_name):
-#                    validator_list.append(getattr(self, 'validate_%s' % field.field_name))
-#                for validator in validator_list:
-#                    if field.is_required or new_data.get(field.field_name, False) or hasattr(validator, 'always_test'):
-#                        try:
-#                            if hasattr(field, 'requires_data_list'):
-#                                validator(new_data.getlist(field.field_name), new_data)
-#                            else:
-#                                validator(new_data.get(field.field_name, ''), new_data)
-#                        except validators.ValidationError, e:
-#                            errors.setdefault(field.field_name, []).extend(e.messages)
-#            # If a CriticalValidationError is raised, ignore any other ValidationErrors
-#            # for this particular field
-#            except validators.CriticalValidationError, e:
-#                errors.setdefault(field.field_name, []).extend(e.messages)
-        return errors
-
-    def save(self, new_data):
-        "Saves the changes and returns the new object"
-        # changes is a dictionary-like object keyed by field_name
-        raise NotImplementedError
-
-    def do_html2python(self, new_data):
-        """
-        Convert the data from HTML data types to Python datatypes, changing the
-        object in place. This happens after validation but before storage. This
-        must happen after validation because html2python functions aren't
-        expected to deal with invalid input.
-        """
-        for field in self.fields:
-            field.convert_post_data(new_data)
-
-class FormWrapper(object):
-    """
-    A wrapper linking a Manipulator to the template system.
-    This allows dictionary-style lookups of formfields. It also handles feeding
-    prepopulated data and validation error messages to the formfield objects.
-    """
-    def __init__(self, manipulator, data, error_dict, edit_inline=True):
-        self.manipulator, self.data = manipulator, data
-        self.error_dict = error_dict
-        self._inline_collections = None
-        self.edit_inline = edit_inline
-
-    def __repr__(self):
-        return repr(self.__dict__)
-
-    def __getitem__(self, key):
-        for field in self.manipulator.fields:
-            if field.field_name == key:
-                data = field.extract_data(self.data)
-                return FormFieldWrapper(field, data, self.error_dict.get(field.field_name, []))
-        if self.edit_inline:
-            self.fill_inline_collections()
-            for inline_collection in self._inline_collections:
-                if inline_collection.name == key:
-                    return inline_collection
-        raise KeyError, "Could not find Formfield or InlineObjectCollection named %r" % key
-
-    def fill_inline_collections(self):
-        if not self._inline_collections:
-            ic = []
-            related_objects = self.manipulator.get_related_objects()
-            for rel_obj in related_objects:
-                data = rel_obj.extract_data(self.data)
-                inline_collection = InlineObjectCollection(self.manipulator, rel_obj, data, self.error_dict)
-                ic.append(inline_collection)
-            self._inline_collections = ic
-
-    def has_errors(self):
-        return self.error_dict != {}
-
-    def _get_fields(self):
-        try:
-            return self._fields
-        except AttributeError:
-            self._fields = [self.__getitem__(field.field_name) for field in self.manipulator.fields]
-            return self._fields
-
-    fields = property(_get_fields)
-
-class FormFieldWrapper(object):
-    "A bridge between the template system and an individual form field. Used by FormWrapper."
-    def __init__(self, formfield, data, error_list):
-        self.formfield, self.data, self.error_list = formfield, data, error_list
-        self.field_name = self.formfield.field_name # for convenience in templates
-
-    def __str__(self):
-        "Renders the field"
-        return str(self.formfield.render(self.data))
-
-    def __repr__(self):
-        return '<FormFieldWrapper for "%s">' % self.formfield.field_name
-
-    def field_list(self):
-        """
-        Like __str__(), but returns a list. Use this when the field's render()
-        method returns a list.
-        """
-        return self.formfield.render(self.data)
-
-    def errors(self):
-        return self.error_list
-
-    def html_error_list(self):
-        if self.errors():
-            return '<ul class="errorlist"><li>%s</li></ul>' % '</li><li>'.join([escape(e) for e in self.errors()])
-        else:
-            return ''
-
-    def get_id(self):
-        return self.formfield.get_id()
-
-class FormFieldCollection(FormFieldWrapper):
-    "A utility class that gives the template access to a dict of FormFieldWrappers"
-    def __init__(self, formfield_dict):
-        self.formfield_dict = formfield_dict
-
-    def __str__(self):
-        return str(self.formfield_dict)
-
-    def __getitem__(self, template_key):
-        "Look up field by template key; raise KeyError on failure"
-        return self.formfield_dict[template_key]
-
-    def __repr__(self):
-        return "<FormFieldCollection: %s>" % self.formfield_dict
-
-    def errors(self):
-        "Returns list of all errors in this collection's formfields"
-        errors = []
-        for field in self.formfield_dict.values():
-            if hasattr(field, 'errors'):
-                errors.extend(field.errors())
-        return errors
-
-    def has_errors(self):
-        return bool(len(self.errors()))
-
-    def html_combined_error_list(self):
-        return ''.join([field.html_error_list() for field in self.formfield_dict.values() if hasattr(field, 'errors')])
-
-class InlineObjectCollection(object):
-    "An object that acts like a sparse list of form field collections."
-    def __init__(self, parent_manipulator, rel_obj, data, errors):
-        self.parent_manipulator = parent_manipulator
-        self.rel_obj = rel_obj
-        self.data = data
-        self.errors = errors
-        self._collections = None
-        self.name = rel_obj.name
-
-    def __len__(self):
-        self.fill()
-        return self._collections.__len__()
-
-    def __getitem__(self, k):
-        self.fill()
-        return self._collections.__getitem__(k)
-
-    def __setitem__(self, k, v):
-        self.fill()
-        return self._collections.__setitem__(k,v)
-
-    def __delitem__(self, k):
-        self.fill()
-        return self._collections.__delitem__(k)
-
-    def __iter__(self):
-        self.fill()
-        return iter(self._collections.values())
-
-    def items(self):
-        self.fill()
-        return self._collections.items()
-
-    def fill(self):
-        if self._collections:
-            return
-        else:
-            var_name = self.rel_obj.opts.object_name.lower()
-            collections = {}
-            orig = None
-            if hasattr(self.parent_manipulator, 'original_object'):
-                orig = self.parent_manipulator.original_object
-            orig_list = self.rel_obj.get_list(orig)
-
-            for i, instance in enumerate(orig_list):
-                collection = {'original': instance}
-                for f in self.rel_obj.editable_fields():
-                    for field_name in f.get_manipulator_field_names(''):
-                        full_field_name = '%s.%d.%s' % (var_name, i, field_name)
-                        field = self.parent_manipulator[full_field_name]
-                        data = field.extract_data(self.data)
-                        errors = self.errors.get(full_field_name, [])
-                        collection[field_name] = FormFieldWrapper(field, data, errors)
-                collections[i] = FormFieldCollection(collection)
-            self._collections = collections
-
-
-class FormField(object):
-    """Abstract class representing a form field.
-
-    Classes that extend FormField should define the following attributes:
-        field_name
-            The field's name for use by programs.
-        validator_list
-            A list of validation tests (callback functions) that the data for
-            this field must pass in order to be added or changed.
-        is_required
-            A Boolean. Is it a required field?
-    Subclasses should also implement a render(data) method, which is responsible
-    for rending the form field in XHTML.
-    """
-    def __str__(self):
-        return self.render('')
-
-    def __repr__(self):
-        return 'FormField "%s"' % self.field_name
-
-    def prepare(self, new_data):
-        "Hook for doing something to new_data (in place) before validation."
-        pass
-
-    def html2python(data):
-        "Hook for converting an HTML datatype (e.g. 'on' for checkboxes) to a Python type"
-        return data
-    html2python = staticmethod(html2python)
-
-    def render(self, data):
-        raise NotImplementedError
-
-    def get_member_name(self):
-        if hasattr(self, 'member_name'):
-            return self.member_name
-        else:
-            return self.field_name
-
-    def extract_data(self, data_dict):
-        if hasattr(self, 'requires_data_list') and hasattr(data_dict, 'getlist'):
-            data = data_dict.getlist(self.get_member_name())
-        else:
-            data = data_dict.get(self.get_member_name(), None)
-        if data is None:
-            data = ''
-        return data
-
-    def convert_post_data(self, new_data):
-        name = self.get_member_name()
-        if new_data.has_key(self.field_name):
-            d = new_data.getlist(self.field_name)
-            try:
-                converted_data = [self.__class__.html2python(data) for data in d]
-            except ValueError:
-                converted_data = d
-            new_data.setlist(name, converted_data)
-        else:
-            try:
-                #individual fields deal with None values themselves
-                new_data.setlist(name, [self.__class__.html2python(None)])
-            except EmptyValue:
-                new_data.setlist(name, [])
-
-
-    def run_validator(self, new_data, validator):
-        if self.is_required or new_data.get(self.field_name, False) or hasattr(validator, 'always_test'):
-            if hasattr(self, 'requires_data_list'):
-                validator(new_data.getlist(self.field_name), new_data)
-            else:
-                validator(new_data.get(self.field_name, ''), new_data)
-
-    def get_validation_errors(self, new_data):
-        errors = {}
-        if self.is_required and not new_data.get(self.field_name, False):
-            errors.setdefault(self.field_name, []).append(gettext_lazy('This field is required.'))
-            return errors
-        try:
-            for validator in self.validator_list:
-                try:
-                    self.run_validator(new_data, validator)
-                except validators.ValidationError, e:
-                    errors.setdefault(self.field_name, []).extend(e.messages)
-        # If a CriticalValidationError is raised, ignore any other ValidationErrors
-        # for this particular field
-        except validators.CriticalValidationError, e:
-            errors.setdefault(self.field_name, []).extend(e.messages)
-        return errors
-
-    def get_id(self):
-        "Returns the HTML 'id' attribute for this form field."
-        return FORM_FIELD_ID_PREFIX + self.field_name
-
-####################
-# GENERIC WIDGETS  #
-####################
-
-class TextField(FormField):
-    input_type = "text"
-    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None, member_name=None):
-        if validator_list is None: validator_list = []
-        self.field_name = field_name
-        self.length, self.maxlength = length, maxlength
-        self.is_required = is_required
-        self.validator_list = [self.isValidLength, self.hasNoNewlines] + validator_list
-        if member_name != None:
-            self.member_name = member_name
-
-    def isValidLength(self, data, form):
-        if data and self.maxlength and len(data.decode(settings.DEFAULT_CHARSET)) > self.maxlength:
-            raise validators.ValidationError, ngettext("Ensure your text is less than %s character.",
-                "Ensure your text is less than %s characters.", self.maxlength) % self.maxlength
-
-    def hasNoNewlines(self, data, form):
-        if data and '\n' in data:
-            raise validators.ValidationError, gettext("Line breaks are not allowed here.")
-
-    def render(self, data):
-        if data is None:
-            data = ''
-        maxlength = ''
-        if self.maxlength:
-            maxlength = 'maxlength="%s" ' % self.maxlength
-        if isinstance(data, unicode):
-            data = data.encode(settings.DEFAULT_CHARSET)
-        return '<input type="%s" id="%s" class="v%s%s" name="%s" size="%s" value="%s" %s/>' % \
-            (self.input_type, self.get_id(), self.__class__.__name__, self.is_required and ' required' or '',
-            self.field_name, self.length, escape(data), maxlength)
-
-    def html2python(data):
-        return data
-    html2python = staticmethod(html2python)
-
-class PasswordField(TextField):
-    input_type = "password"
-
-class LargeTextField(TextField):
-    def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=None, maxlength=None):
-        if validator_list is None: validator_list = []
-        self.field_name = field_name
-        self.rows, self.cols, self.is_required = rows, cols, is_required
-        self.validator_list = validator_list[:]
-        if maxlength:
-            self.validator_list.append(self.isValidLength)
-            self.maxlength = maxlength
-
-    def render(self, data):
-        if data is None:
-            data = ''
-        if isinstance(data, unicode):
-            data = data.encode(settings.DEFAULT_CHARSET)
-        return '<textarea id="%s" class="v%s%s" name="%s" rows="%s" cols="%s">%s</textarea>' % \
-            (self.get_id(), self.__class__.__name__, self.is_required and ' required' or '',
-            self.field_name, self.rows, self.cols, escape(data))
-
-class HiddenField(FormField):
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        self.field_name, self.is_required = field_name, is_required
-        self.validator_list = validator_list[:]
-
-    def render(self, data):
-        return '<input type="hidden" id="%s" name="%s" value="%s" />' % \
-            (self.get_id(), self.field_name, escape(data))
-
-class CheckboxField(FormField):
-    def __init__(self, field_name, checked_by_default=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        self.field_name = field_name
-        self.checked_by_default = checked_by_default
-        self.is_required = False # because the validator looks for these
-        self.validator_list = validator_list[:]
-
-    def render(self, data):
-        checked_html = ''
-        if data or (data is '' and self.checked_by_default):
-            checked_html = ' checked="checked"'
-        return '<input type="checkbox" id="%s" class="v%s" name="%s"%s />' % \
-            (self.get_id(), self.__class__.__name__,
-            self.field_name, checked_html)
-
-    def html2python(data):
-        "Convert value from browser ('on' or '') to a Python boolean"
-        if data == 'on':
-            return True
-        return False
-    html2python = staticmethod(html2python)
-
-class SelectField(FormField):
-    def __init__(self, field_name, choices=None, size=1, is_required=False, validator_list=None, member_name=None):
-        if validator_list is None: validator_list = []
-        if choices is None: choices = []
-        self.field_name = field_name
-        # choices is a list of (value, human-readable key) tuples because order matters
-        self.choices, self.size, self.is_required = choices, size, is_required
-        self.validator_list = [self.isValidChoice] + validator_list
-        if member_name != None:
-            self.member_name = member_name
-
-    def render(self, data):
-        output = ['<select id="%s" class="v%s%s" name="%s" size="%s">' % \
-            (self.get_id(), self.__class__.__name__,
-             self.is_required and ' required' or '', self.field_name, self.size)]
-        str_data = str(data) # normalize to string
-        for value, display_name in self.choices:
-            selected_html = ''
-            if str(value) == str_data:
-                selected_html = ' selected="selected"'
-            output.append('    <option value="%s"%s>%s</option>' % (escape(value), selected_html, escape(display_name)))
-        output.append('  </select>')
-        return '\n'.join(output)
-
-    def isValidChoice(self, data, form):
-        str_data = str(data)
-        str_choices = [str(item[0]) for item in self.choices]
-        if str_data not in str_choices:
-            raise validators.ValidationError, gettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data': str_data, 'choices': str_choices}
-
-class NullSelectField(SelectField):
-    "This SelectField converts blank fields to None"
-    def html2python(data):
-        if not data:
-            return None
-        return data
-    html2python = staticmethod(html2python)
-
-class RadioSelectField(FormField):
-    def __init__(self, field_name, choices=None, ul_class='', is_required=False, validator_list=None, member_name=None):
-        if validator_list is None: validator_list = []
-        if choices is None: choices = []
-        self.field_name = field_name
-        # choices is a list of (value, human-readable key) tuples because order matters
-        self.choices, self.is_required = choices, is_required
-        self.validator_list = [self.isValidChoice] + validator_list
-        self.ul_class = ul_class
-        if member_name != None:
-            self.member_name = member_name
-
-    def render(self, data):
-        """
-        Returns a special object, RadioFieldRenderer, that is iterable *and*
-        has a default str() rendered output.
-
-        This allows for flexible use in templates. You can just use the default
-        rendering:
-
-            {{ field_name }}
-
-        ...which will output the radio buttons in an unordered list.
-        Or, you can manually traverse each radio option for special layout:
-
-            {% for option in field_name.field_list %}
-                {{ option.field }} {{ option.label }}<br />
-            {% endfor %}
-        """
-        class RadioFieldRenderer:
-            def __init__(self, datalist, ul_class):
-                self.datalist, self.ul_class = datalist, ul_class
-            def __str__(self):
-                "Default str() output for this radio field -- a <ul>"
-                output = ['<ul%s>' % (self.ul_class and ' class="%s"' % self.ul_class or '')]
-                output.extend(['<li>%s %s</li>' % (d['field'], d['label']) for d in self.datalist])
-                output.append('</ul>')
-                return ''.join(output)
-            def __iter__(self):
-                for d in self.datalist:
-                    yield d
-            def __len__(self):
-                return len(self.datalist)
-        datalist = []
-        str_data = str(data) # normalize to string
-        for i, (value, display_name) in enumerate(self.choices):
-            selected_html = ''
-            if str(value) == str_data:
-                selected_html = ' checked="checked"'
-            datalist.append({
-                'value': value,
-                'name': display_name,
-                'field': '<input type="radio" id="%s" name="%s" value="%s"%s/>' % \
-                    (self.get_id() + '_' + str(i), self.field_name, value, selected_html),
-                'label': '<label for="%s">%s</label>' % \
-                    (self.get_id() + '_' + str(i), display_name),
-            })
-        return RadioFieldRenderer(datalist, self.ul_class)
-
-    def isValidChoice(self, data, form):
-        str_data = str(data)
-        str_choices = [str(item[0]) for item in self.choices]
-        if str_data not in str_choices:
-            raise validators.ValidationError, gettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data':str_data, 'choices':str_choices}
-
-class NullBooleanField(SelectField):
-    "This SelectField provides 'Yes', 'No' and 'Unknown', mapping results to True, False or None"
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        SelectField.__init__(self, field_name, choices=[('1', 'Unknown'), ('2', 'Yes'), ('3', 'No')],
-            is_required=is_required, validator_list=validator_list)
-
-    def render(self, data):
-        if data is None: data = '1'
-        elif data == True: data = '2'
-        elif data == False: data = '3'
-        return SelectField.render(self, data)
-
-    def html2python(data):
-        return {None: None, '1': None, '2': True, '3': False}[data]
-    html2python = staticmethod(html2python)
-
-class SelectMultipleField(SelectField):
-    requires_data_list = True
-    def render(self, data):
-        output = ['<select id="%s" class="v%s%s" name="%s" size="%s" multiple="multiple">' % \
-            (self.get_id(), self.__class__.__name__, self.is_required and ' required' or '',
-            self.field_name, self.size)]
-        str_data_list = map(str, data) # normalize to strings
-        for value, choice in self.choices:
-            selected_html = ''
-            if str(value) in str_data_list:
-                selected_html = ' selected="selected"'
-            output.append('    <option value="%s"%s>%s</option>' % (escape(value), selected_html, escape(choice)))
-        output.append('  </select>')
-        return '\n'.join(output)
-
-    def isValidChoice(self, field_data, all_data):
-        # data is something like ['1', '2', '3']
-        str_choices = [str(item[0]) for item in self.choices]
-        for val in map(str, field_data):
-            if val not in str_choices:
-                raise validators.ValidationError, gettext("Select a valid choice; '%(data)s' is not in %(choices)s.") % {'data':val, 'choices':str_choices}
-
-    def html2python(data):
-        if data is None:
-            raise EmptyValue
-        return data
-    html2python = staticmethod(html2python)
-
-class CheckboxSelectMultipleField(SelectMultipleField):
-    """
-    This has an identical interface to SelectMultipleField, except the rendered
-    widget is different. Instead of a <select multiple>, this widget outputs a
-    <ul> of <input type="checkbox">es.
-
-    Of course, that results in multiple form elements for the same "single"
-    field, so this class's prepare() method flattens the split data elements
-    back into the single list that validators, renderers and save() expect.
-    """
-    requires_data_list = True
-    def __init__(self, field_name, choices=None, ul_class='', validator_list=None):
-        if validator_list is None: validator_list = []
-        if choices is None: choices = []
-        self.ul_class = ul_class
-        SelectMultipleField.__init__(self, field_name, choices, size=1, is_required=False, validator_list=validator_list)
-
-    def prepare(self, new_data):
-        # new_data has "split" this field into several fields, so flatten it
-        # back into a single list.
-        data_list = []
-        for value, readable_value in self.choices:
-            if new_data.get('%s%s' % (self.field_name, value), '') == 'on':
-                data_list.append(value)
-        new_data.setlist(self.field_name, data_list)
-
-    def render(self, data):
-        output = ['<ul%s>' % (self.ul_class and ' class="%s"' % self.ul_class or '')]
-        str_data_list = map(str, data) # normalize to strings
-        for value, choice in self.choices:
-            checked_html = ''
-            if str(value) in str_data_list:
-                checked_html = ' checked="checked"'
-            field_name = '%s%s' % (self.field_name, value)
-            output.append('<li><input type="checkbox" id="%s" class="v%s" name="%s"%s /> <label for="%s">%s</label></li>' % \
-                (self.get_id() + value , self.__class__.__name__, field_name, checked_html,
-                self.get_id() + value, choice))
-        output.append('</ul>')
-        return '\n'.join(output)
-
-####################
-# FILE UPLOADS     #
-####################
-
-class FileUploadField(FormField):
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        self.field_name, self.is_required = field_name, is_required
-        self.validator_list = [self.isNonEmptyFile] + validator_list
-
-    def isNonEmptyFile(self, field_data, all_data):
-        try:
-            content = field_data['content']
-        except TypeError:
-            raise validators.CriticalValidationError, gettext("No file was submitted. Check the encoding type on the form.")
-        if not content:
-            raise validators.CriticalValidationError, gettext("The submitted file is empty.")
-
-    def render(self, data):
-        return '<input type="file" id="%s" class="v%s" name="%s" />' % \
-            (self.get_id(), self.__class__.__name__, self.field_name)
-
-    def html2python(data):
-        if data is None:
-            raise EmptyValue
-        return data
-    html2python = staticmethod(html2python)
-
-class ImageUploadField(FileUploadField):
-    "A FileUploadField that raises CriticalValidationError if the uploaded file isn't an image."
-    def __init__(self, *args, **kwargs):
-        FileUploadField.__init__(self, *args, **kwargs)
-        self.validator_list.insert(0, self.isValidImage)
-
-    def isValidImage(self, field_data, all_data):
-        try:
-            validators.isValidImage(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-####################
-# INTEGERS/FLOATS  #
-####################
-
-class IntegerField(TextField):
-    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None, member_name=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isInteger] + validator_list
-        if member_name is not None:
-            self.member_name = member_name
-        TextField.__init__(self, field_name, length, maxlength, is_required, validator_list)
-
-    def isInteger(self, field_data, all_data):
-        try:
-            validators.isInteger(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-    def html2python(data):
-        if data == '' or data is None:
-            return None
-        return int(data)
-    html2python = staticmethod(html2python)
-
-class SmallIntegerField(IntegerField):
-    def __init__(self, field_name, length=5, maxlength=5, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isSmallInteger] + validator_list
-        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
-
-    def isSmallInteger(self, field_data, all_data):
-        if not -32768 <= int(field_data) <= 32767:
-            raise validators.CriticalValidationError, gettext("Enter a whole number between -32,768 and 32,767.")
-
-class PositiveIntegerField(IntegerField):
-    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isPositive] + validator_list
-        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
-
-    def isPositive(self, field_data, all_data):
-        if int(field_data) < 0:
-            raise validators.CriticalValidationError, gettext("Enter a positive number.")
-
-class PositiveSmallIntegerField(IntegerField):
-    def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isPositiveSmall] + validator_list
-        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)
-
-    def isPositiveSmall(self, field_data, all_data):
-        if not 0 <= int(field_data) <= 32767:
-            raise validators.CriticalValidationError, gettext("Enter a whole number between 0 and 32,767.")
-
-class FloatField(TextField):
-    def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        self.max_digits, self.decimal_places = max_digits, decimal_places
-        validator_list = [self.isValidFloat] + validator_list
-        TextField.__init__(self, field_name, max_digits+1, max_digits+1, is_required, validator_list)
-
-    def isValidFloat(self, field_data, all_data):
-        v = validators.IsValidFloat(self.max_digits, self.decimal_places)
-        try:
-            v(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-    def html2python(data):
-        if data == '' or data is None:
-            return None
-        return float(data)
-    html2python = staticmethod(html2python)
-
-####################
-# DATES AND TIMES  #
-####################
-
-class DatetimeField(TextField):
-    """A FormField that automatically converts its data to a datetime.datetime object.
-    The data should be in the format YYYY-MM-DD HH:MM:SS."""
-    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        self.field_name = field_name
-        self.length, self.maxlength = length, maxlength
-        self.is_required = is_required
-        self.validator_list = [validators.isValidANSIDatetime] + validator_list
-
-    def html2python(data):
-        "Converts the field into a datetime.datetime object"
-        import datetime
-        try:
-            date, time = data.split()
-            y, m, d = date.split('-')
-            timebits = time.split(':')
-            h, mn = timebits[:2]
-            if len(timebits) > 2:
-                s = int(timebits[2])
-            else:
-                s = 0
-            return datetime.datetime(int(y), int(m), int(d), int(h), int(mn), s)
-        except ValueError:
-            return None
-    html2python = staticmethod(html2python)
-
-class DateField(TextField):
-    """A FormField that automatically converts its data to a datetime.date object.
-    The data should be in the format YYYY-MM-DD."""
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidDate] + validator_list
-        TextField.__init__(self, field_name, length=10, maxlength=10,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidDate(self, field_data, all_data):
-        try:
-            validators.isValidANSIDate(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-    def html2python(data):
-        "Converts the field into a datetime.date object"
-        import time, datetime
-        try:
-            time_tuple = time.strptime(data, '%Y-%m-%d')
-            return datetime.date(*time_tuple[0:3])
-        except (ValueError, TypeError):
-            return None
-    html2python = staticmethod(html2python)
-
-class TimeField(TextField):
-    """A FormField that automatically converts its data to a datetime.time object.
-    The data should be in the format HH:MM:SS or HH:MM:SS.mmmmmm."""
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidTime] + validator_list
-        TextField.__init__(self, field_name, length=8, maxlength=8,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidTime(self, field_data, all_data):
-        try:
-            validators.isValidANSITime(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-    def html2python(data):
-        "Converts the field into a datetime.time object"
-        import time, datetime
-        try:
-            part_list = data.split('.')
-            try:
-                time_tuple = time.strptime(part_list[0], '%H:%M:%S')
-            except ValueError: # seconds weren't provided
-                time_tuple = time.strptime(part_list[0], '%H:%M')
-            t = datetime.time(*time_tuple[3:6])
-            if (len(part_list) == 2):
-                t = t.replace(microsecond=int(part_list[1]))
-            return t
-        except (ValueError, TypeError, AttributeError):
-            return None
-    html2python = staticmethod(html2python)
-
-####################
-# INTERNET-RELATED #
-####################
-
-class EmailField(TextField):
-    "A convenience FormField for validating e-mail addresses"
-    def __init__(self, field_name, length=50, maxlength=75, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidEmail] + validator_list
-        TextField.__init__(self, field_name, length, maxlength=maxlength,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidEmail(self, field_data, all_data):
-        try:
-            validators.isValidEmail(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-class URLField(TextField):
-    "A convenience FormField for validating URLs"
-    def __init__(self, field_name, length=50, maxlength=200, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidURL] + validator_list
-        TextField.__init__(self, field_name, length=length, maxlength=maxlength,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidURL(self, field_data, all_data):
-        try:
-            validators.isValidURL(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-class IPAddressField(TextField):
-    def __init__(self, field_name, length=15, maxlength=15, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidIPAddress] + validator_list
-        TextField.__init__(self, field_name, length=length, maxlength=maxlength,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidIPAddress(self, field_data, all_data):
-        try:
-            validators.isValidIPAddress4(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-    def html2python(data):
-        return data or None
-    html2python = staticmethod(html2python)
-
-####################
-# MISCELLANEOUS    #
-####################
-
-class FilePathField(SelectField):
-    "A SelectField whose choices are the files in a given directory."
-    def __init__(self, field_name, path, match=None, recursive=False, is_required=False, validator_list=None):
-        import os
-        from django.db.models import BLANK_CHOICE_DASH
-        if match is not None:
-            import re
-            match_re = re.compile(match)
-        choices = not is_required and BLANK_CHOICE_DASH[:] or []
-        if recursive:
-            for root, dirs, files in os.walk(path):
-                for f in files:
-                    if match is None or match_re.search(f):
-                        choices.append((os.path.join(root, f), f))
-        else:
-            try:
-                for f in os.listdir(path):
-                    full_file = os.path.join(path, f)
-                    if os.path.isfile(full_file) and (match is None or match_re.search(f)):
-                        choices.append((full_file, f))
-            except OSError:
-                pass
-        SelectField.__init__(self, field_name, choices, 1, is_required, validator_list)
-
-class PhoneNumberField(TextField):
-    "A convenience FormField for validating phone numbers (e.g. '630-555-1234')"
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidPhone] + validator_list
-        TextField.__init__(self, field_name, length=12, maxlength=12,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidPhone(self, field_data, all_data):
-        try:
-            validators.isValidPhone(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-class USStateField(TextField):
-    "A convenience FormField for validating U.S. states (e.g. 'IL')"
-    def __init__(self, field_name, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isValidUSState] + validator_list
-        TextField.__init__(self, field_name, length=2, maxlength=2,
-            is_required=is_required, validator_list=validator_list)
-
-    def isValidUSState(self, field_data, all_data):
-        try:
-            validators.isValidUSState(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-    def html2python(data):
-        if data:
-            return data.upper() # Should always be stored in upper case
-        else:
-            return None
-    html2python = staticmethod(html2python)
-
-class CommaSeparatedIntegerField(TextField):
-    "A convenience FormField for validating comma-separated integer fields"
-    def __init__(self, field_name, maxlength=None, is_required=False, validator_list=None):
-        if validator_list is None: validator_list = []
-        validator_list = [self.isCommaSeparatedIntegerList] + validator_list
-        TextField.__init__(self, field_name, length=20, maxlength=maxlength,
-            is_required=is_required, validator_list=validator_list)
-
-    def isCommaSeparatedIntegerList(self, field_data, all_data):
-        try:
-            validators.isCommaSeparatedIntegerList(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
-
-class RawIdAdminField(CommaSeparatedIntegerField):
-    def html2python(data):
-        return data.split(',')
-    html2python = staticmethod(html2python)
-
-class XMLLargeTextField(LargeTextField):
-    """
-    A LargeTextField with an XML validator. The schema_path argument is the
-    full path to a Relax NG compact schema to validate against.
-    """
-    def __init__(self, field_name, schema_path, **kwargs):
-        self.schema_path = schema_path
-        kwargs.setdefault('validator_list', []).insert(0, self.isValidXML)
-        LargeTextField.__init__(self, field_name, **kwargs)
-
-    def isValidXML(self, field_data, all_data):
-        v = validators.RelaxNGCompact(self.schema_path)
-        try:
-            v(field_data, all_data)
-        except validators.ValidationError, e:
-            raise validators.CriticalValidationError, e.messages
+from django.oldforms import *

Modified: vendor/django/current/django/http/__init__.py
===================================================================
--- vendor/django/current/django/http/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/http/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -38,7 +38,7 @@
 
     def get_full_path(self):
         return ''
-        
+
     def is_secure(self):
         return os.environ.get("HTTPS") == "on"
 
@@ -52,7 +52,7 @@
     POST = MultiValueDict()
     FILES = MultiValueDict()
     for submessage in msg.get_payload():
-        if isinstance(submessage, email.Message.Message):
+        if submessage and isinstance(submessage, email.Message.Message):
             name_dict = parse_header(submessage['Content-Disposition'])[1]
             # name_dict is something like {'name': 'file', 'filename': 'test.txt'} for file uploads
             # or {'name': 'blah'} for POST fields
@@ -160,11 +160,11 @@
         self._charset = settings.DEFAULT_CHARSET
         if not mimetype:
             mimetype = "%s; charset=%s" % (settings.DEFAULT_CONTENT_TYPE, settings.DEFAULT_CHARSET)
-        if hasattr(content, '__iter__'):
-            self._iterator = content
+        if not isinstance(content, basestring) and hasattr(content, '__iter__'):
+            self._container = content
             self._is_string = False
         else:
-            self._iterator = [content]
+            self._container = [content]
             self._is_string = True
         self.headers = {'Content-Type': mimetype}
         self.cookies = SimpleCookie()
@@ -203,39 +203,47 @@
             if val is not None:
                 self.cookies[key][var.replace('_', '-')] = val
 
-    def delete_cookie(self, key):
-        try:
-            self.cookies[key]['max_age'] = 0
-        except KeyError:
-            pass
+    def delete_cookie(self, key, path='/', domain=None):
+        self.cookies[key] = ''
+        if path is not None:
+            self.cookies[key]['path'] = path
+        if domain is not None:
+            self.cookies[key]['domain'] = domain
+        self.cookies[key]['expires'] = 0
+        self.cookies[key]['max-age'] = 0
 
     def _get_content(self):
-        content = ''.join(self._iterator)
+        content = ''.join(self._container)
         if isinstance(content, unicode):
             content = content.encode(self._charset)
         return content
 
     def _set_content(self, value):
-        self._iterator = [value]
+        self._container = [value]
         self._is_string = True
 
     content = property(_get_content, _set_content)
 
-    def _get_iterator(self):
-        "Output iterator. Converts data into client charset if necessary."
-        for chunk in self._iterator:
-            if isinstance(chunk, unicode):
-                chunk = chunk.encode(self._charset)
-            yield chunk
+    def __iter__(self):
+        self._iterator = self._container.__iter__()
+        return self
 
-    iterator = property(_get_iterator)
+    def next(self):
+        chunk = self._iterator.next()
+        if isinstance(chunk, unicode):
+            chunk = chunk.encode(self._charset)
+        return chunk
 
+    def close(self):
+        if hasattr(self._container, 'close'):
+            self._container.close()
+
     # The remaining methods partially implement the file-like object interface.
     # See http://docs.python.org/lib/bltin-file-objects.html
     def write(self, content):
         if not self._is_string:
             raise Exception, "This %s instance is not writable" % self.__class__
-        self._iterator.append(content)
+        self._container.append(content)
 
     def flush(self):
         pass
@@ -243,7 +251,7 @@
     def tell(self):
         if not self._is_string:
             raise Exception, "This %s instance cannot tell its position" % self.__class__
-        return sum([len(chunk) for chunk in self._iterator])
+        return sum([len(chunk) for chunk in self._container])
 
 class HttpResponseRedirect(HttpResponse):
     def __init__(self, redirect_to):

Modified: vendor/django/current/django/middleware/cache.py
===================================================================
--- vendor/django/current/django/middleware/cache.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/middleware/cache.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -41,6 +41,9 @@
 
     def process_request(self, request):
         "Checks whether the page is already cached and returns the cached version if available."
+        if self.cache_anonymous_only:
+            assert hasattr(request, 'user'), "The Django cache middleware with CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True requires authentication middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.auth.middleware.AuthenticationMiddleware' before the CacheMiddleware."
+
         if not request.method in ('GET', 'HEAD') or request.GET:
             request._cache_update_cache = False
             return None # Don't bother checking the cache.

Modified: vendor/django/current/django/middleware/common.py
===================================================================
--- vendor/django/current/django/middleware/common.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/middleware/common.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,6 +2,7 @@
 from django import http
 from django.core.mail import mail_managers
 import md5
+import re
 
 class CommonMiddleware(object):
     """
@@ -61,11 +62,12 @@
                 # send a note to the managers.
                 domain = http.get_host(request)
                 referer = request.META.get('HTTP_REFERER', None)
-                is_internal = referer and (domain in referer)
+                is_internal = _is_internal_request(domain, referer)
                 path = request.get_full_path()
                 if referer and not _is_ignorable_404(path) and (is_internal or '?' not in referer):
+                    ua = request.META.get('HTTP_USER_AGENT', '<none>')
                     mail_managers("Broken %slink on %s" % ((is_internal and 'INTERNAL ' or ''), domain),
-                        "Referrer: %s\nRequested URL: %s\n" % (referer, request.get_full_path()))
+                        "Referrer: %s\nRequested URL: %s\nUser agent: %s\n" % (referer, request.get_full_path(), ua))
                 return response
 
         # Use ETags, if requested.
@@ -87,3 +89,8 @@
         if uri.endswith(end):
             return True
     return False
+
+def _is_internal_request(domain, referer):
+    "Return true if the referring URL is the same domain as the current request"
+    # Different subdomains are treated as different domains.
+    return referer is not None and re.match("^https?://%s/" % re.escape(domain), referer)

Modified: vendor/django/current/django/middleware/doc.py
===================================================================
--- vendor/django/current/django/middleware/doc.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/middleware/doc.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,11 +7,12 @@
     """
     def process_view(self, request, view_func, view_args, view_kwargs):
         """
-        If the request method is HEAD and the IP is internal, quickly return
-        with an x-header indicating the view function.  This is used by the
-        documentation module to lookup the view function for an arbitrary page.
+        If the request method is HEAD and either the IP is internal or the
+        user is a logged-in staff member, quickly return with an x-header
+        indicating the view function.  This is used by the documentation module
+        to lookup the view function for an arbitrary page.
         """
-        if request.method == 'HEAD' and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
+        if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or (request.user.is_authenticated() and request.user.is_staff)):
             response = http.HttpResponse()
             response['X-View'] = "%s.%s" % (view_func.__module__, view_func.__name__)
             return response

Modified: vendor/django/current/django/middleware/gzip.py
===================================================================
--- vendor/django/current/django/middleware/gzip.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/middleware/gzip.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -12,7 +12,11 @@
     """
     def process_response(self, request, response):
         patch_vary_headers(response, ('Accept-Encoding',))
-        if response.has_header('Content-Encoding'):
+        
+        # Avoid gzipping if we've already got a content-encoding or if the
+        # content-type is Javascript (silly IE...)
+        is_js = "javascript" in response.headers.get('Content-Type', '').lower()
+        if response.has_header('Content-Encoding') or is_js:
             return response
 
         ae = request.META.get('HTTP_ACCEPT_ENCODING', '')
@@ -21,4 +25,5 @@
 
         response.content = compress_string(response.content)
         response['Content-Encoding'] = 'gzip'
+        response['Content-Length'] = str(len(response.content))
         return response

Modified: vendor/django/current/django/middleware/http.py
===================================================================
--- vendor/django/current/django/middleware/http.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/middleware/http.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -35,3 +35,27 @@
             response.content = ''
 
         return response
+
+class SetRemoteAddrFromForwardedFor(object):
+    """
+    Middleware that sets REMOTE_ADDR based on HTTP_X_FORWARDED_FOR, if the
+    latter is set. This is useful if you're sitting behind a reverse proxy that
+    causes each request's REMOTE_ADDR to be set to 127.0.0.1.
+
+    Note that this does NOT validate HTTP_X_FORWARDED_FOR. If you're not behind
+    a reverse proxy that sets HTTP_X_FORWARDED_FOR automatically, do not use
+    this middleware. Anybody can spoof the value of HTTP_X_FORWARDED_FOR, and
+    because this sets REMOTE_ADDR based on HTTP_X_FORWARDED_FOR, that means
+    anybody can "fake" their IP address. Only use this when you can absolutely
+    trust the value of HTTP_X_FORWARDED_FOR.
+    """
+    def process_request(self, request):
+        try:
+            real_ip = request.META['HTTP_X_FORWARDED_FOR']
+        except KeyError:
+            return None
+        else:
+            # HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
+            # Take just the first one.
+            real_ip = real_ip.split(",")[0]
+            request.META['REMOTE_ADDR'] = real_ip

Added: vendor/django/current/django/newforms/__init__.py
===================================================================
--- vendor/django/current/django/newforms/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,17 @@
+"""
+Django validation and HTML form handling.
+
+TODO:
+    Default value for field
+    Field labels
+    Nestable Forms
+    FatalValidationError -- short-circuits all other validators on a form
+    ValidationWarning
+    "This form field requires foo.js" and form.js_includes()
+"""
+
+from util import ValidationError
+from widgets import *
+from fields import *
+from forms import *
+from models import *

Added: vendor/django/current/django/newforms/extras/__init__.py
===================================================================
--- vendor/django/current/django/newforms/extras/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/extras/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1 @@
+from widgets import *

Added: vendor/django/current/django/newforms/extras/widgets.py
===================================================================
--- vendor/django/current/django/newforms/extras/widgets.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/extras/widgets.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,59 @@
+"""
+Extra HTML Widget classes
+"""
+
+from django.newforms.widgets import Widget, Select
+from django.utils.dates import MONTHS
+import datetime
+
+__all__ = ('SelectDateWidget',)
+
+class SelectDateWidget(Widget):
+    """
+    A Widget that splits date input into three <select> boxes.
+
+    This also serves as an example of a Widget that has more than one HTML
+    element and hence implements value_from_datadict.
+    """
+    month_field = '%s_month'
+    day_field = '%s_day'
+    year_field = '%s_year'
+
+    def __init__(self, attrs=None, years=None):
+        # years is an optional list/tuple of years to use in the "year" select box.
+        self.attrs = attrs or {}
+        if years:
+            self.years = years
+        else:
+            this_year = datetime.date.today().year
+            self.years = range(this_year, this_year+10)
+
+    def render(self, name, value, attrs=None):
+        try:
+            value = datetime.date(*map(int, value.split('-')))
+            year_val, month_val, day_val = value.year, value.month, value.day
+        except (AttributeError, TypeError, ValueError):
+            year_val = month_val = day_val = None
+
+        output = []
+
+        month_choices = MONTHS.items()
+        month_choices.sort()
+        select_html = Select(choices=month_choices).render(self.month_field % name, month_val)
+        output.append(select_html)
+
+        day_choices = [(i, i) for i in range(1, 32)]
+        select_html = Select(choices=day_choices).render(self.day_field % name, day_val)
+        output.append(select_html)
+
+        year_choices = [(i, i) for i in self.years]
+        select_html = Select(choices=year_choices).render(self.year_field % name, year_val)
+        output.append(select_html)
+
+        return u'\n'.join(output)
+
+    def value_from_datadict(self, data, name):
+        y, m, d = data.get(self.year_field % name), data.get(self.month_field % name), data.get(self.day_field % name)
+        if y and m and d:
+            return '%s-%s-%s' % (y, m, d)
+        return None

Added: vendor/django/current/django/newforms/fields.py
===================================================================
--- vendor/django/current/django/newforms/fields.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/fields.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,492 @@
+"""
+Field classes
+"""
+
+from django.utils.translation import gettext
+from util import ErrorList, ValidationError, smart_unicode
+from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple
+import datetime
+import re
+import time
+
+__all__ = (
+    'Field', 'CharField', 'IntegerField',
+    'DEFAULT_DATE_INPUT_FORMATS', 'DateField',
+    'DEFAULT_TIME_INPUT_FORMATS', 'TimeField',
+    'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField',
+    'RegexField', 'EmailField', 'URLField', 'BooleanField',
+    'ChoiceField', 'NullBooleanField', 'MultipleChoiceField',
+    'ComboField', 'MultiValueField',
+    'SplitDateTimeField',
+)
+
+# These values, if given to to_python(), will trigger the self.required check.
+EMPTY_VALUES = (None, '')
+
+try:
+    set # Only available in Python 2.4+
+except NameError:
+    from sets import Set as set # Python 2.3 fallback
+
+class Field(object):
+    widget = TextInput # Default widget to use when rendering this type of Field.
+    hidden_widget = HiddenInput # Default widget to use when rendering this as "hidden".
+
+    # Tracks each time a Field instance is created. Used to retain order.
+    creation_counter = 0
+
+    def __init__(self, required=True, widget=None, label=None, initial=None, help_text=None):
+        # required -- Boolean that specifies whether the field is required.
+        #             True by default.
+        # widget -- A Widget class, or instance of a Widget class, that should be
+        #         used for this Field when displaying it. Each Field has a default
+        #         Widget that it'll use if you don't specify this. In most cases,
+        #         the default widget is TextInput.
+        # label -- A verbose name for this field, for use in displaying this field in
+        #         a form. By default, Django will use a "pretty" version of the form
+        #         field name, if the Field is part of a Form.
+        # initial -- A value to use in this Field's initial display. This value is
+        #            *not* used as a fallback if data isn't given.
+        # help_text -- An optional string to use as "help text" for this Field.
+        if label is not None:
+            label = smart_unicode(label)
+        self.required, self.label, self.initial = required, label, initial
+        self.help_text = smart_unicode(help_text or '')
+        widget = widget or self.widget
+        if isinstance(widget, type):
+            widget = widget()
+
+        # Hook into self.widget_attrs() for any Field-specific HTML attributes.
+        extra_attrs = self.widget_attrs(widget)
+        if extra_attrs:
+            widget.attrs.update(extra_attrs)
+
+        self.widget = widget
+
+        # Increase the creation counter, and save our local copy.
+        self.creation_counter = Field.creation_counter
+        Field.creation_counter += 1
+
+    def clean(self, value):
+        """
+        Validates the given value and returns its "cleaned" value as an
+        appropriate Python object.
+
+        Raises ValidationError for any errors.
+        """
+        if self.required and value in EMPTY_VALUES:
+            raise ValidationError(gettext(u'This field is required.'))
+        return value
+
+    def widget_attrs(self, widget):
+        """
+        Given a Widget instance (*not* a Widget class), returns a dictionary of
+        any HTML attributes that should be added to the Widget, based on this
+        Field.
+        """
+        return {}
+
+class CharField(Field):
+    def __init__(self, max_length=None, min_length=None, *args, **kwargs):
+        self.max_length, self.min_length = max_length, min_length
+        super(CharField, self).__init__(*args, **kwargs)
+
+    def clean(self, value):
+        "Validates max_length and min_length. Returns a Unicode object."
+        super(CharField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+        value = smart_unicode(value)
+        if self.max_length is not None and len(value) > self.max_length:
+            raise ValidationError(gettext(u'Ensure this value has at most %d characters.') % self.max_length)
+        if self.min_length is not None and len(value) < self.min_length:
+            raise ValidationError(gettext(u'Ensure this value has at least %d characters.') % self.min_length)
+        return value
+
+    def widget_attrs(self, widget):
+        if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)):
+            return {'maxlength': str(self.max_length)}
+
+class IntegerField(Field):
+    def __init__(self, max_value=None, min_value=None, *args, **kwargs):
+        self.max_value, self.min_value = max_value, min_value
+        super(IntegerField, self).__init__(*args, **kwargs)
+
+    def clean(self, value):
+        """
+        Validates that int() can be called on the input. Returns the result
+        of int(). Returns None for empty values.
+        """
+        super(IntegerField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return None
+        try:
+            value = int(value)
+        except (ValueError, TypeError):
+            raise ValidationError(gettext(u'Enter a whole number.'))
+        if self.max_value is not None and value > self.max_value:
+            raise ValidationError(gettext(u'Ensure this value is less than or equal to %s.') % self.max_value)
+        if self.min_value is not None and value < self.min_value:
+            raise ValidationError(gettext(u'Ensure this value is greater than or equal to %s.') % self.min_value)
+        return value
+
+DEFAULT_DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
+    '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
+    '%d %b %Y', '%d %b, %Y',            # '25 Oct 2006', '25 Oct, 2006'
+    '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
+    '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
+)
+
+class DateField(Field):
+    def __init__(self, input_formats=None, *args, **kwargs):
+        super(DateField, self).__init__(*args, **kwargs)
+        self.input_formats = input_formats or DEFAULT_DATE_INPUT_FORMATS
+
+    def clean(self, value):
+        """
+        Validates that the input can be converted to a date. Returns a Python
+        datetime.date object.
+        """
+        super(DateField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return None
+        if isinstance(value, datetime.datetime):
+            return value.date()
+        if isinstance(value, datetime.date):
+            return value
+        for format in self.input_formats:
+            try:
+                return datetime.date(*time.strptime(value, format)[:3])
+            except ValueError:
+                continue
+        raise ValidationError(gettext(u'Enter a valid date.'))
+
+DEFAULT_TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+
+class TimeField(Field):
+    def __init__(self, input_formats=None, *args, **kwargs):
+        super(TimeField, self).__init__(*args, **kwargs)
+        self.input_formats = input_formats or DEFAULT_TIME_INPUT_FORMATS
+
+    def clean(self, value):
+        """
+        Validates that the input can be converted to a time. Returns a Python
+        datetime.time object.
+        """
+        super(TimeField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return None
+        if isinstance(value, datetime.time):
+            return value
+        for format in self.input_formats:
+            try:
+                return datetime.time(*time.strptime(value, format)[3:6])
+            except ValueError:
+                continue
+        raise ValidationError(gettext(u'Enter a valid time.'))
+
+DEFAULT_DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
+    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
+    '%m/%d/%Y',              # '10/25/2006'
+    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
+    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    '%m/%d/%y',              # '10/25/06'
+)
+
+class DateTimeField(Field):
+    def __init__(self, input_formats=None, *args, **kwargs):
+        super(DateTimeField, self).__init__(*args, **kwargs)
+        self.input_formats = input_formats or DEFAULT_DATETIME_INPUT_FORMATS
+
+    def clean(self, value):
+        """
+        Validates that the input can be converted to a datetime. Returns a
+        Python datetime.datetime object.
+        """
+        super(DateTimeField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return None
+        if isinstance(value, datetime.datetime):
+            return value
+        if isinstance(value, datetime.date):
+            return datetime.datetime(value.year, value.month, value.day)
+        for format in self.input_formats:
+            try:
+                return datetime.datetime(*time.strptime(value, format)[:6])
+            except ValueError:
+                continue
+        raise ValidationError(gettext(u'Enter a valid date/time.'))
+
+class RegexField(Field):
+    def __init__(self, regex, max_length=None, min_length=None, error_message=None, *args, **kwargs):
+        """
+        regex can be either a string or a compiled regular expression object.
+        error_message is an optional error message to use, if
+        'Enter a valid value' is too generic for you.
+        """
+        super(RegexField, self).__init__(*args, **kwargs)
+        if isinstance(regex, basestring):
+            regex = re.compile(regex)
+        self.regex = regex
+        self.max_length, self.min_length = max_length, min_length
+        self.error_message = error_message or gettext(u'Enter a valid value.')
+
+    def clean(self, value):
+        """
+        Validates that the input matches the regular expression. Returns a
+        Unicode object.
+        """
+        super(RegexField, self).clean(value)
+        if value in EMPTY_VALUES:
+            value = u''
+        value = smart_unicode(value)
+        if value == u'':
+            return value
+        if self.max_length is not None and len(value) > self.max_length:
+            raise ValidationError(gettext(u'Ensure this value has at most %d characters.') % self.max_length)
+        if self.min_length is not None and len(value) < self.min_length:
+            raise ValidationError(gettext(u'Ensure this value has at least %d characters.') % self.min_length)
+        if not self.regex.search(value):
+            raise ValidationError(self.error_message)
+        return value
+
+email_re = re.compile(
+    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"  # dot-atom
+    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
+    r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$', re.IGNORECASE)  # domain
+
+class EmailField(RegexField):
+    def __init__(self, max_length=None, min_length=None, *args, **kwargs):
+        RegexField.__init__(self, email_re, max_length, min_length,
+            gettext(u'Enter a valid e-mail address.'), *args, **kwargs)
+
+url_re = re.compile(
+    r'^https?://' # http:// or https://
+    r'(?:[A-Z0-9-]+\.)+[A-Z]{2,6}' # domain
+    r'(?::\d+)?' # optional port
+    r'(?:/?|/\S+)$', re.IGNORECASE)
+
+try:
+    from django.conf import settings
+    URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT
+except ImportError:
+    # It's OK if Django settings aren't configured.
+    URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
+
+class URLField(RegexField):
+    def __init__(self, max_length=None, min_length=None, verify_exists=False,
+            validator_user_agent=URL_VALIDATOR_USER_AGENT, *args, **kwargs):
+        super(URLField, self).__init__(url_re, max_length, min_length, gettext(u'Enter a valid URL.'), *args, **kwargs)
+        self.verify_exists = verify_exists
+        self.user_agent = validator_user_agent
+
+    def clean(self, value):
+        value = super(URLField, self).clean(value)
+        if value == u'':
+            return value
+        if self.verify_exists:
+            import urllib2
+            from django.conf import settings
+            headers = {
+                "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
+                "Accept-Language": "en-us,en;q=0.5",
+                "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
+                "Connection": "close",
+                "User-Agent": self.user_agent,
+            }
+            try:
+                req = urllib2.Request(value, None, headers)
+                u = urllib2.urlopen(req)
+            except ValueError:
+                raise ValidationError(gettext(u'Enter a valid URL.'))
+            except: # urllib2.URLError, httplib.InvalidURL, etc.
+                raise ValidationError(gettext(u'This URL appears to be a broken link.'))
+        return value
+
+class BooleanField(Field):
+    widget = CheckboxInput
+
+    def clean(self, value):
+        "Returns a Python boolean object."
+        super(BooleanField, self).clean(value)
+        return bool(value)
+
+class NullBooleanField(BooleanField):
+    """
+    A field whose valid values are None, True and False. Invalid values are
+    cleaned to None.
+    """
+    widget = NullBooleanSelect
+
+    def clean(self, value):
+        return {True: True, False: False}.get(value, None)
+
+class ChoiceField(Field):
+    def __init__(self, choices=(), required=True, widget=Select, label=None, initial=None, help_text=None):
+        super(ChoiceField, self).__init__(required, widget, label, initial, help_text)
+        self.choices = choices
+
+    def _get_choices(self):
+        return self._choices
+
+    def _set_choices(self, value):
+        # Setting choices also sets the choices on the widget.
+        # choices can be any iterable, but we call list() on it because
+        # it will be consumed more than once.
+        self._choices = self.widget.choices = list(value)
+
+    choices = property(_get_choices, _set_choices)
+
+    def clean(self, value):
+        """
+        Validates that the input is in self.choices.
+        """
+        value = super(ChoiceField, self).clean(value)
+        if value in EMPTY_VALUES:
+            value = u''
+        value = smart_unicode(value)
+        if value == u'':
+            return value
+        valid_values = set([str(k) for k, v in self.choices])
+        if value not in valid_values:
+            raise ValidationError(gettext(u'Select a valid choice. That choice is not one of the available choices.'))
+        return value
+
+class MultipleChoiceField(ChoiceField):
+    hidden_widget = MultipleHiddenInput
+
+    def __init__(self, choices=(), required=True, widget=SelectMultiple, label=None, initial=None, help_text=None):
+        super(MultipleChoiceField, self).__init__(choices, required, widget, label, initial, help_text)
+
+    def clean(self, value):
+        """
+        Validates that the input is a list or tuple.
+        """
+        if self.required and not value:
+            raise ValidationError(gettext(u'This field is required.'))
+        elif not self.required and not value:
+            return []
+        if not isinstance(value, (list, tuple)):
+            raise ValidationError(gettext(u'Enter a list of values.'))
+        new_value = []
+        for val in value:
+            val = smart_unicode(val)
+            new_value.append(val)
+        # Validate that each value in the value list is in self.choices.
+        valid_values = set([smart_unicode(k) for k, v in self.choices])
+        for val in new_value:
+            if val not in valid_values:
+                raise ValidationError(gettext(u'Select a valid choice. %s is not one of the available choices.') % val)
+        return new_value
+
+class ComboField(Field):
+    """
+    A Field whose clean() method calls multiple Field clean() methods.
+    """
+    def __init__(self, fields=(), *args, **kwargs):
+        super(ComboField, self).__init__(*args, **kwargs)
+        # Set 'required' to False on the individual fields, because the
+        # required validation will be handled by ComboField, not by those
+        # individual fields.
+        for f in fields:
+            f.required = False
+        self.fields = fields
+
+    def clean(self, value):
+        """
+        Validates the given value against all of self.fields, which is a
+        list of Field instances.
+        """
+        super(ComboField, self).clean(value)
+        for field in self.fields:
+            value = field.clean(value)
+        return value
+
+class MultiValueField(Field):
+    """
+    A Field that is composed of multiple Fields.
+
+    Its clean() method takes a "decompressed" list of values. Each value in
+    this list is cleaned by the corresponding field -- the first value is
+    cleaned by the first field, the second value is cleaned by the second
+    field, etc. Once all fields are cleaned, the list of clean values is
+    "compressed" into a single value.
+
+    Subclasses should implement compress(), which specifies how a list of
+    valid values should be converted to a single value. Subclasses should not
+    have to implement clean().
+
+    You'll probably want to use this with MultiWidget.
+    """
+    def __init__(self, fields=(), *args, **kwargs):
+        super(MultiValueField, self).__init__(*args, **kwargs)
+        # Set 'required' to False on the individual fields, because the
+        # required validation will be handled by MultiValueField, not by those
+        # individual fields.
+        for f in fields:
+            f.required = False
+        self.fields = fields
+
+    def clean(self, value):
+        """
+        Validates every value in the given list. A value is validated against
+        the corresponding Field in self.fields.
+
+        For example, if this MultiValueField was instantiated with
+        fields=(DateField(), TimeField()), clean() would call
+        DateField.clean(value[0]) and TimeField.clean(value[1]).
+        """
+        clean_data = []
+        errors = ErrorList()
+        if self.required and not value:
+            raise ValidationError(gettext(u'This field is required.'))
+        elif not self.required and not value:
+            return self.compress([])
+        if not isinstance(value, (list, tuple)):
+            raise ValidationError(gettext(u'Enter a list of values.'))
+        for i, field in enumerate(self.fields):
+            try:
+                field_value = value[i]
+            except KeyError:
+                field_value = None
+            if self.required and field_value in EMPTY_VALUES:
+                raise ValidationError(gettext(u'This field is required.'))
+            try:
+                clean_data.append(field.clean(field_value))
+            except ValidationError, e:
+                # Collect all validation errors in a single list, which we'll
+                # raise at the end of clean(), rather than raising a single
+                # exception for the first error we encounter.
+                errors.extend(e.messages)
+        if errors:
+            raise ValidationError(errors)
+        return self.compress(clean_data)
+
+    def compress(self, data_list):
+        """
+        Returns a single value for the given list of values. The values can be
+        assumed to be valid.
+
+        For example, if this MultiValueField was instantiated with
+        fields=(DateField(), TimeField()), this might return a datetime
+        object created by combining the date and time in data_list.
+        """
+        raise NotImplementedError('Subclasses must implement this method.')
+
+class SplitDateTimeField(MultiValueField):
+    def __init__(self, *args, **kwargs):
+        fields = (DateField(), TimeField())
+        super(SplitDateTimeField, self).__init__(fields, *args, **kwargs)
+
+    def compress(self, data_list):
+        if data_list:
+            return datetime.datetime.combine(*data_list)
+        return None

Added: vendor/django/current/django/newforms/forms.py
===================================================================
--- vendor/django/current/django/newforms/forms.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/forms.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,309 @@
+"""
+Form classes
+"""
+
+from django.utils.datastructures import SortedDict, MultiValueDict
+from django.utils.html import escape
+from fields import Field
+from widgets import TextInput, Textarea, HiddenInput, MultipleHiddenInput
+from util import flatatt, StrAndUnicode, ErrorDict, ErrorList, ValidationError
+import copy
+
+__all__ = ('BaseForm', 'Form')
+
+NON_FIELD_ERRORS = '__all__'
+
+def pretty_name(name):
+    "Converts 'first_name' to 'First name'"
+    name = name[0].upper() + name[1:]
+    return name.replace('_', ' ')
+
+class SortedDictFromList(SortedDict):
+    "A dictionary that keeps its keys in the order in which they're inserted."
+    # This is different than django.utils.datastructures.SortedDict, because
+    # this takes a list/tuple as the argument to __init__().
+    def __init__(self, data=None):
+        if data is None: data = []
+        self.keyOrder = [d[0] for d in data]
+        dict.__init__(self, dict(data))
+
+    def copy(self):
+        return SortedDictFromList([(k, copy.copy(v)) for k, v in self.items()])
+
+class DeclarativeFieldsMetaclass(type):
+    """
+    Metaclass that converts Field attributes to a dictionary called
+    'base_fields', taking into account parent class 'base_fields' as well.
+    """
+    def __new__(cls, name, bases, attrs):
+        fields = [(field_name, attrs.pop(field_name)) for field_name, obj in attrs.items() if isinstance(obj, Field)]
+        fields.sort(lambda x, y: cmp(x[1].creation_counter, y[1].creation_counter))
+
+        # If this class is subclassing another Form, add that Form's fields.
+        # Note that we loop over the bases in *reverse*. This is necessary in
+        # order to preserve the correct order of fields.
+        for base in bases[::-1]:
+            if hasattr(base, 'base_fields'):
+                fields = base.base_fields.items() + fields
+
+        attrs['base_fields'] = SortedDictFromList(fields)
+        return type.__new__(cls, name, bases, attrs)
+
+class BaseForm(StrAndUnicode):
+    # This is the main implementation of all the Form logic. Note that this
+    # class is different than Form. See the comments by the Form class for more
+    # information. Any improvements to the form API should be made to *this*
+    # class, not to the Form class.
+    def __init__(self, data=None, auto_id='id_%s', prefix=None, initial=None):
+        self.is_bound = data is not None
+        self.data = data or {}
+        self.auto_id = auto_id
+        self.prefix = prefix
+        self.initial = initial or {}
+        self.__errors = None # Stores the errors after clean() has been called.
+
+        # The base_fields class attribute is the *class-wide* definition of
+        # fields. Because a particular *instance* of the class might want to
+        # alter self.fields, we create self.fields here by copying base_fields.
+        # Instances should always modify self.fields; they should not modify
+        # self.base_fields.
+        self.fields = self.base_fields.copy()
+
+    def __unicode__(self):
+        return self.as_table()
+
+    def __iter__(self):
+        for name, field in self.fields.items():
+            yield BoundField(self, field, name)
+
+    def __getitem__(self, name):
+        "Returns a BoundField with the given name."
+        try:
+            field = self.fields[name]
+        except KeyError:
+            raise KeyError('Key %r not found in Form' % name)
+        return BoundField(self, field, name)
+
+    def _errors(self):
+        "Returns an ErrorDict for self.data"
+        if self.__errors is None:
+            self.full_clean()
+        return self.__errors
+    errors = property(_errors)
+
+    def is_valid(self):
+        """
+        Returns True if the form has no errors. Otherwise, False. If errors are
+        being ignored, returns False.
+        """
+        return self.is_bound and not bool(self.errors)
+
+    def add_prefix(self, field_name):
+        """
+        Returns the field name with a prefix appended, if this Form has a
+        prefix set.
+
+        Subclasses may wish to override.
+        """
+        return self.prefix and ('%s-%s' % (self.prefix, field_name)) or field_name
+
+    def _html_output(self, normal_row, error_row, row_ender, help_text_html, errors_on_separate_row):
+        "Helper function for outputting HTML. Used by as_table(), as_ul(), as_p()."
+        top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
+        output, hidden_fields = [], []
+        for name, field in self.fields.items():
+            bf = BoundField(self, field, name)
+            bf_errors = ErrorList([escape(error) for error in bf.errors]) # Escape and cache in local variable.
+            if bf.is_hidden:
+                if bf_errors:
+                    top_errors.extend(['(Hidden field %s) %s' % (name, e) for e in bf_errors])
+                hidden_fields.append(unicode(bf))
+            else:
+                if errors_on_separate_row and bf_errors:
+                    output.append(error_row % bf_errors)
+                label = bf.label and bf.label_tag(escape(bf.label + ':')) or ''
+                if field.help_text:
+                    help_text = help_text_html % field.help_text
+                else:
+                    help_text = u''
+                output.append(normal_row % {'errors': bf_errors, 'label': label, 'field': unicode(bf), 'help_text': help_text})
+        if top_errors:
+            output.insert(0, error_row % top_errors)
+        if hidden_fields: # Insert any hidden fields in the last row.
+            str_hidden = u''.join(hidden_fields)
+            if output:
+                last_row = output[-1]
+                # Chop off the trailing row_ender (e.g. '</td></tr>') and insert the hidden fields.
+                output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
+            else: # If there aren't any rows in the output, just append the hidden fields.
+                output.append(str_hidden)
+        return u'\n'.join(output)
+
+    def as_table(self):
+        "Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
+        return self._html_output(u'<tr><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>', u'<tr><td colspan="2">%s</td></tr>', '</td></tr>', u'<br />%s', False)
+
+    def as_ul(self):
+        "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."
+        return self._html_output(u'<li>%(errors)s%(label)s %(field)s%(help_text)s</li>', u'<li>%s</li>', '</li>', u' %s', False)
+
+    def as_p(self):
+        "Returns this form rendered as HTML <p>s."
+        return self._html_output(u'<p>%(label)s %(field)s%(help_text)s</p>', u'<p>%s</p>', '</p>', u' %s', True)
+
+    def non_field_errors(self):
+        """
+        Returns an ErrorList of errors that aren't associated with a particular
+        field -- i.e., from Form.clean(). Returns an empty ErrorList if there
+        are none.
+        """
+        return self.errors.get(NON_FIELD_ERRORS, ErrorList())
+
+    def full_clean(self):
+        """
+        Cleans all of self.data and populates self.__errors and self.clean_data.
+        """
+        errors = ErrorDict()
+        if not self.is_bound: # Stop further processing.
+            self.__errors = errors
+            return
+        self.clean_data = {}
+        for name, field in self.fields.items():
+            # value_from_datadict() gets the data from the dictionary.
+            # Each widget type knows how to retrieve its own data, because some
+            # widgets split data over several HTML fields.
+            value = field.widget.value_from_datadict(self.data, self.add_prefix(name))
+            try:
+                value = field.clean(value)
+                self.clean_data[name] = value
+                if hasattr(self, 'clean_%s' % name):
+                    value = getattr(self, 'clean_%s' % name)()
+                self.clean_data[name] = value
+            except ValidationError, e:
+                errors[name] = e.messages
+        try:
+            self.clean_data = self.clean()
+        except ValidationError, e:
+            errors[NON_FIELD_ERRORS] = e.messages
+        if errors:
+            delattr(self, 'clean_data')
+        self.__errors = errors
+
+    def clean(self):
+        """
+        Hook for doing any extra form-wide cleaning after Field.clean() been
+        called on every field. Any ValidationError raised by this method will
+        not be associated with a particular field; it will have a special-case
+        association with the field named '__all__'.
+        """
+        return self.clean_data
+
+class Form(BaseForm):
+    "A collection of Fields, plus their associated data."
+    # This is a separate class from BaseForm in order to abstract the way
+    # self.fields is specified. This class (Form) is the one that does the
+    # fancy metaclass stuff purely for the semantic sugar -- it allows one
+    # to define a form using declarative syntax.
+    # BaseForm itself has no way of designating self.fields.
+    __metaclass__ = DeclarativeFieldsMetaclass
+
+class BoundField(StrAndUnicode):
+    "A Field plus data"
+    def __init__(self, form, field, name):
+        self.form = form
+        self.field = field
+        self.name = name
+        self.html_name = form.add_prefix(name)
+        if self.field.label is None:
+            self.label = pretty_name(name)
+        else:
+            self.label = self.field.label
+        self.help_text = field.help_text or ''
+
+    def __unicode__(self):
+        "Renders this field as an HTML widget."
+        # Use the 'widget' attribute on the field to determine which type
+        # of HTML widget to use.
+        value = self.as_widget(self.field.widget)
+        if not isinstance(value, basestring):
+            # Some Widget render() methods -- notably RadioSelect -- return a
+            # "special" object rather than a string. Call the __str__() on that
+            # object to get its rendered value.
+            value = value.__str__()
+        return value
+
+    def _errors(self):
+        """
+        Returns an ErrorList for this field. Returns an empty ErrorList
+        if there are none.
+        """
+        return self.form.errors.get(self.name, ErrorList())
+    errors = property(_errors)
+
+    def as_widget(self, widget, attrs=None):
+        attrs = attrs or {}
+        auto_id = self.auto_id
+        if auto_id and not attrs.has_key('id') and not widget.attrs.has_key('id'):
+            attrs['id'] = auto_id
+        if not self.form.is_bound:
+            data = self.form.initial.get(self.name, self.field.initial)
+        else:
+            data = self.data
+        return widget.render(self.html_name, data, attrs=attrs)
+
+    def as_text(self, attrs=None):
+        """
+        Returns a string of HTML for representing this as an <input type="text">.
+        """
+        return self.as_widget(TextInput(), attrs)
+
+    def as_textarea(self, attrs=None):
+        "Returns a string of HTML for representing this as a <textarea>."
+        return self.as_widget(Textarea(), attrs)
+
+    def as_hidden(self, attrs=None):
+        """
+        Returns a string of HTML for representing this as an <input type="hidden">.
+        """
+        return self.as_widget(self.field.hidden_widget(), attrs)
+
+    def _data(self):
+        """
+        Returns the data for this BoundField, or None if it wasn't given.
+        """
+        return self.field.widget.value_from_datadict(self.form.data, self.html_name)
+    data = property(_data)
+
+    def label_tag(self, contents=None, attrs=None):
+        """
+        Wraps the given contents in a <label>, if the field has an ID attribute.
+        Does not HTML-escape the contents. If contents aren't given, uses the
+        field's HTML-escaped label.
+
+        If attrs are given, they're used as HTML attributes on the <label> tag.
+        """
+        contents = contents or escape(self.label)
+        widget = self.field.widget
+        id_ = widget.attrs.get('id') or self.auto_id
+        if id_:
+            attrs = attrs and flatatt(attrs) or ''
+            contents = '<label for="%s"%s>%s</label>' % (widget.id_for_label(id_), attrs, contents)
+        return contents
+
+    def _is_hidden(self):
+        "Returns True if this BoundField's widget is hidden."
+        return self.field.widget.is_hidden
+    is_hidden = property(_is_hidden)
+
+    def _auto_id(self):
+        """
+        Calculates and returns the ID attribute for this BoundField, if the
+        associated Form has specified auto_id. Returns an empty string otherwise.
+        """
+        auto_id = self.form.auto_id
+        if auto_id and '%s' in str(auto_id):
+            return str(auto_id) % self.html_name
+        elif auto_id:
+            return self.html_name
+        return ''
+    auto_id = property(_auto_id)

Added: vendor/django/current/django/newforms/models.py
===================================================================
--- vendor/django/current/django/newforms/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,190 @@
+"""
+Helper functions for creating Form classes from Django models
+and database field objects.
+"""
+
+from django.utils.translation import gettext
+from util import ValidationError
+from forms import BaseForm, DeclarativeFieldsMetaclass, SortedDictFromList
+from fields import Field, ChoiceField
+from widgets import Select, SelectMultiple, MultipleHiddenInput
+
+__all__ = ('save_instance', 'form_for_model', 'form_for_instance', 'form_for_fields',
+           'ModelChoiceField', 'ModelMultipleChoiceField')
+
+def model_save(self, commit=True):
+    """
+    Creates and returns model instance according to self.clean_data.
+
+    This method is created for any form_for_model Form.
+    """
+    if self.errors:
+        raise ValueError("The %s could not be created because the data didn't validate." % self._model._meta.object_name)
+    return save_instance(self, self._model(), commit)
+
+def save_instance(form, instance, commit=True):
+    """
+    Saves bound Form ``form``'s clean_data into model instance ``instance``.
+
+    Assumes ``form`` has a field for every non-AutoField database field in
+    ``instance``. If commit=True, then the changes to ``instance`` will be
+    saved to the database. Returns ``instance``.
+    """
+    from django.db import models
+    opts = instance.__class__._meta
+    if form.errors:
+        raise ValueError("The %s could not be changed because the data didn't validate." % opts.object_name)
+    clean_data = form.clean_data
+    for f in opts.fields:
+        if not f.editable or isinstance(f, models.AutoField):
+            continue
+        setattr(instance, f.name, clean_data[f.name])
+    if commit:
+        instance.save()
+        for f in opts.many_to_many:
+            setattr(instance, f.attname, clean_data[f.name])
+    # GOTCHA: If many-to-many data is given and commit=False, the many-to-many
+    # data will be lost. This happens because a many-to-many options cannot be
+    # set on an object until after it's saved. Maybe we should raise an
+    # exception in that case.
+    return instance
+
+def make_instance_save(instance):
+    "Returns the save() method for a form_for_instance Form."
+    def save(self, commit=True):
+        return save_instance(self, instance, commit)
+    return save
+
+def form_for_model(model, form=BaseForm, formfield_callback=lambda f: f.formfield()):
+    """
+    Returns a Form class for the given Django model class.
+
+    Provide ``form`` if you want to use a custom BaseForm subclass.
+
+    Provide ``formfield_callback`` if you want to define different logic for
+    determining the formfield for a given database field. It's a callable that
+    takes a database Field instance and returns a form Field instance.
+    """
+    opts = model._meta
+    field_list = []
+    for f in opts.fields + opts.many_to_many:
+        if not f.editable:
+            continue
+        formfield = formfield_callback(f)
+        if formfield:
+            field_list.append((f.name, formfield))
+    fields = SortedDictFromList(field_list)
+    return type(opts.object_name + 'Form', (form,), {'base_fields': fields, '_model': model, 'save': model_save})
+
+def form_for_instance(instance, form=BaseForm, formfield_callback=lambda f, **kwargs: f.formfield(**kwargs)):
+    """
+    Returns a Form class for the given Django model instance.
+
+    Provide ``form`` if you want to use a custom BaseForm subclass.
+
+    Provide ``formfield_callback`` if you want to define different logic for
+    determining the formfield for a given database field. It's a callable that
+    takes a database Field instance, plus **kwargs, and returns a form Field
+    instance with the given kwargs (i.e. 'initial').
+    """
+    model = instance.__class__
+    opts = model._meta
+    field_list = []
+    for f in opts.fields + opts.many_to_many:
+        if not f.editable:
+            continue
+        current_value = f.value_from_object(instance)
+        formfield = formfield_callback(f, initial=current_value)
+        if formfield:
+            field_list.append((f.name, formfield))
+    fields = SortedDictFromList(field_list)
+    return type(opts.object_name + 'InstanceForm', (form,),
+        {'base_fields': fields, '_model': model, 'save': make_instance_save(instance)})
+
+def form_for_fields(field_list):
+    "Returns a Form class for the given list of Django database field instances."
+    fields = SortedDictFromList([(f.name, f.formfield()) for f in field_list if f.editable])
+    return type('FormForFields', (BaseForm,), {'base_fields': fields})
+
+class QuerySetIterator(object):
+    def __init__(self, queryset, empty_label, cache_choices):
+        self.queryset, self.empty_label, self.cache_choices = queryset, empty_label, cache_choices
+
+    def __iter__(self):
+        if self.empty_label is not None:
+            yield (u"", self.empty_label)
+        for obj in self.queryset:
+            yield (obj._get_pk_val(), str(obj))
+        # Clear the QuerySet cache if required.
+        if not self.cache_choices:
+            self.queryset._result_cache = None
+
+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.
+    def __init__(self, queryset, empty_label=u"---------", cache_choices=False,
+            required=True, widget=Select, label=None, initial=None, help_text=None):
+        self.queryset = queryset
+        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)
+        self.widget.choices = self.choices
+
+    def _get_choices(self):
+        # If self._choices is set, then somebody must have manually set
+        # the property self.choices. In this case, just return self._choices.
+        if hasattr(self, '_choices'):
+            return self._choices
+        # Otherwise, execute the QuerySet in self.queryset to determine the
+        # choices dynamically. Return a fresh QuerySetIterator that has not
+        # been consumed. Note that we're instantiating a new QuerySetIterator
+        # *each* time _get_choices() is called (and, thus, each time
+        # self.choices is accessed) so that we can ensure the QuerySet has not
+        # been consumed.
+        return QuerySetIterator(self.queryset, self.empty_label, self.cache_choices)
+
+    def _set_choices(self, value):
+        # This method is copied from ChoiceField._set_choices(). It's necessary
+        # because property() doesn't allow a subclass to overwrite only
+        # _get_choices without implementing _set_choices.
+        self._choices = self.widget.choices = list(value)
+
+    choices = property(_get_choices, _set_choices)
+
+    def clean(self, value):
+        Field.clean(self, value)
+        if value in ('', None):
+            return None
+        try:
+            value = self.queryset.model._default_manager.get(pk=value)
+        except self.queryset.model.DoesNotExist:
+            raise ValidationError(gettext(u'Select a valid choice. That choice is not one of the available choices.'))
+        return value
+
+class ModelMultipleChoiceField(ModelChoiceField):
+    "A MultipleChoiceField whose choices are a model QuerySet."
+    hidden_widget = MultipleHiddenInput
+    def __init__(self, queryset, cache_choices=False, required=True,
+            widget=SelectMultiple, label=None, initial=None, help_text=None):
+        super(ModelMultipleChoiceField, self).__init__(queryset, None, cache_choices,
+            required, widget, label, initial, help_text)
+
+    def clean(self, value):
+        if self.required and not value:
+            raise ValidationError(gettext(u'This field is required.'))
+        elif not self.required and not value:
+            return []
+        if not isinstance(value, (list, tuple)):
+            raise ValidationError(gettext(u'Enter a list of values.'))
+        final_values = []
+        for val in value:
+            try:
+                obj = self.queryset.model._default_manager.get(pk=val)
+            except self.queryset.model.DoesNotExist:
+                raise ValidationError(gettext(u'Select a valid choice. %s is not one of the available choices.') % val)
+            else:
+                final_values.append(obj)
+        return final_values

Added: vendor/django/current/django/newforms/util.py
===================================================================
--- vendor/django/current/django/newforms/util.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/util.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,74 @@
+from django.conf import settings
+from django.utils.html import escape
+
+# Converts a dictionary to a single string with key="value", XML-style with
+# a leading space. Assumes keys do not need to be XML-escaped.
+flatatt = lambda attrs: u''.join([u' %s="%s"' % (k, escape(v)) for k, v in attrs.items()])
+
+def smart_unicode(s):
+    if not isinstance(s, basestring):
+        if hasattr(s, '__unicode__'):
+            s = unicode(s)
+        else:
+            s = unicode(str(s), settings.DEFAULT_CHARSET)
+    elif not isinstance(s, unicode):
+        s = unicode(s, settings.DEFAULT_CHARSET)
+    return s
+
+class StrAndUnicode(object):
+    """
+    A class whose __str__ returns its __unicode__ as a bytestring
+    according to settings.DEFAULT_CHARSET.
+
+    Useful as a mix-in.
+    """
+    def __str__(self):
+        return self.__unicode__().encode(settings.DEFAULT_CHARSET)
+
+class ErrorDict(dict):
+    """
+    A collection of errors that knows how to display itself in various formats.
+
+    The dictionary keys are the field names, and the values are the errors.
+    """
+    def __str__(self):
+        return self.as_ul()
+
+    def as_ul(self):
+        if not self: return u''
+        return u'<ul class="errorlist">%s</ul>' % ''.join([u'<li>%s%s</li>' % (k, v) for k, v in self.items()])
+
+    def as_text(self):
+        return u'\n'.join([u'* %s\n%s' % (k, u'\n'.join([u'  * %s' % i for i in v])) for k, v in self.items()])
+
+class ErrorList(list):
+    """
+    A collection of errors that knows how to display itself in various formats.
+    """
+    def __str__(self):
+        return self.as_ul()
+
+    def as_ul(self):
+        if not self: return u''
+        return u'<ul class="errorlist">%s</ul>' % ''.join([u'<li>%s</li>' % e for e in self])
+
+    def as_text(self):
+        if not self: return u''
+        return u'\n'.join([u'* %s' % e for e in self])
+
+class ValidationError(Exception):
+    def __init__(self, message):
+        "ValidationError can be passed a string or a list."
+        if isinstance(message, list):
+            self.messages = ErrorList([smart_unicode(msg) for msg in message])
+        else:
+            assert isinstance(message, basestring), ("%s should be a basestring" % repr(message))
+            message = smart_unicode(message)
+            self.messages = ErrorList([message])
+
+    def __str__(self):
+        # This is needed because, without a __str__(), printing an exception
+        # instance would result in this:
+        # AttributeError: ValidationError instance has no attribute 'args'
+        # See http://www.python.org/doc/current/tut/node10.html#handling
+        return repr(self.messages)

Added: vendor/django/current/django/newforms/widgets.py
===================================================================
--- vendor/django/current/django/newforms/widgets.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/newforms/widgets.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,353 @@
+"""
+HTML Widget classes
+"""
+
+__all__ = (
+    'Widget', 'TextInput', 'PasswordInput', 'HiddenInput', 'MultipleHiddenInput',
+    'FileInput', 'Textarea', 'CheckboxInput',
+    'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', 'CheckboxSelectMultiple',
+    'MultiWidget', 'SplitDateTimeWidget',
+)
+
+from util import flatatt, StrAndUnicode, smart_unicode
+from django.utils.datastructures import MultiValueDict
+from django.utils.html import escape
+from django.utils.translation import gettext
+from itertools import chain
+
+try:
+    set # Only available in Python 2.4+
+except NameError:
+    from sets import Set as set # Python 2.3 fallback
+
+class Widget(object):
+    is_hidden = False          # Determines whether this corresponds to an <input type="hidden">.
+
+    def __init__(self, attrs=None):
+        self.attrs = attrs or {}
+
+    def render(self, name, value, attrs=None):
+        """
+        Returns this Widget rendered as HTML, as a Unicode string.
+
+        The 'value' given is not guaranteed to be valid input, so subclass
+        implementations should program defensively.
+        """
+        raise NotImplementedError
+
+    def build_attrs(self, extra_attrs=None, **kwargs):
+        "Helper function for building an attribute dictionary."
+        attrs = dict(self.attrs, **kwargs)
+        if extra_attrs:
+            attrs.update(extra_attrs)
+        return attrs
+
+    def value_from_datadict(self, data, name):
+        """
+        Given a dictionary of data and this widget's name, returns the value
+        of this widget. Returns None if it's not provided.
+        """
+        return data.get(name, None)
+
+    def id_for_label(self, id_):
+        """
+        Returns the HTML ID attribute of this Widget for use by a <label>,
+        given the ID of the field. Returns None if no ID is available.
+
+        This hook is necessary because some widgets have multiple HTML
+        elements and, thus, multiple IDs. In that case, this method should
+        return an ID value that corresponds to the first ID in the widget's
+        tags.
+        """
+        return id_
+    id_for_label = classmethod(id_for_label)
+
+class Input(Widget):
+    """
+    Base class for all <input> widgets (except type='checkbox' and
+    type='radio', which are special).
+    """
+    input_type = None # Subclasses must define this.
+
+    def render(self, name, value, attrs=None):
+        if value is None: value = ''
+        final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
+        if value != '': final_attrs['value'] = smart_unicode(value) # Only add the 'value' attribute if a value is non-empty.
+        return u'<input%s />' % flatatt(final_attrs)
+
+class TextInput(Input):
+    input_type = 'text'
+
+class PasswordInput(Input):
+    input_type = 'password'
+
+    def __init__(self, attrs=None, render_value=True):
+        self.attrs = attrs or {}
+        self.render_value = render_value
+
+    def render(self, name, value, attrs=None):
+        if not self.render_value: value=None
+        return super(PasswordInput, self).render(name, value, attrs)
+
+class HiddenInput(Input):
+    input_type = 'hidden'
+    is_hidden = True
+
+class MultipleHiddenInput(HiddenInput):
+    """
+    A widget that handles <input type="hidden"> for fields that have a list
+    of values.
+    """
+    def __init__(self, attrs=None, choices=()):
+        # choices can be any iterable
+        self.attrs = attrs or {}
+        self.choices = choices
+
+    def render(self, name, value, attrs=None, choices=()):
+        if value is None: value = []
+        final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
+        return u'\n'.join([(u'<input%s />' % flatatt(dict(value=smart_unicode(v), **final_attrs))) for v in value])
+
+    def value_from_datadict(self, data, name):
+        if isinstance(data, MultiValueDict):
+            return data.getlist(name)
+        return data.get(name, None)
+
+class FileInput(Input):
+    input_type = 'file'
+
+class Textarea(Widget):
+    def render(self, name, value, attrs=None):
+        if value is None: value = ''
+        value = smart_unicode(value)
+        final_attrs = self.build_attrs(attrs, name=name)
+        return u'<textarea%s>%s</textarea>' % (flatatt(final_attrs), escape(value))
+
+class CheckboxInput(Widget):
+    def __init__(self, attrs=None, check_test=bool):
+        # check_test is a callable that takes a value and returns True
+        # if the checkbox should be checked for that value.
+        self.attrs = attrs or {}
+        self.check_test = check_test
+
+    def render(self, name, value, attrs=None):
+        final_attrs = self.build_attrs(attrs, type='checkbox', name=name)
+        try:
+            result = self.check_test(value)
+        except: # Silently catch exceptions
+            result = False
+        if result:
+            final_attrs['checked'] = 'checked'
+        if value not in ('', True, False, None):
+            final_attrs['value'] = smart_unicode(value) # Only add the 'value' attribute if a value is non-empty.
+        return u'<input%s />' % flatatt(final_attrs)
+
+class Select(Widget):
+    def __init__(self, attrs=None, choices=()):
+        self.attrs = attrs or {}
+        # choices can be any iterable, but we may need to render this widget
+        # multiple times. Thus, collapse it into a list so it can be consumed
+        # more than once.
+        self.choices = list(choices)
+
+    def render(self, name, value, attrs=None, choices=()):
+        if value is None: value = ''
+        final_attrs = self.build_attrs(attrs, name=name)
+        output = [u'<select%s>' % flatatt(final_attrs)]
+        str_value = smart_unicode(value) # Normalize to string.
+        for option_value, option_label in chain(self.choices, choices):
+            option_value = smart_unicode(option_value)
+            selected_html = (option_value == str_value) and u' selected="selected"' or ''
+            output.append(u'<option value="%s"%s>%s</option>' % (escape(option_value), selected_html, escape(smart_unicode(option_label))))
+        output.append(u'</select>')
+        return u'\n'.join(output)
+
+class NullBooleanSelect(Select):
+    """
+    A Select Widget intended to be used with NullBooleanField.
+    """
+    def __init__(self, attrs=None):
+        choices = ((u'1', gettext('Unknown')), (u'2', gettext('Yes')), (u'3', gettext('No')))
+        super(NullBooleanSelect, self).__init__(attrs, choices)
+
+    def render(self, name, value, attrs=None, choices=()):
+        try:
+            value = {True: u'2', False: u'3', u'2': u'2', u'3': u'3'}[value]
+        except KeyError:
+            value = u'1'
+        return super(NullBooleanSelect, self).render(name, value, attrs, choices)
+
+    def value_from_datadict(self, data, name):
+        value = data.get(name, None)
+        return {u'2': True, u'3': False, True: True, False: False}.get(value, None)
+
+class SelectMultiple(Widget):
+    def __init__(self, attrs=None, choices=()):
+        # choices can be any iterable
+        self.attrs = attrs or {}
+        self.choices = choices
+
+    def render(self, name, value, attrs=None, choices=()):
+        if value is None: value = []
+        final_attrs = self.build_attrs(attrs, name=name)
+        output = [u'<select multiple="multiple"%s>' % flatatt(final_attrs)]
+        str_values = set([smart_unicode(v) for v in value]) # Normalize to strings.
+        for option_value, option_label in chain(self.choices, choices):
+            option_value = smart_unicode(option_value)
+            selected_html = (option_value in str_values) and ' selected="selected"' or ''
+            output.append(u'<option value="%s"%s>%s</option>' % (escape(option_value), selected_html, escape(smart_unicode(option_label))))
+        output.append(u'</select>')
+        return u'\n'.join(output)
+
+    def value_from_datadict(self, data, name):
+        if isinstance(data, MultiValueDict):
+            return data.getlist(name)
+        return data.get(name, None)
+
+class RadioInput(StrAndUnicode):
+    "An object used by RadioFieldRenderer that represents a single <input type='radio'>."
+    def __init__(self, name, value, attrs, choice, index):
+        self.name, self.value = name, value
+        self.attrs = attrs
+        self.choice_value = smart_unicode(choice[0])
+        self.choice_label = smart_unicode(choice[1])
+        self.index = index
+
+    def __unicode__(self):
+        return u'<label>%s %s</label>' % (self.tag(), self.choice_label)
+
+    def is_checked(self):
+        return self.value == self.choice_value
+
+    def tag(self):
+        if self.attrs.has_key('id'):
+            self.attrs['id'] = '%s_%s' % (self.attrs['id'], self.index)
+        final_attrs = dict(self.attrs, type='radio', name=self.name, value=self.choice_value)
+        if self.is_checked():
+            final_attrs['checked'] = 'checked'
+        return u'<input%s />' % flatatt(final_attrs)
+
+class RadioFieldRenderer(StrAndUnicode):
+    "An object used by RadioSelect to enable customization of radio widgets."
+    def __init__(self, name, value, attrs, choices):
+        self.name, self.value, self.attrs = name, value, attrs
+        self.choices = choices
+
+    def __iter__(self):
+        for i, choice in enumerate(self.choices):
+            yield RadioInput(self.name, self.value, self.attrs.copy(), choice, i)
+
+    def __getitem__(self, idx):
+        choice = self.choices[idx] # Let the IndexError propogate
+        return RadioInput(self.name, self.value, self.attrs.copy(), choice, idx)
+
+    def __unicode__(self):
+        "Outputs a <ul> for this set of radio fields."
+        return u'<ul>\n%s\n</ul>' % u'\n'.join([u'<li>%s</li>' % w for w in self])
+
+class RadioSelect(Select):
+    def render(self, name, value, attrs=None, choices=()):
+        "Returns a RadioFieldRenderer instance rather than a Unicode string."
+        if value is None: value = ''
+        str_value = smart_unicode(value) # Normalize to string.
+        attrs = attrs or {}
+        return RadioFieldRenderer(name, str_value, attrs, list(chain(self.choices, choices)))
+
+    def id_for_label(self, id_):
+        # RadioSelect is represented by multiple <input type="radio"> fields,
+        # each of which has a distinct ID. The IDs are made distinct by a "_X"
+        # suffix, where X is the zero-based index of the radio field. Thus,
+        # the label for a RadioSelect should reference the first one ('_0').
+        if id_:
+            id_ += '_0'
+        return id_
+    id_for_label = classmethod(id_for_label)
+
+class CheckboxSelectMultiple(SelectMultiple):
+    def render(self, name, value, attrs=None, choices=()):
+        if value is None: value = []
+        has_id = attrs and attrs.has_key('id')
+        final_attrs = self.build_attrs(attrs, name=name)
+        output = [u'<ul>']
+        str_values = set([smart_unicode(v) for v in value]) # Normalize to strings.
+        for i, (option_value, option_label) in enumerate(chain(self.choices, choices)):
+            # If an ID attribute was given, add a numeric index as a suffix,
+            # so that the checkboxes don't all have the same ID attribute.
+            if has_id:
+                final_attrs = dict(final_attrs, id='%s_%s' % (attrs['id'], i))
+            cb = CheckboxInput(final_attrs, check_test=lambda value: value in str_values)
+            option_value = smart_unicode(option_value)
+            rendered_cb = cb.render(name, option_value)
+            output.append(u'<li><label>%s %s</label></li>' % (rendered_cb, escape(smart_unicode(option_label))))
+        output.append(u'</ul>')
+        return u'\n'.join(output)
+
+    def id_for_label(self, id_):
+        # See the comment for RadioSelect.id_for_label()
+        if id_:
+            id_ += '_0'
+        return id_
+    id_for_label = classmethod(id_for_label)
+
+class MultiWidget(Widget):
+    """
+    A widget that is composed of multiple widgets.
+
+    Its render() method takes a "decompressed" list of values, not a single
+    value. Each value in this list is rendered in the corresponding widget --
+    the first value is rendered in the first widget, the second value is
+    rendered in the second widget, etc.
+
+    Subclasses should implement decompress(), which specifies how a single
+    value should be converted to a list of values. Subclasses should not
+    have to implement clean().
+
+    Subclasses may implement format_output(), which takes the list of rendered
+    widgets and returns HTML that formats them any way you'd like.
+
+    You'll probably want to use this with MultiValueField.
+    """
+    def __init__(self, widgets, attrs=None):
+        self.widgets = [isinstance(w, type) and w() or w for w in widgets]
+        super(MultiWidget, self).__init__(attrs)
+
+    def render(self, name, value, attrs=None):
+        # value is a list of values, each corresponding to a widget
+        # in self.widgets.
+        if not isinstance(value, list):
+            value = self.decompress(value)
+        output = []
+        for i, widget in enumerate(self.widgets):
+            try:
+                widget_value = value[i]
+            except KeyError:
+                widget_value = None
+            output.append(widget.render(name + '_%s' % i, widget_value, attrs))
+        return self.format_output(output)
+
+    def value_from_datadict(self, data, name):
+        return [data.get(name + '_%s' % i) for i in range(len(self.widgets))]
+
+    def format_output(self, rendered_widgets):
+        return u''.join(rendered_widgets)
+
+    def decompress(self, value):
+        """
+        Returns a list of decompressed values for the given compressed value.
+        The given value can be assumed to be valid, but not necessarily
+        non-empty.
+        """
+        raise NotImplementedError('Subclasses must implement this method.')
+
+class SplitDateTimeWidget(MultiWidget):
+    """
+    A Widget that splits datetime input into two <input type="text"> boxes.
+    """
+    def __init__(self, attrs=None):
+        widgets = (TextInput(attrs=attrs), TextInput(attrs=attrs))
+        super(SplitDateTimeWidget, self).__init__(widgets, attrs)
+
+    def decompress(self, value):
+        if value:
+            return [value.date(), value.time()]
+        return [None, None]

Copied: vendor/django/current/django/oldforms (from rev 7716, vendor/django/current/django/forms)

Modified: vendor/django/current/django/oldforms/__init__.py
===================================================================
--- vendor/django/current/django/forms/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/oldforms/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,7 +2,7 @@
 from django.core.exceptions import PermissionDenied
 from django.utils.html import escape
 from django.conf import settings
-from django.utils.translation import gettext, gettext_lazy, ngettext
+from django.utils.translation import gettext, ngettext
 
 FORM_FIELD_ID_PREFIX = 'id_'
 
@@ -54,6 +54,7 @@
     def get_validation_errors(self, new_data):
         "Returns dictionary mapping field_names to error-message lists"
         errors = {}
+        self.prepare(new_data)
         for field in self.fields:
             errors.update(field.get_validation_errors(new_data))
             val_name = 'validate_%s' % field.field_name
@@ -107,8 +108,13 @@
     This allows dictionary-style lookups of formfields. It also handles feeding
     prepopulated data and validation error messages to the formfield objects.
     """
-    def __init__(self, manipulator, data, error_dict, edit_inline=True):
-        self.manipulator, self.data = manipulator, data
+    def __init__(self, manipulator, data=None, error_dict=None, edit_inline=True):
+        self.manipulator = manipulator
+        if data is None:
+            data = {}
+        if error_dict is None:
+            error_dict = {}
+        self.data = data
         self.error_dict = error_dict
         self._inline_collections = None
         self.edit_inline = edit_inline
@@ -124,7 +130,9 @@
         if self.edit_inline:
             self.fill_inline_collections()
             for inline_collection in self._inline_collections:
-                if inline_collection.name == key:
+                # The 'orig_name' comparison is for backwards compatibility
+                # with hand-crafted forms.
+                if inline_collection.name == key or (':' not in key and inline_collection.orig_name == key):
                     return inline_collection
         raise KeyError, "Could not find Formfield or InlineObjectCollection named %r" % key
 
@@ -220,6 +228,9 @@
         self.errors = errors
         self._collections = None
         self.name = rel_obj.name
+        # This is the name used prior to fixing #1839. Needs for backwards
+        # compatibility.
+        self.orig_name = rel_obj.opts.module_name
 
     def __len__(self):
         self.fill()
@@ -343,7 +354,7 @@
     def get_validation_errors(self, new_data):
         errors = {}
         if self.is_required and not new_data.get(self.field_name, False):
-            errors.setdefault(self.field_name, []).append(gettext_lazy('This field is required.'))
+            errors.setdefault(self.field_name, []).append(gettext('This field is required.'))
             return errors
         try:
             for validator in self.validator_list:
@@ -434,11 +445,11 @@
             (self.get_id(), self.field_name, escape(data))
 
 class CheckboxField(FormField):
-    def __init__(self, field_name, checked_by_default=False, validator_list=None):
+    def __init__(self, field_name, checked_by_default=False, validator_list=None, is_required=False):
         if validator_list is None: validator_list = []
         self.field_name = field_name
         self.checked_by_default = checked_by_default
-        self.is_required = False # because the validator looks for these
+        self.is_required = is_required
         self.validator_list = validator_list[:]
 
     def render(self, data):
@@ -563,7 +574,7 @@
     "This SelectField provides 'Yes', 'No' and 'Unknown', mapping results to True, False or None"
     def __init__(self, field_name, is_required=False, validator_list=None):
         if validator_list is None: validator_list = []
-        SelectField.__init__(self, field_name, choices=[('1', 'Unknown'), ('2', 'Yes'), ('3', 'No')],
+        SelectField.__init__(self, field_name, choices=[('1', _('Unknown')), ('2', _('Yes')), ('3', _('No'))],
             is_required=is_required, validator_list=validator_list)
 
     def render(self, data):
@@ -638,9 +649,9 @@
             if str(value) in str_data_list:
                 checked_html = ' checked="checked"'
             field_name = '%s%s' % (self.field_name, value)
-            output.append('<li><input type="checkbox" id="%s" class="v%s" name="%s"%s /> <label for="%s">%s</label></li>' % \
-                (self.get_id() + value , self.__class__.__name__, field_name, checked_html,
-                self.get_id() + value, choice))
+            output.append('<li><input type="checkbox" id="%s" class="v%s" name="%s"%s value="on" /> <label for="%s">%s</label></li>' % \
+                (self.get_id() + escape(value), self.__class__.__name__, field_name, checked_html,
+                self.get_id() + escape(value), choice))
         output.append('</ul>')
         return '\n'.join(output)
 
@@ -743,7 +754,7 @@
         if validator_list is None: validator_list = []
         self.max_digits, self.decimal_places = max_digits, decimal_places
         validator_list = [self.isValidFloat] + validator_list
-        TextField.__init__(self, field_name, max_digits+1, max_digits+1, is_required, validator_list)
+        TextField.__init__(self, field_name, max_digits+2, max_digits+2, is_required, validator_list)
 
     def isValidFloat(self, field_data, all_data):
         v = validators.IsValidFloat(self.max_digits, self.decimal_places)
@@ -954,8 +965,7 @@
     def html2python(data):
         if data:
             return data.upper() # Should always be stored in upper case
-        else:
-            return None
+        return data
     html2python = staticmethod(html2python)
 
 class CommaSeparatedIntegerField(TextField):
@@ -972,9 +982,19 @@
         except validators.ValidationError, e:
             raise validators.CriticalValidationError, e.messages
 
+    def render(self, data):
+        if data is None:
+            data = ''
+        elif isinstance(data, (list, tuple)):
+            data = ','.join(data)
+        return super(CommaSeparatedIntegerField, self).render(data)
+
 class RawIdAdminField(CommaSeparatedIntegerField):
     def html2python(data):
-        return data.split(',')
+        if data:
+            return data.split(',')
+        else:
+            return []
     html2python = staticmethod(html2python)
 
 class XMLLargeTextField(LargeTextField):

Modified: vendor/django/current/django/shortcuts/__init__.py
===================================================================
--- vendor/django/current/django/shortcuts/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/shortcuts/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -4,20 +4,29 @@
 
 from django.template import loader
 from django.http import HttpResponse, Http404
+from django.db.models.manager import Manager
 
-
 def render_to_response(*args, **kwargs):
     return HttpResponse(loader.render_to_string(*args, **kwargs))
 load_and_render = render_to_response # For backwards compatibility.
 
 def get_object_or_404(klass, *args, **kwargs):
+    if isinstance(klass, Manager):
+        manager = klass
+        klass = manager.model
+    else:
+        manager = klass._default_manager
     try:
-        return klass._default_manager.get(*args, **kwargs)
+        return manager.get(*args, **kwargs)
     except klass.DoesNotExist:
-        raise Http404
+        raise Http404('No %s matches the given query.' % klass._meta.object_name)
 
 def get_list_or_404(klass, *args, **kwargs):
-    obj_list = list(klass._default_manager.filter(*args, **kwargs))
+    if isinstance(klass, Manager):
+        manager = klass
+    else:
+        manager = klass._default_manager
+    obj_list = list(manager.filter(*args, **kwargs))
     if not obj_list:
-        raise Http404
+        raise Http404('No %s matches the given query.' % manager.model._meta.object_name)
     return obj_list

Modified: vendor/django/current/django/template/__init__.py
===================================================================
--- vendor/django/current/django/template/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -66,6 +66,7 @@
 TOKEN_TEXT = 0
 TOKEN_VAR = 1
 TOKEN_BLOCK = 2
+TOKEN_COMMENT = 3
 
 # template syntax constants
 FILTER_SEPARATOR = '|'
@@ -75,6 +76,8 @@
 BLOCK_TAG_END = '%}'
 VARIABLE_TAG_START = '{{'
 VARIABLE_TAG_END = '}}'
+COMMENT_TAG_START = '{#'
+COMMENT_TAG_END = '#}'
 SINGLE_BRACE_START = '{'
 SINGLE_BRACE_END = '}'
 
@@ -85,8 +88,11 @@
 UNKNOWN_SOURCE="&lt;unknown source&gt;"
 
 # match a variable or block tag and capture the entire tag, including start/end delimiters
-tag_re = re.compile('(%s.*?%s|%s.*?%s)' % (re.escape(BLOCK_TAG_START), re.escape(BLOCK_TAG_END),
-                                          re.escape(VARIABLE_TAG_START), re.escape(VARIABLE_TAG_END)))
+tag_re = re.compile('(%s.*?%s|%s.*?%s|%s.*?%s)' % (re.escape(BLOCK_TAG_START), re.escape(BLOCK_TAG_END),
+                                          re.escape(VARIABLE_TAG_START), re.escape(VARIABLE_TAG_END),
+                                          re.escape(COMMENT_TAG_START), re.escape(COMMENT_TAG_END)))
+# matches if the string is valid number
+number_re = re.compile(r'[-+]?(\d+|\d*\.\d+)$')
 
 # global dictionary of libraries that have been loaded using get_library
 libraries = {}
@@ -113,8 +119,14 @@
     pass
 
 class VariableDoesNotExist(Exception):
-    pass
 
+    def __init__(self, msg, params=()):
+        self.msg = msg
+        self.params = params
+    
+    def __str__(self):
+        return self.msg % self.params
+    
 class InvalidTemplateLibrary(Exception):
     pass
 
@@ -137,13 +149,14 @@
         return self.source
 
 class Template(object):
-    def __init__(self, template_string, origin=None):
+    def __init__(self, template_string, origin=None, name='<Unknown Template>'):
         "Compilation stage"
         if settings.TEMPLATE_DEBUG and origin == None:
             origin = StringOrigin(template_string)
             # Could do some crazy stack-frame stuff to record where this string
             # came from...
         self.nodelist = compile_string(template_string, origin)
+        self.name = name
 
     def __iter__(self):
         for node in self.nodelist:
@@ -162,12 +175,12 @@
 
 class Token(object):
     def __init__(self, token_type, contents):
-        "The token_type must be TOKEN_TEXT, TOKEN_VAR or TOKEN_BLOCK"
+        "The token_type must be TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK or TOKEN_COMMENT"
         self.token_type, self.contents = token_type, contents
 
     def __str__(self):
         return '<%s token: "%s...">' % \
-            ({TOKEN_TEXT: 'Text', TOKEN_VAR: 'Var', TOKEN_BLOCK: 'Block'}[self.token_type],
+            ({TOKEN_TEXT: 'Text', TOKEN_VAR: 'Var', TOKEN_BLOCK: 'Block', TOKEN_COMMENT: 'Comment'}[self.token_type],
             self.contents[:20].replace('\n', ''))
 
     def split_contents(self):
@@ -190,6 +203,8 @@
             token = Token(TOKEN_VAR, token_string[len(VARIABLE_TAG_START):-len(VARIABLE_TAG_END)].strip())
         elif token_string.startswith(BLOCK_TAG_START):
             token = Token(TOKEN_BLOCK, token_string[len(BLOCK_TAG_START):-len(BLOCK_TAG_END)].strip())
+        elif token_string.startswith(COMMENT_TAG_START):
+            token = Token(TOKEN_COMMENT, '')
         else:
             token = Token(TOKEN_TEXT, token_string)
         return token
@@ -434,7 +449,7 @@
             while i < len(subject) and subject[i] != subject[p]:
                 i += 1
             if i >= len(subject):
-                raise TemplateSyntaxError, "Searching for value. Unexpected end of string in column %d: %s" % subject
+                raise TemplateSyntaxError, "Searching for value. Unexpected end of string in column %d: %s" % (i, subject)
             i += 1
             res = subject[p:i]
             while i < len(subject) and subject[i] in (' ', '\t'):
@@ -531,7 +546,7 @@
                 constant_arg, i18n_arg, var_arg = match.group("constant_arg", "i18n_arg", "var_arg")
                 if i18n_arg:
                     args.append((False, _(i18n_arg.replace(r'\"', '"'))))
-                elif constant_arg:
+                elif constant_arg is not None:
                     args.append((False, constant_arg.replace(r'\"', '"')))
                 elif var_arg:
                     args.append((True, var_arg))
@@ -548,9 +563,12 @@
             obj = resolve_variable(self.var, context)
         except VariableDoesNotExist:
             if ignore_failures:
-                return None
+                obj = None
             else:
-                return settings.TEMPLATE_STRING_IF_INVALID
+                if settings.TEMPLATE_STRING_IF_INVALID:
+                    return settings.TEMPLATE_STRING_IF_INVALID
+                else:
+                    obj = settings.TEMPLATE_STRING_IF_INVALID
         for func, args in self.filters:
             arg_vals = []
             for lookup, arg in args:
@@ -564,6 +582,8 @@
     def args_check(name, func, provided):
         provided = list(provided)
         plen = len(provided)
+        # Check to see if a decorator is providing the real function.
+        func = getattr(func, '_decorated_function', func)
         args, varargs, varkw, defaults = getargspec(func)
         # First argument is filter input.
         args.pop(0)
@@ -614,16 +634,9 @@
 
     (The example assumes VARIABLE_ATTRIBUTE_SEPARATOR is '.')
     """
-    if path == 'False':
-        current = False
-    elif path == 'True':
-        current = True
-    elif path[0].isdigit():
+    if number_re.match(path):
         number_type = '.' in path and float or int
-        try:
-            current = number_type(path)
-        except ValueError:
-            current = settings.TEMPLATE_STRING_IF_INVALID
+        current = number_type(path)
     elif path[0] in ('"', "'") and path[0] == path[-1]:
         current = path[1:-1]
     else:
@@ -653,8 +666,12 @@
                 except (TypeError, AttributeError):
                     try: # list-index lookup
                         current = current[int(bits[0])]
-                    except (IndexError, ValueError, KeyError):
-                        raise VariableDoesNotExist, "Failed lookup for key [%s] in %r" % (bits[0], current) # missing attribute
+                    except (IndexError, # list index out of range
+                            ValueError, # invalid literal for int()
+                            KeyError,   # current is a dict without `int(bits[0])` key
+                            TypeError,  # unsubscriptable object
+                            ):
+                        raise VariableDoesNotExist("Failed lookup for key [%s] in %r", (bits[0], current)) # missing attribute
                 except Exception, e:
                     if getattr(e, 'silent_variable_failure', False):
                         current = settings.TEMPLATE_STRING_IF_INVALID
@@ -736,7 +753,11 @@
     def encode_output(self, output):
         # Check type so that we don't run str() on a Unicode object
         if not isinstance(output, basestring):
-            return str(output)
+            try:
+                return str(output)
+            except UnicodeEncodeError:
+                # If __str__() returns a Unicode object, convert it to bytestring.
+                return unicode(output).encode(settings.DEFAULT_CHARSET)
         elif isinstance(output, unicode):
             return output.encode(settings.DEFAULT_CHARSET)
         else:
@@ -796,7 +817,7 @@
             raise InvalidTemplateLibrary, "Unsupported arguments to Library.tag: (%r, %r)", (name, compile_function)
 
     def tag_function(self,func):
-        self.tags[func.__name__] = func
+        self.tags[getattr(func, "_decorated_function", func).__name__] = func
         return func
 
     def filter(self, name=None, filter_func=None):
@@ -820,7 +841,7 @@
             raise InvalidTemplateLibrary, "Unsupported arguments to Library.filter: (%r, %r)", (name, filter_func)
 
     def filter_function(self, func):
-        self.filters[func.__name__] = func
+        self.filters[getattr(func, "_decorated_function", func).__name__] = func
         return func
 
     def simple_tag(self,func):
@@ -834,9 +855,9 @@
                 resolved_vars = [resolve_variable(var, context) for var in self.vars_to_resolve]
                 return func(*resolved_vars)
 
-        compile_func = curry(generic_tag_compiler, params, defaults, func.__name__, SimpleNode)
+        compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, SimpleNode)
         compile_func.__doc__ = func.__doc__
-        self.tag(func.__name__, compile_func)
+        self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
         return func
 
     def inclusion_tag(self, file_name, context_class=Context, takes_context=False):
@@ -862,14 +883,17 @@
                     dict = func(*args)
 
                     if not getattr(self, 'nodelist', False):
-                        from django.template.loader import get_template
-                        t = get_template(file_name)
+                        from django.template.loader import get_template, select_template
+                        if hasattr(file_name, '__iter__'):
+                            t = select_template(file_name)
+                        else:
+                            t = get_template(file_name)
                         self.nodelist = t.nodelist
                     return self.nodelist.render(context_class(dict))
 
-            compile_func = curry(generic_tag_compiler, params, defaults, func.__name__, InclusionNode)
+            compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, InclusionNode)
             compile_func.__doc__ = func.__doc__
-            self.tag(func.__name__, compile_func)
+            self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
             return func
         return dec
 
@@ -877,7 +901,7 @@
     lib = libraries.get(module_name, None)
     if not lib:
         try:
-            mod = __import__(module_name, '', '', [''])
+            mod = __import__(module_name, {}, {}, [''])
         except ImportError, e:
             raise InvalidTemplateLibrary, "Could not load template library from %s, %s" % (module_name, e)
         try:

Modified: vendor/django/current/django/template/context.py
===================================================================
--- vendor/django/current/django/template/context.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/context.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -49,6 +49,9 @@
                 return True
         return False
 
+    def __contains__(self, key):
+        return self.has_key(key)
+
     def get(self, key, otherwise=None):
         for d in self.dicts:
             if d.has_key(key):
@@ -69,7 +72,7 @@
             i = path.rfind('.')
             module, attr = path[:i], path[i+1:]
             try:
-                mod = __import__(module, '', '', [attr])
+                mod = __import__(module, {}, {}, [attr])
             except ImportError, e:
                 raise ImproperlyConfigured, 'Error importing request processor module %s: "%s"' % (module, e)
             try:

Modified: vendor/django/current/django/template/defaultfilters.py
===================================================================
--- vendor/django/current/django/template/defaultfilters.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/defaultfilters.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,6 +8,38 @@
 
 register = Library()
 
+#######################
+# STRING DECORATOR    #
+#######################
+
+def smart_string(obj):
+    # FUTURE: Unicode strings should probably be normalized to a specific
+    # encoding and non-unicode strings should be converted to unicode too.
+#    if isinstance(obj, unicode):
+#        obj = obj.encode(settings.DEFAULT_CHARSET)
+#    else:
+#        obj = unicode(obj, settings.DEFAULT_CHARSET)
+    # FUTURE: Replace dumb string logic below with cool unicode logic above.
+    if not isinstance(obj, basestring):
+        obj = str(obj)
+    return obj
+
+def stringfilter(func):
+    """
+    Decorator for filters which should only receive strings. The object passed
+    as the first positional argument will be converted to a string.
+    """
+    def _dec(*args, **kwargs):
+        if args:
+            args = list(args)
+            args[0] = smart_string(args[0])
+        return func(*args, **kwargs)
+        
+    # Include a reference to the real function (used to check original
+    # arguments by the template parser).
+    _dec._decorated_function = getattr(func, '_decorated_function', func)
+    return _dec
+
 ###################
 # STRINGS         #
 ###################
@@ -15,32 +47,53 @@
 
 def addslashes(value):
     "Adds slashes - useful for passing strings to JavaScript, for example."
-    return value.replace('"', '\\"').replace("'", "\\'")
+    return value.replace('\\', '\\\\').replace('"', '\\"').replace("'", "\\'")
+addslashes = stringfilter(addslashes)
 
 def capfirst(value):
     "Capitalizes the first character of the value"
-    value = str(value)
     return value and value[0].upper() + value[1:]
-
+capfirst = stringfilter(capfirst)
+ 
 def fix_ampersands(value):
     "Replaces ampersands with ``&amp;`` entities"
     from django.utils.html import fix_ampersands
     return fix_ampersands(value)
+fix_ampersands = stringfilter(fix_ampersands)
 
-def floatformat(text):
+def floatformat(text, arg=-1):
     """
-    Displays a floating point number as 34.2 (with one decimal place) -- but
-    only if there's a point to be displayed
+    If called without an argument, displays a floating point
+    number as 34.2 -- but only if there's a point to be displayed.
+    With a positive numeric argument, it displays that many decimal places
+    always.
+    With a negative numeric argument, it will display that many decimal
+    places -- but only if there's places to be displayed.
+    Examples:
+
+    * num1 = 34.23234
+    * num2 = 34.00000
+    * num1|floatformat results in 34.2
+    * num2|floatformat is 34
+    * num1|floatformat:3 is 34.232
+    * num2|floatformat:3 is 34.000
+    * num1|floatformat:-3 is 34.232
+    * num2|floatformat:-3 is 34
     """
     try:
         f = float(text)
     except ValueError:
         return ''
+    try:
+        d = int(arg)
+    except ValueError:
+        return smart_string(f)
     m = f - int(f)
-    if m:
-        return '%.1f' % f
+    if not m and d < 0:
+        return '%d' % int(f)
     else:
-        return '%d' % int(f)
+        formatstr = '%%.%df' % abs(d)
+        return formatstr % f
 
 def linenumbers(value):
     "Displays text with line numbers"
@@ -51,22 +104,26 @@
     for i, line in enumerate(lines):
         lines[i] = ("%0" + width  + "d. %s") % (i + 1, escape(line))
     return '\n'.join(lines)
+linenumbers = stringfilter(linenumbers)
 
 def lower(value):
     "Converts a string into all lowercase"
     return value.lower()
+lower = stringfilter(lower)
 
 def make_list(value):
     """
     Returns the value turned into a list. For an integer, it's a list of
     digits. For a string, it's a list of characters.
     """
-    return list(str(value))
+    return list(value)
+make_list = stringfilter(make_list)
 
 def slugify(value):
     "Converts to lowercase, removes non-alpha chars and converts spaces to hyphens"
     value = re.sub('[^\w\s-]', '', value).strip().lower()
     return re.sub('[-\s]+', '-', value)
+slugify = stringfilter(slugify)
 
 def stringformat(value, arg):
     """
@@ -78,13 +135,14 @@
     of Python string formatting
     """
     try:
-        return ("%" + arg) % value
+        return ("%" + str(arg)) % value
     except (ValueError, TypeError):
         return ""
 
 def title(value):
     "Converts a string into titlecase"
     return re.sub("([a-z])'([A-Z])", lambda m: m.group(0).lower(), value.title())
+title = stringfilter(title)
 
 def truncatewords(value, arg):
     """
@@ -100,20 +158,42 @@
     if not isinstance(value, basestring):
         value = str(value)
     return truncate_words(value, length)
+truncatewords = stringfilter(truncatewords)
 
+def truncatewords_html(value, arg):
+    """
+    Truncates HTML after a certain number of words
+
+    Argument: Number of words to truncate after
+    """
+    from django.utils.text import truncate_html_words
+    try:
+        length = int(arg)
+    except ValueError: # invalid literal for int()
+        return value # Fail silently.
+    if not isinstance(value, basestring):
+        value = str(value)
+    return truncate_html_words(value, length)
+truncatewords_html = stringfilter(truncatewords_html)
+
 def upper(value):
     "Converts a string into all uppercase"
     return value.upper()
+upper = stringfilter(upper)
 
 def urlencode(value):
     "Escapes a value for use in a URL"
     import urllib
+    if not isinstance(value, basestring):
+        value = str(value)
     return urllib.quote(value)
+urlencode = stringfilter(urlencode)
 
 def urlize(value):
     "Converts URLs in plain text into clickable links"
     from django.utils.html import urlize
     return urlize(value, nofollow=True)
+urlize = stringfilter(urlize)
 
 def urlizetrunc(value, limit):
     """
@@ -124,10 +204,12 @@
     """
     from django.utils.html import urlize
     return urlize(value, trim_url_limit=int(limit), nofollow=True)
+urlizetrunc = stringfilter(urlizetrunc)
 
 def wordcount(value):
     "Returns the number of words"
     return len(value.split())
+wordcount = stringfilter(wordcount)
 
 def wordwrap(value, arg):
     """
@@ -136,7 +218,8 @@
     Argument: number of characters to wrap the text at.
     """
     from django.utils.text import wrap
-    return wrap(str(value), int(arg))
+    return wrap(value, int(arg))
+wordwrap = stringfilter(wordwrap)
 
 def ljust(value, arg):
     """
@@ -144,7 +227,8 @@
 
     Argument: field size
     """
-    return str(value).ljust(int(arg))
+    return value.ljust(int(arg))
+ljust = stringfilter(ljust)
 
 def rjust(value, arg):
     """
@@ -152,15 +236,18 @@
 
     Argument: field size
     """
-    return str(value).rjust(int(arg))
+    return value.rjust(int(arg))
+rjust = stringfilter(rjust)
 
 def center(value, arg):
     "Centers the value in a field of a given width"
-    return str(value).center(int(arg))
+    return value.center(int(arg))
+center = stringfilter(center)
 
 def cut(value, arg):
     "Removes all values of arg from the given string"
     return value.replace(arg, '')
+cut = stringfilter(cut)
 
 ###################
 # HTML STRINGS    #
@@ -170,15 +257,18 @@
     "Escapes a string's HTML"
     from django.utils.html import escape
     return escape(value)
+escape = stringfilter(escape)
 
 def linebreaks(value):
     "Converts newlines into <p> and <br />s"
     from django.utils.html import linebreaks
     return linebreaks(value)
+linebreaks = stringfilter(linebreaks)
 
 def linebreaksbr(value):
     "Converts newlines into <br />s"
     return value.replace('\n', '<br />')
+linebreaksbr = stringfilter(linebreaksbr)
 
 def removetags(value, tags):
     "Removes a space separated list of [X]HTML tags from the output"
@@ -189,13 +279,13 @@
     value = starttag_re.sub('', value)
     value = endtag_re.sub('', value)
     return value
+removetags = stringfilter(removetags)
 
 def striptags(value):
     "Strips all [X]HTML tags"
     from django.utils.html import strip_tags
-    if not isinstance(value, basestring):
-        value = str(value)
     return strip_tags(value)
+striptags = stringfilter(striptags)
 
 ###################
 # LISTS           #
@@ -230,7 +320,7 @@
 def join(value, arg):
     "Joins a list with a string, like Python's ``str.join(list)``"
     try:
-        return arg.join(map(str, value))
+        return arg.join(map(smart_string, value))
     except AttributeError: # fail silently but nicely
         return value
 
@@ -339,7 +429,7 @@
 def time(value, arg=None):
     "Formats a time according to the given format"
     from django.utils.dateformat import time_format
-    if not value:
+    if value in (None, ''):
         return ''
     if arg is None:
         arg = settings.TIME_FORMAT
@@ -421,7 +511,11 @@
     Format the value like a 'human-readable' file size (i.e. 13 KB, 4.1 MB, 102
     bytes, etc).
     """
-    bytes = float(bytes)
+    try:
+        bytes = float(bytes)
+    except TypeError:
+        return "0 bytes"
+        
     if bytes < 1024:
         return "%d byte%s" % (bytes, bytes != 1 and 's' or '')
     if bytes < 1024 * 1024:
@@ -437,7 +531,7 @@
     is used instead. If the provided argument contains a comma, the text before
     the comma is used for the singular case.
     """
-    if not ',' in arg: 
+    if not ',' in arg:
         arg = ',' + arg
     bits = arg.split(',')
     if len(bits) > 2:
@@ -512,6 +606,7 @@
 register.filter(timeuntil)
 register.filter(title)
 register.filter(truncatewords)
+register.filter(truncatewords_html)
 register.filter(unordered_list)
 register.filter(upper)
 register.filter(urlencode)

Modified: vendor/django/current/django/template/defaulttags.py
===================================================================
--- vendor/django/current/django/template/defaulttags.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/defaulttags.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,7 +1,7 @@
 "Default tags used by the template system, available to all templates."
 
 from django.template import Node, NodeList, Template, Context, resolve_variable
-from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END
+from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END
 from django.template import get_library, Library, InvalidTemplateLibrary
 from django.conf import settings
 import sys
@@ -13,14 +13,18 @@
         return ''
 
 class CycleNode(Node):
-    def __init__(self, cyclevars):
+    def __init__(self, cyclevars, variable_name=None):
         self.cyclevars = cyclevars
         self.cyclevars_len = len(cyclevars)
         self.counter = -1
+        self.variable_name = variable_name
 
     def render(self, context):
         self.counter += 1
-        return self.cyclevars[self.counter % self.cyclevars_len]
+        value = self.cyclevars[self.counter % self.cyclevars_len]
+        if self.variable_name:
+            context[self.variable_name] = value
+        return value
 
 class DebugNode(Node):
     def render(self, context):
@@ -86,7 +90,7 @@
             parentloop = {}
         context.push()
         try:
-            values = self.sequence.resolve(context)
+            values = self.sequence.resolve(context, True)
         except VariableDoesNotExist:
             values = []
         if values is None:
@@ -120,15 +124,27 @@
         return nodelist.render(context)
 
 class IfChangedNode(Node):
-    def __init__(self, nodelist):
+    def __init__(self, nodelist, *varlist):
         self.nodelist = nodelist
         self._last_seen = None
+        self._varlist = varlist
 
     def render(self, context):
-        content = self.nodelist.render(context)
-        if content != self._last_seen:
+        if context.has_key('forloop') and context['forloop']['first']:
+            self._last_seen = None
+        try:
+            if self._varlist:
+                # Consider multiple parameters.
+                # This automatically behaves like a OR evaluation of the multiple variables.
+                compare_to = [resolve_variable(var, context) for var in self._varlist]
+            else:
+                compare_to = self.nodelist.render(context)
+        except VariableDoesNotExist:
+            compare_to = None        
+
+        if  compare_to != self._last_seen:
             firstloop = (self._last_seen == None)
-            self._last_seen = content
+            self._last_seen = compare_to
             context.push()
             context['ifchanged'] = {'firstloop': firstloop}
             content = self.nodelist.render(context)
@@ -212,13 +228,13 @@
         self.var_name = var_name
 
     def render(self, context):
-        obj_list = self.target.resolve(context)
-        if obj_list == '': # target_var wasn't found in context; fail silently
+        obj_list = self.target.resolve(context, True)
+        if obj_list == None: # target_var wasn't found in context; fail silently
             context[self.var_name] = []
             return ''
         output = [] # list of dictionaries in the format {'grouper': 'key', 'list': [list of contents]}
         for obj in obj_list:
-            grouper = self.expression.resolve(Context({'var': obj}))
+            grouper = self.expression.resolve(Context({'var': obj}), True)
             # TODO: Is this a sensible way to determine equality?
             if output and repr(output[-1]['grouper']) == repr(grouper):
                 output[-1]['list'].append(obj)
@@ -251,7 +267,7 @@
             output = ''
         if self.parsed:
             try:
-                t = Template(output)
+                t = Template(output, name=self.filepath)
                 return t.render(context)
             except TemplateSyntaxError, e:
                 if settings.DEBUG:
@@ -289,6 +305,8 @@
                'closevariable': VARIABLE_TAG_END,
                'openbrace': SINGLE_BRACE_START,
                'closebrace': SINGLE_BRACE_END,
+               'opencomment': COMMENT_TAG_START,
+               'closecomment': COMMENT_TAG_END,
                }
 
     def __init__(self, tagtype):
@@ -297,6 +315,25 @@
     def render(self, context):
         return self.mapping.get(self.tagtype, '')
 
+class URLNode(Node):
+    def __init__(self, view_name, args, kwargs):
+        self.view_name = view_name
+        self.args = args
+        self.kwargs = kwargs
+      
+    def render(self, context):
+        from django.core.urlresolvers import reverse, NoReverseMatch
+        args = [arg.resolve(context) for arg in self.args]
+        kwargs = dict([(k, v.resolve(context)) for k, v in self.kwargs.items()])
+        try:
+            return reverse(self.view_name, args=args, kwargs=kwargs)
+        except NoReverseMatch:
+            try:
+                project_name = settings.SETTINGS_MODULE.split('.')[0]
+                return reverse(project_name + '.' + self.view_name, args=args, kwargs=kwargs)
+            except NoReverseMatch:
+                return ''
+
 class WidthRatioNode(Node):
     def __init__(self, val_expr, max_expr, max_width):
         self.val_expr = val_expr
@@ -385,7 +422,7 @@
             raise TemplateSyntaxError("Second 'cycle' argument must be 'as'")
         cyclevars = [v for v in args[1].split(",") if v]    # split and kill blanks
         name = args[3]
-        node = CycleNode(cyclevars)
+        node = CycleNode(cyclevars, name)
 
         if not hasattr(parser, '_namedCycleNodes'):
             parser._namedCycleNodes = {}
@@ -398,6 +435,15 @@
 cycle = register.tag(cycle)
 
 def debug(parser, token):
+    """
+    Output a whole load of debugging information, including the current context and imported modules.
+
+    Sample usage::
+
+        <pre>
+            {% debug %}
+        </pre>
+    """
     return DebugNode()
 debug = register.tag(debug)
 
@@ -501,21 +547,6 @@
 do_for = register.tag("for", do_for)
 
 def do_ifequal(parser, token, negate):
-    """
-    Output the contents of the block if the two arguments equal/don't equal each other.
-
-    Examples::
-
-        {% ifequal user.id comment.user_id %}
-            ...
-        {% endifequal %}
-
-        {% ifnotequal user.id comment.user_id %}
-            ...
-        {% else %}
-            ...
-        {% endifnotequal %}
-    """
     bits = list(token.split_contents())
     if len(bits) != 3:
         raise TemplateSyntaxError, "%r takes two arguments" % bits[0]
@@ -531,11 +562,27 @@
 
 #@register.tag
 def ifequal(parser, token):
+    """
+    Output the contents of the block if the two arguments equal each other.
+
+    Examples::
+
+        {% ifequal user.id comment.user_id %}
+            ...
+        {% endifequal %}
+
+        {% ifnotequal user.id comment.user_id %}
+            ...
+        {% else %}
+            ...
+        {% endifnotequal %}
+    """
     return do_ifequal(parser, token, False)
 ifequal = register.tag(ifequal)
 
 #@register.tag
 def ifnotequal(parser, token):
+    """Output the contents of the block if the two arguments are not equal. See ifequal."""
     return do_ifequal(parser, token, True)
 ifnotequal = register.tag(ifnotequal)
 
@@ -626,23 +673,34 @@
     """
     Check if a value has changed from the last iteration of a loop.
 
-    The 'ifchanged' block tag is used within a loop. It checks its own rendered
-    contents against its previous state and only displays its content if the
-    value has changed::
+    The 'ifchanged' block tag is used within a loop. It has two possible uses.
 
-        <h1>Archive for {{ year }}</h1>
+    1. Checks its own rendered contents against its previous state and only
+       displays the content if it has changed. For example, this displays a list of
+       days, only displaying the month if it changes::
 
-        {% for date in days %}
-        {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
-        <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
-        {% endfor %}
+            <h1>Archive for {{ year }}</h1>
+
+            {% for date in days %}
+                {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
+                <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
+            {% endfor %}
+
+    2. If given a variable, check whether that variable has changed. For example, the
+       following shows the date every time it changes, but only shows the hour if both
+       the hour and the date have changed::
+
+            {% for date in days %}
+                {% ifchanged date.date %} {{ date.date }} {% endifchanged %}
+                {% ifchanged date.hour date.date %}
+                    {{ date.hour }}
+                {% endifchanged %}
+            {% endfor %}
     """
     bits = token.contents.split()
-    if len(bits) != 1:
-        raise TemplateSyntaxError, "'ifchanged' tag takes no arguments"
     nodelist = parser.parse(('endifchanged',))
     parser.delete_first_token()
-    return IfChangedNode(nodelist)
+    return IfChangedNode(nodelist, *bits[1:])
 ifchanged = register.tag(ifchanged)
 
 #@register.tag
@@ -825,6 +883,8 @@
         ``closevariable``   ``}}``
         ``openbrace``       ``{``
         ``closebrace``      ``}``
+        ``opencomment``     ``{#``
+        ``closecomment``    ``#}``
         ==================  =======
     """
     bits = token.contents.split()
@@ -837,6 +897,51 @@
     return TemplateTagNode(tag)
 templatetag = register.tag(templatetag)
 
+def url(parser, token):
+    """
+    Returns an absolute URL matching given view with its parameters. 
+    
+    This is a way to define links that aren't tied to a particular URL configuration::
+    
+        {% url path.to.some_view arg1,arg2,name1=value1 %}
+    
+    The first argument is a path to a view. It can be an absolute python path
+    or just ``app_name.view_name`` without the project name if the view is
+    located inside the project.  Other arguments are comma-separated values
+    that will be filled in place of positional and keyword arguments in the
+    URL. All arguments for the URL should be present.
+
+    For example if you have a view ``app_name.client`` taking client's id and
+    the corresponding line in a URLconf looks like this::
+    
+        ('^client/(\d+)/$', 'app_name.client')
+    
+    and this app's URLconf is included into the project's URLconf under some
+    path::
+    
+        ('^clients/', include('project_name.app_name.urls'))
+    
+    then in a template you can create a link for a certain client like this::
+    
+        {% url app_name.client client.id %}
+    
+    The URL will look like ``/clients/client/123/``.
+    """
+    bits = token.contents.split(' ', 2)
+    if len(bits) < 2:
+        raise TemplateSyntaxError, "'%s' takes at least one argument (path to a view)" % bits[0]
+    args = []
+    kwargs = {}
+    if len(bits) > 2:
+        for arg in bits[2].split(','):
+            if '=' in arg:
+                k, v = arg.split('=', 1)
+                kwargs[k] = parser.compile_filter(v)
+            else:
+                args.append(parser.compile_filter(arg))
+    return URLNode(bits[1], args, kwargs)
+url = register.tag(url)
+
 #@register.tag
 def widthratio(parser, token):
     """

Modified: vendor/django/current/django/template/loader.py
===================================================================
--- vendor/django/current/django/template/loader.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/loader.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -76,14 +76,16 @@
     Returns a compiled Template object for the given template name,
     handling template inheritance recursively.
     """
-    return get_template_from_string(*find_template_source(template_name))
+    source, origin = find_template_source(template_name)
+    template = get_template_from_string(source, origin, template_name)
+    return template
 
-def get_template_from_string(source, origin=None):
+def get_template_from_string(source, origin=None, name=None):
     """
     Returns a compiled Template object for the given template code,
     handling template inheritance recursively.
     """
-    return Template(source, origin)
+    return Template(source, origin, name)
 
 def render_to_string(template_name, dictionary=None, context_instance=None):
     """

Modified: vendor/django/current/django/template/loader_tags.py
===================================================================
--- vendor/django/current/django/template/loader_tags.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/loader_tags.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -51,13 +51,13 @@
                 error_msg += " Got this from the %r variable." % self.parent_name_expr #TODO nice repr.
             raise TemplateSyntaxError, error_msg
         if hasattr(parent, 'render'):
-            return parent
+            return parent # parent is a Template object
         try:
             source, origin = find_template_source(parent, self.template_dirs)
         except TemplateDoesNotExist:
             raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
         else:
-            return get_template_from_string(source, origin)
+            return get_template_from_string(source, origin, parent)
 
     def render(self, context):
         compiled_parent = self.get_parent(context)
@@ -129,7 +129,7 @@
         parser.__loaded_blocks.append(block_name)
     except AttributeError: # parser.__loaded_blocks isn't a list yet
         parser.__loaded_blocks = [block_name]
-    nodelist = parser.parse(('endblock',))
+    nodelist = parser.parse(('endblock', 'endblock %s' % block_name))
     parser.delete_first_token()
     return BlockNode(block_name, nodelist)
 

Modified: vendor/django/current/django/template/loaders/app_directories.py
===================================================================
--- vendor/django/current/django/template/loaders/app_directories.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/loaders/app_directories.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -15,9 +15,9 @@
         m, a = app[:i], app[i+1:]
     try:
         if a is None:
-            mod = __import__(m, '', '', [])
+            mod = __import__(m, {}, {}, [])
         else:
-            mod = getattr(__import__(m, '', '', [a]), a)
+            mod = getattr(__import__(m, {}, {}, [a]), a)
     except ImportError, e:
         raise ImproperlyConfigured, 'ImportError %s: %s' % (app, e.args[0])
     template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')

Modified: vendor/django/current/django/template/loaders/filesystem.py
===================================================================
--- vendor/django/current/django/template/loaders/filesystem.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/template/loaders/filesystem.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,7 +17,7 @@
             return (open(filepath).read(), filepath)
         except IOError:
             tried.append(filepath)
-    if template_dirs:
+    if tried:
         error_msg = "Tried %s" % tried
     else:
         error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."

Modified: vendor/django/current/django/templatetags/__init__.py
===================================================================
--- vendor/django/current/django/templatetags/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/templatetags/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,6 +2,6 @@
 
 for a in settings.INSTALLED_APPS:
     try:
-        __path__.extend(__import__(a + '.templatetags', '', '', ['']).__path__)
+        __path__.extend(__import__(a + '.templatetags', {}, {}, ['']).__path__)
     except ImportError:
         pass

Added: vendor/django/current/django/test/__init__.py
===================================================================
--- vendor/django/current/django/test/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,6 @@
+"""
+Django Unit Test and Doctest framework.
+"""
+
+from django.test.client import Client
+from django.test.testcases import TestCase

Added: vendor/django/current/django/test/client.py
===================================================================
--- vendor/django/current/django/test/client.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/client.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,256 @@
+import sys
+from cStringIO import StringIO
+from urlparse import urlparse
+from django.conf import settings
+from django.core.handlers.base import BaseHandler
+from django.core.handlers.wsgi import WSGIRequest
+from django.core.signals import got_request_exception
+from django.dispatch import dispatcher
+from django.http import urlencode, SimpleCookie
+from django.test import signals
+from django.utils.functional import curry
+
+BOUNDARY = 'BoUnDaRyStRiNg'
+MULTIPART_CONTENT = 'multipart/form-data; boundary=%s' % BOUNDARY
+
+class ClientHandler(BaseHandler):
+    """
+    A HTTP Handler that can be used for testing purposes.
+    Uses the WSGI interface to compose requests, but returns
+    the raw HttpResponse object
+    """
+    def __call__(self, environ):
+        from django.conf import settings
+        from django.core import signals
+
+        # Set up middleware if needed. We couldn't do this earlier, because
+        # settings weren't available.
+        if self._request_middleware is None:
+            self.load_middleware()
+
+        dispatcher.send(signal=signals.request_started)
+        try:
+            request = WSGIRequest(environ)
+            response = self.get_response(request)
+
+            # Apply response middleware
+            for middleware_method in self._response_middleware:
+                response = middleware_method(request, response)
+
+        finally:
+            dispatcher.send(signal=signals.request_finished)
+
+        return response
+
+def store_rendered_templates(store, signal, sender, template, context):
+    "A utility function for storing templates and contexts that are rendered"
+    store.setdefault('template',[]).append(template)
+    store.setdefault('context',[]).append(context)
+
+def encode_multipart(boundary, data):
+    """
+    A simple method for encoding multipart POST data from a dictionary of
+    form values.
+
+    The key will be used as the form data name; the value will be transmitted
+    as content. If the value is a file, the contents of the file will be sent
+    as an application/octet-stream; otherwise, str(value) will be sent.
+    """
+    lines = []
+    for (key, value) in data.items():
+        if isinstance(value, file):
+            lines.extend([
+                '--' + boundary,
+                'Content-Disposition: form-data; name="%s"' % key,
+                '',
+                '--' + boundary,
+                'Content-Disposition: form-data; name="%s_file"; filename="%s"' % (key, value.name),
+                'Content-Type: application/octet-stream',
+                '',
+                value.read()
+            ])
+        elif hasattr(value, '__iter__'): 
+            for item in value:
+                lines.extend([ 
+                    '--' + boundary, 
+                    'Content-Disposition: form-data; name="%s"' % key, 
+                    '', 
+                    str(item) 
+                ])
+        else:
+            lines.extend([
+                '--' + boundary,
+                'Content-Disposition: form-data; name="%s"' % key,
+                '',
+                str(value)
+            ])
+
+    lines.extend([
+        '--' + boundary + '--',
+        '',
+    ])
+    return '\r\n'.join(lines)
+
+class Client:
+    """
+    A class that can act as a client for testing purposes.
+
+    It allows the user to compose GET and POST requests, and
+    obtain the response that the server gave to those requests.
+    The server Response objects are annotated with the details
+    of the contexts and templates that were rendered during the
+    process of serving the request.
+
+    Client objects are stateful - they will retain cookie (and
+    thus session) details for the lifetime of the Client instance.
+
+    This is not intended as a replacement for Twill/Selenium or
+    the like - it is here to allow testing against the
+    contexts and templates produced by a view, rather than the
+    HTML rendered to the end-user.
+    """
+    def __init__(self, **defaults):
+        self.handler = ClientHandler()
+        self.defaults = defaults
+        self.cookies = SimpleCookie()
+        self.session = {}
+        self.exc_info = None
+        
+    def store_exc_info(self, *args, **kwargs):
+        """
+        Utility method that can be used to store exceptions when they are
+        generated by a view.
+        """
+        self.exc_info = sys.exc_info()
+
+    def request(self, **request):
+        """
+        The master request method. Composes the environment dictionary
+        and passes to the handler, returning the result of the handler.
+        Assumes defaults for the query environment, which can be overridden
+        using the arguments to the request.
+        """
+
+        environ = {
+            'HTTP_COOKIE':      self.cookies,
+            'PATH_INFO':         '/',
+            'QUERY_STRING':      '',
+            'REQUEST_METHOD':    'GET',
+            'SCRIPT_NAME':       None,
+            'SERVER_NAME':       'testserver',
+            'SERVER_PORT':       80,
+            'SERVER_PROTOCOL':   'HTTP/1.1',
+        }
+        environ.update(self.defaults)
+        environ.update(request)
+
+        # Curry a data dictionary into an instance of
+        # the template renderer callback function
+        data = {}
+        on_template_render = curry(store_rendered_templates, data)
+        dispatcher.connect(on_template_render, signal=signals.template_rendered)
+
+        # Capture exceptions created by the handler
+        dispatcher.connect(self.store_exc_info, signal=got_request_exception)
+
+        response = self.handler(environ)
+
+        # Add any rendered template detail to the response
+        # If there was only one template rendered (the most likely case),
+        # flatten the list to a single element
+        for detail in ('template', 'context'):
+            if data.get(detail):
+                if len(data[detail]) == 1:
+                    setattr(response, detail, data[detail][0]);
+                else:
+                    setattr(response, detail, data[detail])
+            else:
+                setattr(response, detail, None)
+
+        # Look for a signalled exception and reraise it
+        if self.exc_info:
+            raise self.exc_info[1], None, self.exc_info[2]
+        
+        # Update persistent cookie and session data
+        if response.cookies:
+            self.cookies.update(response.cookies)
+
+        if 'django.contrib.sessions' in settings.INSTALLED_APPS:
+            from django.contrib.sessions.middleware import SessionWrapper
+            cookie = self.cookies.get(settings.SESSION_COOKIE_NAME, None)
+            if cookie:
+                self.session = SessionWrapper(cookie.value)
+            
+        return response
+
+    def get(self, path, data={}, **extra):
+        "Request a response from the server using GET."
+        r = {
+            'CONTENT_LENGTH':  None,
+            'CONTENT_TYPE':    'text/html; charset=utf-8',
+            'PATH_INFO':       path,
+            'QUERY_STRING':    urlencode(data),
+            'REQUEST_METHOD': 'GET',
+        }
+        r.update(extra)
+
+        return self.request(**r)
+
+    def post(self, path, data={}, content_type=MULTIPART_CONTENT, **extra):
+        "Request a response from the server using POST."
+
+        if content_type is MULTIPART_CONTENT:
+            post_data = encode_multipart(BOUNDARY, data)
+        else:
+            post_data = data
+
+        r = {
+            'CONTENT_LENGTH': len(post_data),
+            'CONTENT_TYPE':   content_type,
+            'PATH_INFO':      path,
+            'REQUEST_METHOD': 'POST',
+            'wsgi.input':     StringIO(post_data),
+        }
+        r.update(extra)
+
+        return self.request(**r)
+
+    def login(self, path, username, password, **extra):
+        """
+        A specialized sequence of GET and POST to log into a view that
+        is protected by a @login_required access decorator.
+
+        path should be the URL of the page that is login protected.
+
+        Returns the response from GETting the requested URL after
+        login is complete. Returns False if login process failed.
+        """
+        # First, GET the page that is login protected.
+        # This page will redirect to the login page.
+        response = self.get(path)
+        if response.status_code != 302:
+            return False
+
+        _, _, login_path, _, data, _= urlparse(response['Location'])
+        next = data.split('=')[1]
+
+        # Second, GET the login page; required to set up cookies
+        response = self.get(login_path, **extra)
+        if response.status_code != 200:
+            return False
+
+        # Last, POST the login data.
+        form_data = {
+            'username': username,
+            'password': password,
+            'next' : next,
+        }
+        response = self.post(login_path, data=form_data, **extra)
+
+        # Login page should 302 redirect to the originally requested page
+        if (response.status_code != 302 or 
+                urlparse(response['Location'])[2] != path):
+            return False
+
+        # Since we are logged in, request the actual page again
+        return self.get(path)

Added: vendor/django/current/django/test/doctest.py
===================================================================
--- vendor/django/current/django/test/doctest.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/doctest.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2669 @@
+# Module doctest.
+# Released to the public domain 16-Jan-2001, by Tim Peters (tim at python.org).
+# Major enhancements and refactoring by:
+#     Jim Fulton
+#     Edward Loper
+
+# Provided as-is; use at your own risk; no warranty; no promises; enjoy!
+
+r"""Module doctest -- a framework for running examples in docstrings.
+
+In simplest use, end each module M to be tested with:
+
+def _test():
+    import doctest
+    doctest.testmod()
+
+if __name__ == "__main__":
+    _test()
+
+Then running the module as a script will cause the examples in the
+docstrings to get executed and verified:
+
+python M.py
+
+This won't display anything unless an example fails, in which case the
+failing example(s) and the cause(s) of the failure(s) are printed to stdout
+(why not stderr? because stderr is a lame hack <0.2 wink>), and the final
+line of output is "Test failed.".
+
+Run it with the -v switch instead:
+
+python M.py -v
+
+and a detailed report of all examples tried is printed to stdout, along
+with assorted summaries at the end.
+
+You can force verbose mode by passing "verbose=True" to testmod, or prohibit
+it by passing "verbose=False".  In either of those cases, sys.argv is not
+examined by testmod.
+
+There are a variety of other ways to run doctests, including integration
+with the unittest framework, and support for running non-Python text
+files containing doctests.  There are also many ways to override parts
+of doctest's default behaviors.  See the Library Reference Manual for
+details.
+"""
+
+__docformat__ = 'reStructuredText en'
+
+__all__ = [
+    # 0, Option Flags
+    'register_optionflag',
+    'DONT_ACCEPT_TRUE_FOR_1',
+    'DONT_ACCEPT_BLANKLINE',
+    'NORMALIZE_WHITESPACE',
+    'ELLIPSIS',
+    'IGNORE_EXCEPTION_DETAIL',
+    'COMPARISON_FLAGS',
+    'REPORT_UDIFF',
+    'REPORT_CDIFF',
+    'REPORT_NDIFF',
+    'REPORT_ONLY_FIRST_FAILURE',
+    'REPORTING_FLAGS',
+    # 1. Utility Functions
+    'is_private',
+    # 2. Example & DocTest
+    'Example',
+    'DocTest',
+    # 3. Doctest Parser
+    'DocTestParser',
+    # 4. Doctest Finder
+    'DocTestFinder',
+    # 5. Doctest Runner
+    'DocTestRunner',
+    'OutputChecker',
+    'DocTestFailure',
+    'UnexpectedException',
+    'DebugRunner',
+    # 6. Test Functions
+    'testmod',
+    'testfile',
+    'run_docstring_examples',
+    # 7. Tester
+    'Tester',
+    # 8. Unittest Support
+    'DocTestSuite',
+    'DocFileSuite',
+    'set_unittest_reportflags',
+    # 9. Debugging Support
+    'script_from_examples',
+    'testsource',
+    'debug_src',
+    'debug',
+]
+
+import __future__
+
+import sys, traceback, inspect, linecache, os, re, types
+import unittest, difflib, pdb, tempfile
+import warnings
+from StringIO import StringIO
+
+# Don't whine about the deprecated is_private function in this
+# module's tests.
+warnings.filterwarnings("ignore", "is_private", DeprecationWarning,
+                        __name__, 0)
+
+# There are 4 basic classes:
+#  - Example: a <source, want> pair, plus an intra-docstring line number.
+#  - DocTest: a collection of examples, parsed from a docstring, plus
+#    info about where the docstring came from (name, filename, lineno).
+#  - DocTestFinder: extracts DocTests from a given object's docstring and
+#    its contained objects' docstrings.
+#  - DocTestRunner: runs DocTest cases, and accumulates statistics.
+#
+# So the basic picture is:
+#
+#                             list of:
+# +------+                   +---------+                   +-------+
+# |object| --DocTestFinder-> | DocTest | --DocTestRunner-> |results|
+# +------+                   +---------+                   +-------+
+#                            | Example |
+#                            |   ...   |
+#                            | Example |
+#                            +---------+
+
+# Option constants.
+
+OPTIONFLAGS_BY_NAME = {}
+def register_optionflag(name):
+    flag = 1 << len(OPTIONFLAGS_BY_NAME)
+    OPTIONFLAGS_BY_NAME[name] = flag
+    return flag
+
+DONT_ACCEPT_TRUE_FOR_1 = register_optionflag('DONT_ACCEPT_TRUE_FOR_1')
+DONT_ACCEPT_BLANKLINE = register_optionflag('DONT_ACCEPT_BLANKLINE')
+NORMALIZE_WHITESPACE = register_optionflag('NORMALIZE_WHITESPACE')
+ELLIPSIS = register_optionflag('ELLIPSIS')
+IGNORE_EXCEPTION_DETAIL = register_optionflag('IGNORE_EXCEPTION_DETAIL')
+
+COMPARISON_FLAGS = (DONT_ACCEPT_TRUE_FOR_1 |
+                    DONT_ACCEPT_BLANKLINE |
+                    NORMALIZE_WHITESPACE |
+                    ELLIPSIS |
+                    IGNORE_EXCEPTION_DETAIL)
+
+REPORT_UDIFF = register_optionflag('REPORT_UDIFF')
+REPORT_CDIFF = register_optionflag('REPORT_CDIFF')
+REPORT_NDIFF = register_optionflag('REPORT_NDIFF')
+REPORT_ONLY_FIRST_FAILURE = register_optionflag('REPORT_ONLY_FIRST_FAILURE')
+
+REPORTING_FLAGS = (REPORT_UDIFF |
+                   REPORT_CDIFF |
+                   REPORT_NDIFF |
+                   REPORT_ONLY_FIRST_FAILURE)
+
+# Special string markers for use in `want` strings:
+BLANKLINE_MARKER = '<BLANKLINE>'
+ELLIPSIS_MARKER = '...'
+
+######################################################################
+## Table of Contents
+######################################################################
+#  1. Utility Functions
+#  2. Example & DocTest -- store test cases
+#  3. DocTest Parser -- extracts examples from strings
+#  4. DocTest Finder -- extracts test cases from objects
+#  5. DocTest Runner -- runs test cases
+#  6. Test Functions -- convenient wrappers for testing
+#  7. Tester Class -- for backwards compatibility
+#  8. Unittest Support
+#  9. Debugging Support
+# 10. Example Usage
+
+######################################################################
+## 1. Utility Functions
+######################################################################
+
+def is_private(prefix, base):
+    """prefix, base -> true iff name prefix + "." + base is "private".
+
+    Prefix may be an empty string, and base does not contain a period.
+    Prefix is ignored (although functions you write conforming to this
+    protocol may make use of it).
+    Return true iff base begins with an (at least one) underscore, but
+    does not both begin and end with (at least) two underscores.
+
+    >>> is_private("a.b", "my_func")
+    False
+    >>> is_private("____", "_my_func")
+    True
+    >>> is_private("someclass", "__init__")
+    False
+    >>> is_private("sometypo", "__init_")
+    True
+    >>> is_private("x.y.z", "_")
+    True
+    >>> is_private("_x.y.z", "__")
+    False
+    >>> is_private("", "")  # senseless but consistent
+    False
+    """
+    warnings.warn("is_private is deprecated; it wasn't useful; "
+                  "examine DocTestFinder.find() lists instead",
+                  DeprecationWarning, stacklevel=2)
+    return base[:1] == "_" and not base[:2] == "__" == base[-2:]
+
+def _extract_future_flags(globs):
+    """
+    Return the compiler-flags associated with the future features that
+    have been imported into the given namespace (globs).
+    """
+    flags = 0
+    for fname in __future__.all_feature_names:
+        feature = globs.get(fname, None)
+        if feature is getattr(__future__, fname):
+            flags |= feature.compiler_flag
+    return flags
+
+def _normalize_module(module, depth=2):
+    """
+    Return the module specified by `module`.  In particular:
+      - If `module` is a module, then return module.
+      - If `module` is a string, then import and return the
+        module with that name.
+      - If `module` is None, then return the calling module.
+        The calling module is assumed to be the module of
+        the stack frame at the given depth in the call stack.
+    """
+    if inspect.ismodule(module):
+        return module
+    elif isinstance(module, (str, unicode)):
+        return __import__(module, globals(), locals(), ["*"])
+    elif module is None:
+        return sys.modules[sys._getframe(depth).f_globals['__name__']]
+    else:
+        raise TypeError("Expected a module, string, or None")
+
+def _indent(s, indent=4):
+    """
+    Add the given number of space characters to the beginning every
+    non-blank line in `s`, and return the result.
+    """
+    # This regexp matches the start of non-blank lines:
+    return re.sub('(?m)^(?!$)', indent*' ', s)
+
+def _exception_traceback(exc_info):
+    """
+    Return a string containing a traceback message for the given
+    exc_info tuple (as returned by sys.exc_info()).
+    """
+    # Get a traceback message.
+    excout = StringIO()
+    exc_type, exc_val, exc_tb = exc_info
+    traceback.print_exception(exc_type, exc_val, exc_tb, file=excout)
+    return excout.getvalue()
+
+# Override some StringIO methods.
+class _SpoofOut(StringIO):
+    def getvalue(self):
+        result = StringIO.getvalue(self)
+        # If anything at all was written, make sure there's a trailing
+        # newline.  There's no way for the expected output to indicate
+        # that a trailing newline is missing.
+        if result and not result.endswith("\n"):
+            result += "\n"
+        # Prevent softspace from screwing up the next test case, in
+        # case they used print with a trailing comma in an example.
+        if hasattr(self, "softspace"):
+            del self.softspace
+        return result
+
+    def truncate(self,   size=None):
+        StringIO.truncate(self, size)
+        if hasattr(self, "softspace"):
+            del self.softspace
+
+# Worst-case linear-time ellipsis matching.
+def _ellipsis_match(want, got):
+    """
+    Essentially the only subtle case:
+    >>> _ellipsis_match('aa...aa', 'aaa')
+    False
+    """
+    if ELLIPSIS_MARKER not in want:
+        return want == got
+
+    # Find "the real" strings.
+    ws = want.split(ELLIPSIS_MARKER)
+    assert len(ws) >= 2
+
+    # Deal with exact matches possibly needed at one or both ends.
+    startpos, endpos = 0, len(got)
+    w = ws[0]
+    if w:   # starts with exact match
+        if got.startswith(w):
+            startpos = len(w)
+            del ws[0]
+        else:
+            return False
+    w = ws[-1]
+    if w:   # ends with exact match
+        if got.endswith(w):
+            endpos -= len(w)
+            del ws[-1]
+        else:
+            return False
+
+    if startpos > endpos:
+        # Exact end matches required more characters than we have, as in
+        # _ellipsis_match('aa...aa', 'aaa')
+        return False
+
+    # For the rest, we only need to find the leftmost non-overlapping
+    # match for each piece.  If there's no overall match that way alone,
+    # there's no overall match period.
+    for w in ws:
+        # w may be '' at times, if there are consecutive ellipses, or
+        # due to an ellipsis at the start or end of `want`.  That's OK.
+        # Search for an empty string succeeds, and doesn't change startpos.
+        startpos = got.find(w, startpos, endpos)
+        if startpos < 0:
+            return False
+        startpos += len(w)
+
+    return True
+
+def _comment_line(line):
+    "Return a commented form of the given line"
+    line = line.rstrip()
+    if line:
+        return '# '+line
+    else:
+        return '#'
+
+class _OutputRedirectingPdb(pdb.Pdb):
+    """
+    A specialized version of the python debugger that redirects stdout
+    to a given stream when interacting with the user.  Stdout is *not*
+    redirected when traced code is executed.
+    """
+    def __init__(self, out):
+        self.__out = out
+        pdb.Pdb.__init__(self)
+
+    def trace_dispatch(self, *args):
+        # Redirect stdout to the given stream.
+        save_stdout = sys.stdout
+        sys.stdout = self.__out
+        # Call Pdb's trace dispatch method.
+        try:
+            return pdb.Pdb.trace_dispatch(self, *args)
+        finally:
+            sys.stdout = save_stdout
+
+# [XX] Normalize with respect to os.path.pardir?
+def _module_relative_path(module, path):
+    if not inspect.ismodule(module):
+        raise TypeError, 'Expected a module: %r' % module
+    if path.startswith('/'):
+        raise ValueError, 'Module-relative files may not have absolute paths'
+
+    # Find the base directory for the path.
+    if hasattr(module, '__file__'):
+        # A normal module/package
+        basedir = os.path.split(module.__file__)[0]
+    elif module.__name__ == '__main__':
+        # An interactive session.
+        if len(sys.argv)>0 and sys.argv[0] != '':
+            basedir = os.path.split(sys.argv[0])[0]
+        else:
+            basedir = os.curdir
+    else:
+        # A module w/o __file__ (this includes builtins)
+        raise ValueError("Can't resolve paths relative to the module " +
+                         module + " (it has no __file__)")
+
+    # Combine the base directory and the path.
+    return os.path.join(basedir, *(path.split('/')))
+
+######################################################################
+## 2. Example & DocTest
+######################################################################
+## - An "example" is a <source, want> pair, where "source" is a
+##   fragment of source code, and "want" is the expected output for
+##   "source."  The Example class also includes information about
+##   where the example was extracted from.
+##
+## - A "doctest" is a collection of examples, typically extracted from
+##   a string (such as an object's docstring).  The DocTest class also
+##   includes information about where the string was extracted from.
+
+class Example:
+    """
+    A single doctest example, consisting of source code and expected
+    output.  `Example` defines the following attributes:
+
+      - source: A single Python statement, always ending with a newline.
+        The constructor adds a newline if needed.
+
+      - want: The expected output from running the source code (either
+        from stdout, or a traceback in case of exception).  `want` ends
+        with a newline unless it's empty, in which case it's an empty
+        string.  The constructor adds a newline if needed.
+
+      - exc_msg: The exception message generated by the example, if
+        the example is expected to generate an exception; or `None` if
+        it is not expected to generate an exception.  This exception
+        message is compared against the return value of
+        `traceback.format_exception_only()`.  `exc_msg` ends with a
+        newline unless it's `None`.  The constructor adds a newline
+        if needed.
+
+      - lineno: The line number within the DocTest string containing
+        this Example where the Example begins.  This line number is
+        zero-based, with respect to the beginning of the DocTest.
+
+      - indent: The example's indentation in the DocTest string.
+        I.e., the number of space characters that preceed the
+        example's first prompt.
+
+      - options: A dictionary mapping from option flags to True or
+        False, which is used to override default options for this
+        example.  Any option flags not contained in this dictionary
+        are left at their default value (as specified by the
+        DocTestRunner's optionflags).  By default, no options are set.
+    """
+    def __init__(self, source, want, exc_msg=None, lineno=0, indent=0,
+                 options=None):
+        # Normalize inputs.
+        if not source.endswith('\n'):
+            source += '\n'
+        if want and not want.endswith('\n'):
+            want += '\n'
+        if exc_msg is not None and not exc_msg.endswith('\n'):
+            exc_msg += '\n'
+        # Store properties.
+        self.source = source
+        self.want = want
+        self.lineno = lineno
+        self.indent = indent
+        if options is None: options = {}
+        self.options = options
+        self.exc_msg = exc_msg
+
+class DocTest:
+    """
+    A collection of doctest examples that should be run in a single
+    namespace.  Each `DocTest` defines the following attributes:
+
+      - examples: the list of examples.
+
+      - globs: The namespace (aka globals) that the examples should
+        be run in.
+
+      - name: A name identifying the DocTest (typically, the name of
+        the object whose docstring this DocTest was extracted from).
+
+      - filename: The name of the file that this DocTest was extracted
+        from, or `None` if the filename is unknown.
+
+      - lineno: The line number within filename where this DocTest
+        begins, or `None` if the line number is unavailable.  This
+        line number is zero-based, with respect to the beginning of
+        the file.
+
+      - docstring: The string that the examples were extracted from,
+        or `None` if the string is unavailable.
+    """
+    def __init__(self, examples, globs, name, filename, lineno, docstring):
+        """
+        Create a new DocTest containing the given examples.  The
+        DocTest's globals are initialized with a copy of `globs`.
+        """
+        assert not isinstance(examples, basestring), \
+               "DocTest no longer accepts str; use DocTestParser instead"
+        self.examples = examples
+        self.docstring = docstring
+        self.globs = globs.copy()
+        self.name = name
+        self.filename = filename
+        self.lineno = lineno
+
+    def __repr__(self):
+        if len(self.examples) == 0:
+            examples = 'no examples'
+        elif len(self.examples) == 1:
+            examples = '1 example'
+        else:
+            examples = '%d examples' % len(self.examples)
+        return ('<DocTest %s from %s:%s (%s)>' %
+                (self.name, self.filename, self.lineno, examples))
+
+
+    # This lets us sort tests by name:
+    def __cmp__(self, other):
+        if not isinstance(other, DocTest):
+            return -1
+        return cmp((self.name, self.filename, self.lineno, id(self)),
+                   (other.name, other.filename, other.lineno, id(other)))
+
+######################################################################
+## 3. DocTestParser
+######################################################################
+
+class DocTestParser:
+    """
+    A class used to parse strings containing doctest examples.
+    """
+    # This regular expression is used to find doctest examples in a
+    # string.  It defines three groups: `source` is the source code
+    # (including leading indentation and prompts); `indent` is the
+    # indentation of the first (PS1) line of the source code; and
+    # `want` is the expected output (including leading indentation).
+    _EXAMPLE_RE = re.compile(r'''
+        # Source consists of a PS1 line followed by zero or more PS2 lines.
+        (?P<source>
+            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line
+            (?:\n           [ ]*  \.\.\. .*)*)  # PS2 lines
+        \n?
+        # Want consists of any non-blank lines that do not start with PS1.
+        (?P<want> (?:(?![ ]*$)    # Not a blank line
+                     (?![ ]*>>>)  # Not a line starting with PS1
+                     .*$\n?       # But any other line
+                  )*)
+        ''', re.MULTILINE | re.VERBOSE)
+
+    # A regular expression for handling `want` strings that contain
+    # expected exceptions.  It divides `want` into three pieces:
+    #    - the traceback header line (`hdr`)
+    #    - the traceback stack (`stack`)
+    #    - the exception message (`msg`), as generated by
+    #      traceback.format_exception_only()
+    # `msg` may have multiple lines.  We assume/require that the
+    # exception message is the first non-indented line starting with a word
+    # character following the traceback header line.
+    _EXCEPTION_RE = re.compile(r"""
+        # Grab the traceback header.  Different versions of Python have
+        # said different things on the first traceback line.
+        ^(?P<hdr> Traceback\ \(
+            (?: most\ recent\ call\ last
+            |   innermost\ last
+            ) \) :
+        )
+        \s* $                # toss trailing whitespace on the header.
+        (?P<stack> .*?)      # don't blink: absorb stuff until...
+        ^ (?P<msg> \w+ .*)   #     a line *starts* with alphanum.
+        """, re.VERBOSE | re.MULTILINE | re.DOTALL)
+
+    # A callable returning a true value iff its argument is a blank line
+    # or contains a single comment.
+    _IS_BLANK_OR_COMMENT = re.compile(r'^[ ]*(#.*)?$').match
+
+    def parse(self, string, name='<string>'):
+        """
+        Divide the given string into examples and intervening text,
+        and return them as a list of alternating Examples and strings.
+        Line numbers for the Examples are 0-based.  The optional
+        argument `name` is a name identifying this string, and is only
+        used for error messages.
+        """
+        string = string.expandtabs()
+        # If all lines begin with the same indentation, then strip it.
+        min_indent = self._min_indent(string)
+        if min_indent > 0:
+            string = '\n'.join([l[min_indent:] for l in string.split('\n')])
+
+        output = []
+        charno, lineno = 0, 0
+        # Find all doctest examples in the string:
+        for m in self._EXAMPLE_RE.finditer(string):
+            # Add the pre-example text to `output`.
+            output.append(string[charno:m.start()])
+            # Update lineno (lines before this example)
+            lineno += string.count('\n', charno, m.start())
+            # Extract info from the regexp match.
+            (source, options, want, exc_msg) = \
+                     self._parse_example(m, name, lineno)
+            # Create an Example, and add it to the list.
+            if not self._IS_BLANK_OR_COMMENT(source):
+                output.append( Example(source, want, exc_msg,
+                                    lineno=lineno,
+                                    indent=min_indent+len(m.group('indent')),
+                                    options=options) )
+            # Update lineno (lines inside this example)
+            lineno += string.count('\n', m.start(), m.end())
+            # Update charno.
+            charno = m.end()
+        # Add any remaining post-example text to `output`.
+        output.append(string[charno:])
+        return output
+
+    def get_doctest(self, string, globs, name, filename, lineno):
+        """
+        Extract all doctest examples from the given string, and
+        collect them into a `DocTest` object.
+
+        `globs`, `name`, `filename`, and `lineno` are attributes for
+        the new `DocTest` object.  See the documentation for `DocTest`
+        for more information.
+        """
+        return DocTest(self.get_examples(string, name), globs,
+                       name, filename, lineno, string)
+
+    def get_examples(self, string, name='<string>'):
+        """
+        Extract all doctest examples from the given string, and return
+        them as a list of `Example` objects.  Line numbers are
+        0-based, because it's most common in doctests that nothing
+        interesting appears on the same line as opening triple-quote,
+        and so the first interesting line is called \"line 1\" then.
+
+        The optional argument `name` is a name identifying this
+        string, and is only used for error messages.
+        """
+        return [x for x in self.parse(string, name)
+                if isinstance(x, Example)]
+
+    def _parse_example(self, m, name, lineno):
+        """
+        Given a regular expression match from `_EXAMPLE_RE` (`m`),
+        return a pair `(source, want)`, where `source` is the matched
+        example's source code (with prompts and indentation stripped);
+        and `want` is the example's expected output (with indentation
+        stripped).
+
+        `name` is the string's name, and `lineno` is the line number
+        where the example starts; both are used for error messages.
+        """
+        # Get the example's indentation level.
+        indent = len(m.group('indent'))
+
+        # Divide source into lines; check that they're properly
+        # indented; and then strip their indentation & prompts.
+        source_lines = m.group('source').split('\n')
+        self._check_prompt_blank(source_lines, indent, name, lineno)
+        self._check_prefix(source_lines[1:], ' '*indent + '.', name, lineno)
+        source = '\n'.join([sl[indent+4:] for sl in source_lines])
+
+        # Divide want into lines; check that it's properly indented; and
+        # then strip the indentation.  Spaces before the last newline should
+        # be preserved, so plain rstrip() isn't good enough.
+        want = m.group('want')
+        want_lines = want.split('\n')
+        if len(want_lines) > 1 and re.match(r' *$', want_lines[-1]):
+            del want_lines[-1]  # forget final newline & spaces after it
+        self._check_prefix(want_lines, ' '*indent, name,
+                           lineno + len(source_lines))
+        want = '\n'.join([wl[indent:] for wl in want_lines])
+
+        # If `want` contains a traceback message, then extract it.
+        m = self._EXCEPTION_RE.match(want)
+        if m:
+            exc_msg = m.group('msg')
+        else:
+            exc_msg = None
+
+        # Extract options from the source.
+        options = self._find_options(source, name, lineno)
+
+        return source, options, want, exc_msg
+
+    # This regular expression looks for option directives in the
+    # source code of an example.  Option directives are comments
+    # starting with "doctest:".  Warning: this may give false
+    # positives for string-literals that contain the string
+    # "#doctest:".  Eliminating these false positives would require
+    # actually parsing the string; but we limit them by ignoring any
+    # line containing "#doctest:" that is *followed* by a quote mark.
+    _OPTION_DIRECTIVE_RE = re.compile(r'#\s*doctest:\s*([^\n\'"]*)$',
+                                      re.MULTILINE)
+
+    def _find_options(self, source, name, lineno):
+        """
+        Return a dictionary containing option overrides extracted from
+        option directives in the given source string.
+
+        `name` is the string's name, and `lineno` is the line number
+        where the example starts; both are used for error messages.
+        """
+        options = {}
+        # (note: with the current regexp, this will match at most once:)
+        for m in self._OPTION_DIRECTIVE_RE.finditer(source):
+            option_strings = m.group(1).replace(',', ' ').split()
+            for option in option_strings:
+                if (option[0] not in '+-' or
+                    option[1:] not in OPTIONFLAGS_BY_NAME):
+                    raise ValueError('line %r of the doctest for %s '
+                                     'has an invalid option: %r' %
+                                     (lineno+1, name, option))
+                flag = OPTIONFLAGS_BY_NAME[option[1:]]
+                options[flag] = (option[0] == '+')
+        if options and self._IS_BLANK_OR_COMMENT(source):
+            raise ValueError('line %r of the doctest for %s has an option '
+                             'directive on a line with no example: %r' %
+                             (lineno, name, source))
+        return options
+
+    # This regular expression finds the indentation of every non-blank
+    # line in a string.
+    _INDENT_RE = re.compile('^([ ]*)(?=\S)', re.MULTILINE)
+
+    def _min_indent(self, s):
+        "Return the minimum indentation of any non-blank line in `s`"
+        indents = [len(indent) for indent in self._INDENT_RE.findall(s)]
+        if len(indents) > 0:
+            return min(indents)
+        else:
+            return 0
+
+    def _check_prompt_blank(self, lines, indent, name, lineno):
+        """
+        Given the lines of a source string (including prompts and
+        leading indentation), check to make sure that every prompt is
+        followed by a space character.  If any line is not followed by
+        a space character, then raise ValueError.
+        """
+        for i, line in enumerate(lines):
+            if len(line) >= indent+4 and line[indent+3] != ' ':
+                raise ValueError('line %r of the docstring for %s '
+                                 'lacks blank after %s: %r' %
+                                 (lineno+i+1, name,
+                                  line[indent:indent+3], line))
+
+    def _check_prefix(self, lines, prefix, name, lineno):
+        """
+        Check that every line in the given list starts with the given
+        prefix; if any line does not, then raise a ValueError.
+        """
+        for i, line in enumerate(lines):
+            if line and not line.startswith(prefix):
+                raise ValueError('line %r of the docstring for %s has '
+                                 'inconsistent leading whitespace: %r' %
+                                 (lineno+i+1, name, line))
+
+
+######################################################################
+## 4. DocTest Finder
+######################################################################
+
+class DocTestFinder:
+    """
+    A class used to extract the DocTests that are relevant to a given
+    object, from its docstring and the docstrings of its contained
+    objects.  Doctests can currently be extracted from the following
+    object types: modules, functions, classes, methods, staticmethods,
+    classmethods, and properties.
+    """
+
+    def __init__(self, verbose=False, parser=DocTestParser(),
+                 recurse=True, _namefilter=None, exclude_empty=True):
+        """
+        Create a new doctest finder.
+
+        The optional argument `parser` specifies a class or
+        function that should be used to create new DocTest objects (or
+        objects that implement the same interface as DocTest).  The
+        signature for this factory function should match the signature
+        of the DocTest constructor.
+
+        If the optional argument `recurse` is false, then `find` will
+        only examine the given object, and not any contained objects.
+
+        If the optional argument `exclude_empty` is false, then `find`
+        will include tests for objects with empty docstrings.
+        """
+        self._parser = parser
+        self._verbose = verbose
+        self._recurse = recurse
+        self._exclude_empty = exclude_empty
+        # _namefilter is undocumented, and exists only for temporary backward-
+        # compatibility support of testmod's deprecated isprivate mess.
+        self._namefilter = _namefilter
+
+    def find(self, obj, name=None, module=None, globs=None,
+             extraglobs=None):
+        """
+        Return a list of the DocTests that are defined by the given
+        object's docstring, or by any of its contained objects'
+        docstrings.
+
+        The optional parameter `module` is the module that contains
+        the given object.  If the module is not specified or is None, then
+        the test finder will attempt to automatically determine the
+        correct module.  The object's module is used:
+
+            - As a default namespace, if `globs` is not specified.
+            - To prevent the DocTestFinder from extracting DocTests
+              from objects that are imported from other modules.
+            - To find the name of the file containing the object.
+            - To help find the line number of the object within its
+              file.
+
+        Contained objects whose module does not match `module` are ignored.
+
+        If `module` is False, no attempt to find the module will be made.
+        This is obscure, of use mostly in tests:  if `module` is False, or
+        is None but cannot be found automatically, then all objects are
+        considered to belong to the (non-existent) module, so all contained
+        objects will (recursively) be searched for doctests.
+
+        The globals for each DocTest is formed by combining `globs`
+        and `extraglobs` (bindings in `extraglobs` override bindings
+        in `globs`).  A new copy of the globals dictionary is created
+        for each DocTest.  If `globs` is not specified, then it
+        defaults to the module's `__dict__`, if specified, or {}
+        otherwise.  If `extraglobs` is not specified, then it defaults
+        to {}.
+
+        """
+        # If name was not specified, then extract it from the object.
+        if name is None:
+            name = getattr(obj, '__name__', None)
+            if name is None:
+                raise ValueError("DocTestFinder.find: name must be given "
+                        "when obj.__name__ doesn't exist: %r" %
+                                 (type(obj),))
+
+        # Find the module that contains the given object (if obj is
+        # a module, then module=obj.).  Note: this may fail, in which
+        # case module will be None.
+        if module is False:
+            module = None
+        elif module is None:
+            module = inspect.getmodule(obj)
+
+        # Read the module's source code.  This is used by
+        # DocTestFinder._find_lineno to find the line number for a
+        # given object's docstring.
+        try:
+            file = inspect.getsourcefile(obj) or inspect.getfile(obj)
+            source_lines = linecache.getlines(file)
+            if not source_lines:
+                source_lines = None
+        except TypeError:
+            source_lines = None
+
+        # Initialize globals, and merge in extraglobs.
+        if globs is None:
+            if module is None:
+                globs = {}
+            else:
+                globs = module.__dict__.copy()
+        else:
+            globs = globs.copy()
+        if extraglobs is not None:
+            globs.update(extraglobs)
+
+        # Recursively explore `obj`, extracting DocTests.
+        tests = []
+        self._find(tests, obj, name, module, source_lines, globs, {})
+        return tests
+
+    def _filter(self, obj, prefix, base):
+        """
+        Return true if the given object should not be examined.
+        """
+        return (self._namefilter is not None and
+                self._namefilter(prefix, base))
+
+    def _from_module(self, module, object):
+        """
+        Return true if the given object is defined in the given
+        module.
+        """
+        if module is None:
+            return True
+        elif inspect.isfunction(object):
+            return module.__dict__ is object.func_globals
+        elif inspect.isclass(object):
+            return module.__name__ == object.__module__
+        elif inspect.getmodule(object) is not None:
+            return module is inspect.getmodule(object)
+        elif hasattr(object, '__module__'):
+            return module.__name__ == object.__module__
+        elif isinstance(object, property):
+            return True # [XX] no way not be sure.
+        else:
+            raise ValueError("object must be a class or function")
+
+    def _find(self, tests, obj, name, module, source_lines, globs, seen):
+        """
+        Find tests for the given object and any contained objects, and
+        add them to `tests`.
+        """
+        if self._verbose:
+            print 'Finding tests in %s' % name
+
+        # If we've already processed this object, then ignore it.
+        if id(obj) in seen:
+            return
+        seen[id(obj)] = 1
+
+        # Find a test for this object, and add it to the list of tests.
+        test = self._get_test(obj, name, module, globs, source_lines)
+        if test is not None:
+            tests.append(test)
+
+        # Look for tests in a module's contained objects.
+        if inspect.ismodule(obj) and self._recurse:
+            for valname, val in obj.__dict__.items():
+                # Check if this contained object should be ignored.
+                if self._filter(val, name, valname):
+                    continue
+                valname = '%s.%s' % (name, valname)
+                # Recurse to functions & classes.
+                if ((inspect.isfunction(val) or inspect.isclass(val)) and
+                    self._from_module(module, val)):
+                    self._find(tests, val, valname, module, source_lines,
+                               globs, seen)
+
+        # Look for tests in a module's __test__ dictionary.
+        if inspect.ismodule(obj) and self._recurse:
+            for valname, val in getattr(obj, '__test__', {}).items():
+                if not isinstance(valname, basestring):
+                    raise ValueError("DocTestFinder.find: __test__ keys "
+                                     "must be strings: %r" %
+                                     (type(valname),))
+                if not (inspect.isfunction(val) or inspect.isclass(val) or
+                        inspect.ismethod(val) or inspect.ismodule(val) or
+                        isinstance(val, basestring)):
+                    raise ValueError("DocTestFinder.find: __test__ values "
+                                     "must be strings, functions, methods, "
+                                     "classes, or modules: %r" %
+                                     (type(val),))
+                valname = '%s.__test__.%s' % (name, valname)
+                self._find(tests, val, valname, module, source_lines,
+                           globs, seen)
+
+        # Look for tests in a class's contained objects.
+        if inspect.isclass(obj) and self._recurse:
+            for valname, val in obj.__dict__.items():
+                # Check if this contained object should be ignored.
+                if self._filter(val, name, valname):
+                    continue
+                # Special handling for staticmethod/classmethod.
+                if isinstance(val, staticmethod):
+                    val = getattr(obj, valname)
+                if isinstance(val, classmethod):
+                    val = getattr(obj, valname).im_func
+
+                # Recurse to methods, properties, and nested classes.
+                if ((inspect.isfunction(val) or inspect.isclass(val) or
+                      isinstance(val, property)) and
+                      self._from_module(module, val)):
+                    valname = '%s.%s' % (name, valname)
+                    self._find(tests, val, valname, module, source_lines,
+                               globs, seen)
+
+    def _get_test(self, obj, name, module, globs, source_lines):
+        """
+        Return a DocTest for the given object, if it defines a docstring;
+        otherwise, return None.
+        """
+        # Extract the object's docstring.  If it doesn't have one,
+        # then return None (no test for this object).
+        if isinstance(obj, basestring):
+            docstring = obj
+        else:
+            try:
+                if obj.__doc__ is None:
+                    docstring = ''
+                else:
+                    docstring = obj.__doc__
+                    if not isinstance(docstring, basestring):
+                        docstring = str(docstring)
+            except (TypeError, AttributeError):
+                docstring = ''
+
+        # Find the docstring's location in the file.
+        lineno = self._find_lineno(obj, source_lines)
+
+        # Don't bother if the docstring is empty.
+        if self._exclude_empty and not docstring:
+            return None
+
+        # Return a DocTest for this object.
+        if module is None:
+            filename = None
+        else:
+            filename = getattr(module, '__file__', module.__name__)
+            if filename[-4:] in (".pyc", ".pyo"):
+                filename = filename[:-1]
+        return self._parser.get_doctest(docstring, globs, name,
+                                        filename, lineno)
+
+    def _find_lineno(self, obj, source_lines):
+        """
+        Return a line number of the given object's docstring.  Note:
+        this method assumes that the object has a docstring.
+        """
+        lineno = None
+
+        # Find the line number for modules.
+        if inspect.ismodule(obj):
+            lineno = 0
+
+        # Find the line number for classes.
+        # Note: this could be fooled if a class is defined multiple
+        # times in a single file.
+        if inspect.isclass(obj):
+            if source_lines is None:
+                return None
+            pat = re.compile(r'^\s*class\s*%s\b' %
+                             getattr(obj, '__name__', '-'))
+            for i, line in enumerate(source_lines):
+                if pat.match(line):
+                    lineno = i
+                    break
+
+        # Find the line number for functions & methods.
+        if inspect.ismethod(obj): obj = obj.im_func
+        if inspect.isfunction(obj): obj = obj.func_code
+        if inspect.istraceback(obj): obj = obj.tb_frame
+        if inspect.isframe(obj): obj = obj.f_code
+        if inspect.iscode(obj):
+            lineno = getattr(obj, 'co_firstlineno', None)-1
+
+        # Find the line number where the docstring starts.  Assume
+        # that it's the first line that begins with a quote mark.
+        # Note: this could be fooled by a multiline function
+        # signature, where a continuation line begins with a quote
+        # mark.
+        if lineno is not None:
+            if source_lines is None:
+                return lineno+1
+            pat = re.compile('(^|.*:)\s*\w*("|\')')
+            for lineno in range(lineno, len(source_lines)):
+                if pat.match(source_lines[lineno]):
+                    return lineno
+
+        # We couldn't find the line number.
+        return None
+
+######################################################################
+## 5. DocTest Runner
+######################################################################
+
+class DocTestRunner:
+    """
+    A class used to run DocTest test cases, and accumulate statistics.
+    The `run` method is used to process a single DocTest case.  It
+    returns a tuple `(f, t)`, where `t` is the number of test cases
+    tried, and `f` is the number of test cases that failed.
+
+        >>> tests = DocTestFinder().find(_TestClass)
+        >>> runner = DocTestRunner(verbose=False)
+        >>> for test in tests:
+        ...     print runner.run(test)
+        (0, 2)
+        (0, 1)
+        (0, 2)
+        (0, 2)
+
+    The `summarize` method prints a summary of all the test cases that
+    have been run by the runner, and returns an aggregated `(f, t)`
+    tuple:
+
+        >>> runner.summarize(verbose=1)
+        4 items passed all tests:
+           2 tests in _TestClass
+           2 tests in _TestClass.__init__
+           2 tests in _TestClass.get
+           1 tests in _TestClass.square
+        7 tests in 4 items.
+        7 passed and 0 failed.
+        Test passed.
+        (0, 7)
+
+    The aggregated number of tried examples and failed examples is
+    also available via the `tries` and `failures` attributes:
+
+        >>> runner.tries
+        7
+        >>> runner.failures
+        0
+
+    The comparison between expected outputs and actual outputs is done
+    by an `OutputChecker`.  This comparison may be customized with a
+    number of option flags; see the documentation for `testmod` for
+    more information.  If the option flags are insufficient, then the
+    comparison may also be customized by passing a subclass of
+    `OutputChecker` to the constructor.
+
+    The test runner's display output can be controlled in two ways.
+    First, an output function (`out) can be passed to
+    `TestRunner.run`; this function will be called with strings that
+    should be displayed.  It defaults to `sys.stdout.write`.  If
+    capturing the output is not sufficient, then the display output
+    can be also customized by subclassing DocTestRunner, and
+    overriding the methods `report_start`, `report_success`,
+    `report_unexpected_exception`, and `report_failure`.
+    """
+    # This divider string is used to separate failure messages, and to
+    # separate sections of the summary.
+    DIVIDER = "*" * 70
+
+    def __init__(self, checker=None, verbose=None, optionflags=0):
+        """
+        Create a new test runner.
+
+        Optional keyword arg `checker` is the `OutputChecker` that
+        should be used to compare the expected outputs and actual
+        outputs of doctest examples.
+
+        Optional keyword arg 'verbose' prints lots of stuff if true,
+        only failures if false; by default, it's true iff '-v' is in
+        sys.argv.
+
+        Optional argument `optionflags` can be used to control how the
+        test runner compares expected output to actual output, and how
+        it displays failures.  See the documentation for `testmod` for
+        more information.
+        """
+        self._checker = checker or OutputChecker()
+        if verbose is None:
+            verbose = '-v' in sys.argv
+        self._verbose = verbose
+        self.optionflags = optionflags
+        self.original_optionflags = optionflags
+
+        # Keep track of the examples we've run.
+        self.tries = 0
+        self.failures = 0
+        self._name2ft = {}
+
+        # Create a fake output target for capturing doctest output.
+        self._fakeout = _SpoofOut()
+
+    #/////////////////////////////////////////////////////////////////
+    # Reporting methods
+    #/////////////////////////////////////////////////////////////////
+
+    def report_start(self, out, test, example):
+        """
+        Report that the test runner is about to process the given
+        example.  (Only displays a message if verbose=True)
+        """
+        if self._verbose:
+            if example.want:
+                out('Trying:\n' + _indent(example.source) +
+                    'Expecting:\n' + _indent(example.want))
+            else:
+                out('Trying:\n' + _indent(example.source) +
+                    'Expecting nothing\n')
+
+    def report_success(self, out, test, example, got):
+        """
+        Report that the given example ran successfully.  (Only
+        displays a message if verbose=True)
+        """
+        if self._verbose:
+            out("ok\n")
+
+    def report_failure(self, out, test, example, got):
+        """
+        Report that the given example failed.
+        """
+        out(self._failure_header(test, example) +
+            self._checker.output_difference(example, got, self.optionflags))
+
+    def report_unexpected_exception(self, out, test, example, exc_info):
+        """
+        Report that the given example raised an unexpected exception.
+        """
+        out(self._failure_header(test, example) +
+            'Exception raised:\n' + _indent(_exception_traceback(exc_info)))
+
+    def _failure_header(self, test, example):
+        out = [self.DIVIDER]
+        if test.filename:
+            if test.lineno is not None and example.lineno is not None:
+                lineno = test.lineno + example.lineno + 1
+            else:
+                lineno = '?'
+            out.append('File "%s", line %s, in %s' %
+                       (test.filename, lineno, test.name))
+        else:
+            out.append('Line %s, in %s' % (example.lineno+1, test.name))
+        out.append('Failed example:')
+        source = example.source
+        out.append(_indent(source))
+        return '\n'.join(out)
+
+    #/////////////////////////////////////////////////////////////////
+    # DocTest Running
+    #/////////////////////////////////////////////////////////////////
+
+    def __run(self, test, compileflags, out):
+        """
+        Run the examples in `test`.  Write the outcome of each example
+        with one of the `DocTestRunner.report_*` methods, using the
+        writer function `out`.  `compileflags` is the set of compiler
+        flags that should be used to execute examples.  Return a tuple
+        `(f, t)`, where `t` is the number of examples tried, and `f`
+        is the number of examples that failed.  The examples are run
+        in the namespace `test.globs`.
+        """
+        # Keep track of the number of failures and tries.
+        failures = tries = 0
+
+        # Save the option flags (since option directives can be used
+        # to modify them).
+        original_optionflags = self.optionflags
+
+        SUCCESS, FAILURE, BOOM = range(3) # `outcome` state
+
+        check = self._checker.check_output
+
+        # Process each example.
+        for examplenum, example in enumerate(test.examples):
+
+            # If REPORT_ONLY_FIRST_FAILURE is set, then suppress
+            # reporting after the first failure.
+            quiet = (self.optionflags & REPORT_ONLY_FIRST_FAILURE and
+                     failures > 0)
+
+            # Merge in the example's options.
+            self.optionflags = original_optionflags
+            if example.options:
+                for (optionflag, val) in example.options.items():
+                    if val:
+                        self.optionflags |= optionflag
+                    else:
+                        self.optionflags &= ~optionflag
+
+            # Record that we started this example.
+            tries += 1
+            if not quiet:
+                self.report_start(out, test, example)
+
+            # Use a special filename for compile(), so we can retrieve
+            # the source code during interactive debugging (see
+            # __patched_linecache_getlines).
+            filename = '<doctest %s[%d]>' % (test.name, examplenum)
+
+            # Run the example in the given context (globs), and record
+            # any exception that gets raised.  (But don't intercept
+            # keyboard interrupts.)
+            try:
+                # Don't blink!  This is where the user's code gets run.
+                exec compile(example.source, filename, "single",
+                             compileflags, 1) in test.globs
+                self.debugger.set_continue() # ==== Example Finished ====
+                exception = None
+            except KeyboardInterrupt:
+                raise
+            except:
+                exception = sys.exc_info()
+                self.debugger.set_continue() # ==== Example Finished ====
+
+            got = self._fakeout.getvalue()  # the actual output
+            self._fakeout.truncate(0)
+            outcome = FAILURE   # guilty until proved innocent or insane
+
+            # If the example executed without raising any exceptions,
+            # verify its output.
+            if exception is None:
+                if check(example.want, got, self.optionflags):
+                    outcome = SUCCESS
+
+            # The example raised an exception:  check if it was expected.
+            else:
+                exc_info = sys.exc_info()
+                exc_msg = traceback.format_exception_only(*exc_info[:2])[-1]
+                if not quiet:
+                    got += _exception_traceback(exc_info)
+
+                # If `example.exc_msg` is None, then we weren't expecting
+                # an exception.
+                if example.exc_msg is None:
+                    outcome = BOOM
+
+                # We expected an exception:  see whether it matches.
+                elif check(example.exc_msg, exc_msg, self.optionflags):
+                    outcome = SUCCESS
+
+                # Another chance if they didn't care about the detail.
+                elif self.optionflags & IGNORE_EXCEPTION_DETAIL:
+                    m1 = re.match(r'[^:]*:', example.exc_msg)
+                    m2 = re.match(r'[^:]*:', exc_msg)
+                    if m1 and m2 and check(m1.group(0), m2.group(0),
+                                           self.optionflags):
+                        outcome = SUCCESS
+
+            # Report the outcome.
+            if outcome is SUCCESS:
+                if not quiet:
+                    self.report_success(out, test, example, got)
+            elif outcome is FAILURE:
+                if not quiet:
+                    self.report_failure(out, test, example, got)
+                failures += 1
+            elif outcome is BOOM:
+                if not quiet:
+                    self.report_unexpected_exception(out, test, example,
+                                                     exc_info)
+                failures += 1
+            else:
+                assert False, ("unknown outcome", outcome)
+
+        # Restore the option flags (in case they were modified)
+        self.optionflags = original_optionflags
+
+        # Record and return the number of failures and tries.
+        self.__record_outcome(test, failures, tries)
+        return failures, tries
+
+    def __record_outcome(self, test, f, t):
+        """
+        Record the fact that the given DocTest (`test`) generated `f`
+        failures out of `t` tried examples.
+        """
+        f2, t2 = self._name2ft.get(test.name, (0,0))
+        self._name2ft[test.name] = (f+f2, t+t2)
+        self.failures += f
+        self.tries += t
+
+    __LINECACHE_FILENAME_RE = re.compile(r'<doctest '
+                                         r'(?P<name>[\w\.]+)'
+                                         r'\[(?P<examplenum>\d+)\]>$')
+    def __patched_linecache_getlines(self, filename, module_globals=None):
+        m = self.__LINECACHE_FILENAME_RE.match(filename)
+        if m and m.group('name') == self.test.name:
+            example = self.test.examples[int(m.group('examplenum'))]
+            return example.source.splitlines(True)
+        else:
+            if sys.version_info < (2, 5, 0):
+                return self.save_linecache_getlines(filename)
+            else:
+                return self.save_linecache_getlines(filename, module_globals)
+
+    def run(self, test, compileflags=None, out=None, clear_globs=True):
+        """
+        Run the examples in `test`, and display the results using the
+        writer function `out`.
+
+        The examples are run in the namespace `test.globs`.  If
+        `clear_globs` is true (the default), then this namespace will
+        be cleared after the test runs, to help with garbage
+        collection.  If you would like to examine the namespace after
+        the test completes, then use `clear_globs=False`.
+
+        `compileflags` gives the set of flags that should be used by
+        the Python compiler when running the examples.  If not
+        specified, then it will default to the set of future-import
+        flags that apply to `globs`.
+
+        The output of each example is checked using
+        `DocTestRunner.check_output`, and the results are formatted by
+        the `DocTestRunner.report_*` methods.
+        """
+        self.test = test
+
+        if compileflags is None:
+            compileflags = _extract_future_flags(test.globs)
+
+        save_stdout = sys.stdout
+        if out is None:
+            out = save_stdout.write
+        sys.stdout = self._fakeout
+
+        # Patch pdb.set_trace to restore sys.stdout during interactive
+        # debugging (so it's not still redirected to self._fakeout).
+        # Note that the interactive output will go to *our*
+        # save_stdout, even if that's not the real sys.stdout; this
+        # allows us to write test cases for the set_trace behavior.
+        save_set_trace = pdb.set_trace
+        self.debugger = _OutputRedirectingPdb(save_stdout)
+        self.debugger.reset()
+        pdb.set_trace = self.debugger.set_trace
+
+        # Patch linecache.getlines, so we can see the example's source
+        # when we're inside the debugger.
+        self.save_linecache_getlines = linecache.getlines
+        linecache.getlines = self.__patched_linecache_getlines
+
+        try:
+            return self.__run(test, compileflags, out)
+        finally:
+            sys.stdout = save_stdout
+            pdb.set_trace = save_set_trace
+            linecache.getlines = self.save_linecache_getlines
+            if clear_globs:
+                test.globs.clear()
+
+    #/////////////////////////////////////////////////////////////////
+    # Summarization
+    #/////////////////////////////////////////////////////////////////
+    def summarize(self, verbose=None):
+        """
+        Print a summary of all the test cases that have been run by
+        this DocTestRunner, and return a tuple `(f, t)`, where `f` is
+        the total number of failed examples, and `t` is the total
+        number of tried examples.
+
+        The optional `verbose` argument controls how detailed the
+        summary is.  If the verbosity is not specified, then the
+        DocTestRunner's verbosity is used.
+        """
+        if verbose is None:
+            verbose = self._verbose
+        notests = []
+        passed = []
+        failed = []
+        totalt = totalf = 0
+        for x in self._name2ft.items():
+            name, (f, t) = x
+            assert f <= t
+            totalt += t
+            totalf += f
+            if t == 0:
+                notests.append(name)
+            elif f == 0:
+                passed.append( (name, t) )
+            else:
+                failed.append(x)
+        if verbose:
+            if notests:
+                print len(notests), "items had no tests:"
+                notests.sort()
+                for thing in notests:
+                    print "   ", thing
+            if passed:
+                print len(passed), "items passed all tests:"
+                passed.sort()
+                for thing, count in passed:
+                    print " %3d tests in %s" % (count, thing)
+        if failed:
+            print self.DIVIDER
+            print len(failed), "items had failures:"
+            failed.sort()
+            for thing, (f, t) in failed:
+                print " %3d of %3d in %s" % (f, t, thing)
+        if verbose:
+            print totalt, "tests in", len(self._name2ft), "items."
+            print totalt - totalf, "passed and", totalf, "failed."
+        if totalf:
+            print "***Test Failed***", totalf, "failures."
+        elif verbose:
+            print "Test passed."
+        return totalf, totalt
+
+    #/////////////////////////////////////////////////////////////////
+    # Backward compatibility cruft to maintain doctest.master.
+    #/////////////////////////////////////////////////////////////////
+    def merge(self, other):
+        d = self._name2ft
+        for name, (f, t) in other._name2ft.items():
+            if name in d:
+                print "*** DocTestRunner.merge: '" + name + "' in both" \
+                    " testers; summing outcomes."
+                f2, t2 = d[name]
+                f = f + f2
+                t = t + t2
+            d[name] = f, t
+
+class OutputChecker:
+    """
+    A class used to check the whether the actual output from a doctest
+    example matches the expected output.  `OutputChecker` defines two
+    methods: `check_output`, which compares a given pair of outputs,
+    and returns true if they match; and `output_difference`, which
+    returns a string describing the differences between two outputs.
+    """
+    def check_output(self, want, got, optionflags):
+        """
+        Return True iff the actual output from an example (`got`)
+        matches the expected output (`want`).  These strings are
+        always considered to match if they are identical; but
+        depending on what option flags the test runner is using,
+        several non-exact match types are also possible.  See the
+        documentation for `TestRunner` for more information about
+        option flags.
+        """
+        # Handle the common case first, for efficiency:
+        # if they're string-identical, always return true.
+        if got == want:
+            return True
+
+        # The values True and False replaced 1 and 0 as the return
+        # value for boolean comparisons in Python 2.3.
+        if not (optionflags & DONT_ACCEPT_TRUE_FOR_1):
+            if (got,want) == ("True\n", "1\n"):
+                return True
+            if (got,want) == ("False\n", "0\n"):
+                return True
+
+        # <BLANKLINE> can be used as a special sequence to signify a
+        # blank line, unless the DONT_ACCEPT_BLANKLINE flag is used.
+        if not (optionflags & DONT_ACCEPT_BLANKLINE):
+            # Replace <BLANKLINE> in want with a blank line.
+            want = re.sub('(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
+                          '', want)
+            # If a line in got contains only spaces, then remove the
+            # spaces.
+            got = re.sub('(?m)^\s*?$', '', got)
+            if got == want:
+                return True
+
+        # This flag causes doctest to ignore any differences in the
+        # contents of whitespace strings.  Note that this can be used
+        # in conjunction with the ELLIPSIS flag.
+        if optionflags & NORMALIZE_WHITESPACE:
+            got = ' '.join(got.split())
+            want = ' '.join(want.split())
+            if got == want:
+                return True
+
+        # The ELLIPSIS flag says to let the sequence "..." in `want`
+        # match any substring in `got`.
+        if optionflags & ELLIPSIS:
+            if _ellipsis_match(want, got):
+                return True
+
+        # We didn't find any match; return false.
+        return False
+
+    # Should we do a fancy diff?
+    def _do_a_fancy_diff(self, want, got, optionflags):
+        # Not unless they asked for a fancy diff.
+        if not optionflags & (REPORT_UDIFF |
+                              REPORT_CDIFF |
+                              REPORT_NDIFF):
+            return False
+
+        # If expected output uses ellipsis, a meaningful fancy diff is
+        # too hard ... or maybe not.  In two real-life failures Tim saw,
+        # a diff was a major help anyway, so this is commented out.
+        # [todo] _ellipsis_match() knows which pieces do and don't match,
+        # and could be the basis for a kick-ass diff in this case.
+        ##if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want:
+        ##    return False
+
+        # ndiff does intraline difference marking, so can be useful even
+        # for 1-line differences.
+        if optionflags & REPORT_NDIFF:
+            return True
+
+        # The other diff types need at least a few lines to be helpful.
+        return want.count('\n') > 2 and got.count('\n') > 2
+
+    def output_difference(self, example, got, optionflags):
+        """
+        Return a string describing the differences between the
+        expected output for a given example (`example`) and the actual
+        output (`got`).  `optionflags` is the set of option flags used
+        to compare `want` and `got`.
+        """
+        want = example.want
+        # If <BLANKLINE>s are being used, then replace blank lines
+        # with <BLANKLINE> in the actual output string.
+        if not (optionflags & DONT_ACCEPT_BLANKLINE):
+            got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
+
+        # Check if we should use diff.
+        if self._do_a_fancy_diff(want, got, optionflags):
+            # Split want & got into lines.
+            want_lines = want.splitlines(True)  # True == keep line ends
+            got_lines = got.splitlines(True)
+            # Use difflib to find their differences.
+            if optionflags & REPORT_UDIFF:
+                diff = difflib.unified_diff(want_lines, got_lines, n=2)
+                diff = list(diff)[2:] # strip the diff header
+                kind = 'unified diff with -expected +actual'
+            elif optionflags & REPORT_CDIFF:
+                diff = difflib.context_diff(want_lines, got_lines, n=2)
+                diff = list(diff)[2:] # strip the diff header
+                kind = 'context diff with expected followed by actual'
+            elif optionflags & REPORT_NDIFF:
+                engine = difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)
+                diff = list(engine.compare(want_lines, got_lines))
+                kind = 'ndiff with -expected +actual'
+            else:
+                assert 0, 'Bad diff option'
+            # Remove trailing whitespace on diff output.
+            diff = [line.rstrip() + '\n' for line in diff]
+            return 'Differences (%s):\n' % kind + _indent(''.join(diff))
+
+        # If we're not using diff, then simply list the expected
+        # output followed by the actual output.
+        if want and got:
+            return 'Expected:\n%sGot:\n%s' % (_indent(want), _indent(got))
+        elif want:
+            return 'Expected:\n%sGot nothing\n' % _indent(want)
+        elif got:
+            return 'Expected nothing\nGot:\n%s' % _indent(got)
+        else:
+            return 'Expected nothing\nGot nothing\n'
+
+class DocTestFailure(Exception):
+    """A DocTest example has failed in debugging mode.
+
+    The exception instance has variables:
+
+    - test: the DocTest object being run
+
+    - excample: the Example object that failed
+
+    - got: the actual output
+    """
+    def __init__(self, test, example, got):
+        self.test = test
+        self.example = example
+        self.got = got
+
+    def __str__(self):
+        return str(self.test)
+
+class UnexpectedException(Exception):
+    """A DocTest example has encountered an unexpected exception
+
+    The exception instance has variables:
+
+    - test: the DocTest object being run
+
+    - excample: the Example object that failed
+
+    - exc_info: the exception info
+    """
+    def __init__(self, test, example, exc_info):
+        self.test = test
+        self.example = example
+        self.exc_info = exc_info
+
+    def __str__(self):
+        return str(self.test)
+
+class DebugRunner(DocTestRunner):
+    r"""Run doc tests but raise an exception as soon as there is a failure.
+
+       If an unexpected exception occurs, an UnexpectedException is raised.
+       It contains the test, the example, and the original exception:
+
+         >>> runner = DebugRunner(verbose=False)
+         >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
+         ...                                    {}, 'foo', 'foo.py', 0)
+         >>> try:
+         ...     runner.run(test)
+         ... except UnexpectedException, failure:
+         ...     pass
+
+         >>> failure.test is test
+         True
+
+         >>> failure.example.want
+         '42\n'
+
+         >>> exc_info = failure.exc_info
+         >>> raise exc_info[0], exc_info[1], exc_info[2]
+         Traceback (most recent call last):
+         ...
+         KeyError
+
+       We wrap the original exception to give the calling application
+       access to the test and example information.
+
+       If the output doesn't match, then a DocTestFailure is raised:
+
+         >>> test = DocTestParser().get_doctest('''
+         ...      >>> x = 1
+         ...      >>> x
+         ...      2
+         ...      ''', {}, 'foo', 'foo.py', 0)
+
+         >>> try:
+         ...    runner.run(test)
+         ... except DocTestFailure, failure:
+         ...    pass
+
+       DocTestFailure objects provide access to the test:
+
+         >>> failure.test is test
+         True
+
+       As well as to the example:
+
+         >>> failure.example.want
+         '2\n'
+
+       and the actual output:
+
+         >>> failure.got
+         '1\n'
+
+       If a failure or error occurs, the globals are left intact:
+
+         >>> del test.globs['__builtins__']
+         >>> test.globs
+         {'x': 1}
+
+         >>> test = DocTestParser().get_doctest('''
+         ...      >>> x = 2
+         ...      >>> raise KeyError
+         ...      ''', {}, 'foo', 'foo.py', 0)
+
+         >>> runner.run(test)
+         Traceback (most recent call last):
+         ...
+         UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
+
+         >>> del test.globs['__builtins__']
+         >>> test.globs
+         {'x': 2}
+
+       But the globals are cleared if there is no error:
+
+         >>> test = DocTestParser().get_doctest('''
+         ...      >>> x = 2
+         ...      ''', {}, 'foo', 'foo.py', 0)
+
+         >>> runner.run(test)
+         (0, 1)
+
+         >>> test.globs
+         {}
+
+       """
+
+    def run(self, test, compileflags=None, out=None, clear_globs=True):
+        r = DocTestRunner.run(self, test, compileflags, out, False)
+        if clear_globs:
+            test.globs.clear()
+        return r
+
+    def report_unexpected_exception(self, out, test, example, exc_info):
+        raise UnexpectedException(test, example, exc_info)
+
+    def report_failure(self, out, test, example, got):
+        raise DocTestFailure(test, example, got)
+
+######################################################################
+## 6. Test Functions
+######################################################################
+# These should be backwards compatible.
+
+# For backward compatibility, a global instance of a DocTestRunner
+# class, updated by testmod.
+master = None
+
+def testmod(m=None, name=None, globs=None, verbose=None, isprivate=None,
+            report=True, optionflags=0, extraglobs=None,
+            raise_on_error=False, exclude_empty=False):
+    """m=None, name=None, globs=None, verbose=None, isprivate=None,
+       report=True, optionflags=0, extraglobs=None, raise_on_error=False,
+       exclude_empty=False
+
+    Test examples in docstrings in functions and classes reachable
+    from module m (or the current module if m is not supplied), starting
+    with m.__doc__.  Unless isprivate is specified, private names
+    are not skipped.
+
+    Also test examples reachable from dict m.__test__ if it exists and is
+    not None.  m.__test__ maps names to functions, classes and strings;
+    function and class docstrings are tested even if the name is private;
+    strings are tested directly, as if they were docstrings.
+
+    Return (#failures, #tests).
+
+    See doctest.__doc__ for an overview.
+
+    Optional keyword arg "name" gives the name of the module; by default
+    use m.__name__.
+
+    Optional keyword arg "globs" gives a dict to be used as the globals
+    when executing examples; by default, use m.__dict__.  A copy of this
+    dict is actually used for each docstring, so that each docstring's
+    examples start with a clean slate.
+
+    Optional keyword arg "extraglobs" gives a dictionary that should be
+    merged into the globals that are used to execute examples.  By
+    default, no extra globals are used.  This is new in 2.4.
+
+    Optional keyword arg "verbose" prints lots of stuff if true, prints
+    only failures if false; by default, it's true iff "-v" is in sys.argv.
+
+    Optional keyword arg "report" prints a summary at the end when true,
+    else prints nothing at the end.  In verbose mode, the summary is
+    detailed, else very brief (in fact, empty if all tests passed).
+
+    Optional keyword arg "optionflags" or's together module constants,
+    and defaults to 0.  This is new in 2.3.  Possible values (see the
+    docs for details):
+
+        DONT_ACCEPT_TRUE_FOR_1
+        DONT_ACCEPT_BLANKLINE
+        NORMALIZE_WHITESPACE
+        ELLIPSIS
+        IGNORE_EXCEPTION_DETAIL
+        REPORT_UDIFF
+        REPORT_CDIFF
+        REPORT_NDIFF
+        REPORT_ONLY_FIRST_FAILURE
+
+    Optional keyword arg "raise_on_error" raises an exception on the
+    first unexpected exception or failure. This allows failures to be
+    post-mortem debugged.
+
+    Deprecated in Python 2.4:
+    Optional keyword arg "isprivate" specifies a function used to
+    determine whether a name is private.  The default function is
+    treat all functions as public.  Optionally, "isprivate" can be
+    set to doctest.is_private to skip over functions marked as private
+    using the underscore naming convention; see its docs for details.
+
+    Advanced tomfoolery:  testmod runs methods of a local instance of
+    class doctest.Tester, then merges the results into (or creates)
+    global Tester instance doctest.master.  Methods of doctest.master
+    can be called directly too, if you want to do something unusual.
+    Passing report=0 to testmod is especially useful then, to delay
+    displaying a summary.  Invoke doctest.master.summarize(verbose)
+    when you're done fiddling.
+    """
+    global master
+
+    if isprivate is not None:
+        warnings.warn("the isprivate argument is deprecated; "
+                      "examine DocTestFinder.find() lists instead",
+                      DeprecationWarning)
+
+    # If no module was given, then use __main__.
+    if m is None:
+        # DWA - m will still be None if this wasn't invoked from the command
+        # line, in which case the following TypeError is about as good an error
+        # as we should expect
+        m = sys.modules.get('__main__')
+
+    # Check that we were actually given a module.
+    if not inspect.ismodule(m):
+        raise TypeError("testmod: module required; %r" % (m,))
+
+    # If no name was given, then use the module's name.
+    if name is None:
+        name = m.__name__
+
+    # Find, parse, and run all tests in the given module.
+    finder = DocTestFinder(_namefilter=isprivate, exclude_empty=exclude_empty)
+
+    if raise_on_error:
+        runner = DebugRunner(verbose=verbose, optionflags=optionflags)
+    else:
+        runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
+
+    for test in finder.find(m, name, globs=globs, extraglobs=extraglobs):
+        runner.run(test)
+
+    if report:
+        runner.summarize()
+
+    if master is None:
+        master = runner
+    else:
+        master.merge(runner)
+
+    return runner.failures, runner.tries
+
+def testfile(filename, module_relative=True, name=None, package=None,
+             globs=None, verbose=None, report=True, optionflags=0,
+             extraglobs=None, raise_on_error=False, parser=DocTestParser()):
+    """
+    Test examples in the given file.  Return (#failures, #tests).
+
+    Optional keyword arg "module_relative" specifies how filenames
+    should be interpreted:
+
+      - If "module_relative" is True (the default), then "filename"
+         specifies a module-relative path.  By default, this path is
+         relative to the calling module's directory; but if the
+         "package" argument is specified, then it is relative to that
+         package.  To ensure os-independence, "filename" should use
+         "/" characters to separate path segments, and should not
+         be an absolute path (i.e., it may not begin with "/").
+
+      - If "module_relative" is False, then "filename" specifies an
+        os-specific path.  The path may be absolute or relative (to
+        the current working directory).
+
+    Optional keyword arg "name" gives the name of the test; by default
+    use the file's basename.
+
+    Optional keyword argument "package" is a Python package or the
+    name of a Python package whose directory should be used as the
+    base directory for a module relative filename.  If no package is
+    specified, then the calling module's directory is used as the base
+    directory for module relative filenames.  It is an error to
+    specify "package" if "module_relative" is False.
+
+    Optional keyword arg "globs" gives a dict to be used as the globals
+    when executing examples; by default, use {}.  A copy of this dict
+    is actually used for each docstring, so that each docstring's
+    examples start with a clean slate.
+
+    Optional keyword arg "extraglobs" gives a dictionary that should be
+    merged into the globals that are used to execute examples.  By
+    default, no extra globals are used.
+
+    Optional keyword arg "verbose" prints lots of stuff if true, prints
+    only failures if false; by default, it's true iff "-v" is in sys.argv.
+
+    Optional keyword arg "report" prints a summary at the end when true,
+    else prints nothing at the end.  In verbose mode, the summary is
+    detailed, else very brief (in fact, empty if all tests passed).
+
+    Optional keyword arg "optionflags" or's together module constants,
+    and defaults to 0.  Possible values (see the docs for details):
+
+        DONT_ACCEPT_TRUE_FOR_1
+        DONT_ACCEPT_BLANKLINE
+        NORMALIZE_WHITESPACE
+        ELLIPSIS
+        IGNORE_EXCEPTION_DETAIL
+        REPORT_UDIFF
+        REPORT_CDIFF
+        REPORT_NDIFF
+        REPORT_ONLY_FIRST_FAILURE
+
+    Optional keyword arg "raise_on_error" raises an exception on the
+    first unexpected exception or failure. This allows failures to be
+    post-mortem debugged.
+
+    Optional keyword arg "parser" specifies a DocTestParser (or
+    subclass) that should be used to extract tests from the files.
+
+    Advanced tomfoolery:  testmod runs methods of a local instance of
+    class doctest.Tester, then merges the results into (or creates)
+    global Tester instance doctest.master.  Methods of doctest.master
+    can be called directly too, if you want to do something unusual.
+    Passing report=0 to testmod is especially useful then, to delay
+    displaying a summary.  Invoke doctest.master.summarize(verbose)
+    when you're done fiddling.
+    """
+    global master
+
+    if package and not module_relative:
+        raise ValueError("Package may only be specified for module-"
+                         "relative paths.")
+
+    # Relativize the path
+    if module_relative:
+        package = _normalize_module(package)
+        filename = _module_relative_path(package, filename)
+
+    # If no name was given, then use the file's name.
+    if name is None:
+        name = os.path.basename(filename)
+
+    # Assemble the globals.
+    if globs is None:
+        globs = {}
+    else:
+        globs = globs.copy()
+    if extraglobs is not None:
+        globs.update(extraglobs)
+
+    if raise_on_error:
+        runner = DebugRunner(verbose=verbose, optionflags=optionflags)
+    else:
+        runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
+
+    # Read the file, convert it to a test, and run it.
+    s = open(filename).read()
+    test = parser.get_doctest(s, globs, name, filename, 0)
+    runner.run(test)
+
+    if report:
+        runner.summarize()
+
+    if master is None:
+        master = runner
+    else:
+        master.merge(runner)
+
+    return runner.failures, runner.tries
+
+def run_docstring_examples(f, globs, verbose=False, name="NoName",
+                           compileflags=None, optionflags=0):
+    """
+    Test examples in the given object's docstring (`f`), using `globs`
+    as globals.  Optional argument `name` is used in failure messages.
+    If the optional argument `verbose` is true, then generate output
+    even if there are no failures.
+
+    `compileflags` gives the set of flags that should be used by the
+    Python compiler when running the examples.  If not specified, then
+    it will default to the set of future-import flags that apply to
+    `globs`.
+
+    Optional keyword arg `optionflags` specifies options for the
+    testing and output.  See the documentation for `testmod` for more
+    information.
+    """
+    # Find, parse, and run all tests in the given module.
+    finder = DocTestFinder(verbose=verbose, recurse=False)
+    runner = DocTestRunner(verbose=verbose, optionflags=optionflags)
+    for test in finder.find(f, name, globs=globs):
+        runner.run(test, compileflags=compileflags)
+
+######################################################################
+## 7. Tester
+######################################################################
+# This is provided only for backwards compatibility.  It's not
+# actually used in any way.
+
+class Tester:
+    def __init__(self, mod=None, globs=None, verbose=None,
+                 isprivate=None, optionflags=0):
+
+        warnings.warn("class Tester is deprecated; "
+                      "use class doctest.DocTestRunner instead",
+                      DeprecationWarning, stacklevel=2)
+        if mod is None and globs is None:
+            raise TypeError("Tester.__init__: must specify mod or globs")
+        if mod is not None and not inspect.ismodule(mod):
+            raise TypeError("Tester.__init__: mod must be a module; %r" %
+                            (mod,))
+        if globs is None:
+            globs = mod.__dict__
+        self.globs = globs
+
+        self.verbose = verbose
+        self.isprivate = isprivate
+        self.optionflags = optionflags
+        self.testfinder = DocTestFinder(_namefilter=isprivate)
+        self.testrunner = DocTestRunner(verbose=verbose,
+                                        optionflags=optionflags)
+
+    def runstring(self, s, name):
+        test = DocTestParser().get_doctest(s, self.globs, name, None, None)
+        if self.verbose:
+            print "Running string", name
+        (f,t) = self.testrunner.run(test)
+        if self.verbose:
+            print f, "of", t, "examples failed in string", name
+        return (f,t)
+
+    def rundoc(self, object, name=None, module=None):
+        f = t = 0
+        tests = self.testfinder.find(object, name, module=module,
+                                     globs=self.globs)
+        for test in tests:
+            (f2, t2) = self.testrunner.run(test)
+            (f,t) = (f+f2, t+t2)
+        return (f,t)
+
+    def rundict(self, d, name, module=None):
+        import new
+        m = new.module(name)
+        m.__dict__.update(d)
+        if module is None:
+            module = False
+        return self.rundoc(m, name, module)
+
+    def run__test__(self, d, name):
+        import new
+        m = new.module(name)
+        m.__test__ = d
+        return self.rundoc(m, name)
+
+    def summarize(self, verbose=None):
+        return self.testrunner.summarize(verbose)
+
+    def merge(self, other):
+        self.testrunner.merge(other.testrunner)
+
+######################################################################
+## 8. Unittest Support
+######################################################################
+
+_unittest_reportflags = 0
+
+def set_unittest_reportflags(flags):
+    """Sets the unittest option flags.
+
+    The old flag is returned so that a runner could restore the old
+    value if it wished to:
+
+      >>> old = _unittest_reportflags
+      >>> set_unittest_reportflags(REPORT_NDIFF |
+      ...                          REPORT_ONLY_FIRST_FAILURE) == old
+      True
+
+      >>> import doctest
+      >>> doctest._unittest_reportflags == (REPORT_NDIFF |
+      ...                                   REPORT_ONLY_FIRST_FAILURE)
+      True
+
+    Only reporting flags can be set:
+
+      >>> set_unittest_reportflags(ELLIPSIS)
+      Traceback (most recent call last):
+      ...
+      ValueError: ('Only reporting flags allowed', 8)
+
+      >>> set_unittest_reportflags(old) == (REPORT_NDIFF |
+      ...                                   REPORT_ONLY_FIRST_FAILURE)
+      True
+    """
+    global _unittest_reportflags
+
+    if (flags & REPORTING_FLAGS) != flags:
+        raise ValueError("Only reporting flags allowed", flags)
+    old = _unittest_reportflags
+    _unittest_reportflags = flags
+    return old
+
+
+class DocTestCase(unittest.TestCase):
+
+    def __init__(self, test, optionflags=0, setUp=None, tearDown=None,
+                 checker=None, runner=DocTestRunner):
+
+        unittest.TestCase.__init__(self)
+        self._dt_optionflags = optionflags
+        self._dt_checker = checker
+        self._dt_test = test
+        self._dt_setUp = setUp
+        self._dt_tearDown = tearDown
+        self._dt_runner = runner
+
+    def setUp(self):
+        test = self._dt_test
+
+        if self._dt_setUp is not None:
+            self._dt_setUp(test)
+
+    def tearDown(self):
+        test = self._dt_test
+
+        if self._dt_tearDown is not None:
+            self._dt_tearDown(test)
+
+        test.globs.clear()
+
+    def runTest(self):
+        test = self._dt_test
+        old = sys.stdout
+        new = StringIO()
+        optionflags = self._dt_optionflags
+
+        if not (optionflags & REPORTING_FLAGS):
+            # The option flags don't include any reporting flags,
+            # so add the default reporting flags
+            optionflags |= _unittest_reportflags
+
+        runner = self._dt_runner(optionflags=optionflags,
+                                 checker=self._dt_checker, verbose=False)
+
+        try:
+            runner.DIVIDER = "-"*70
+            failures, tries = runner.run(
+                test, out=new.write, clear_globs=False)
+        finally:
+            sys.stdout = old
+
+        if failures:
+            raise self.failureException(self.format_failure(new.getvalue()))
+
+    def format_failure(self, err):
+        test = self._dt_test
+        if test.lineno is None:
+            lineno = 'unknown line number'
+        else:
+            lineno = '%s' % test.lineno
+        lname = '.'.join(test.name.split('.')[-1:])
+        return ('Failed doctest test for %s\n'
+                '  File "%s", line %s, in %s\n\n%s'
+                % (test.name, test.filename, lineno, lname, err)
+                )
+
+    def debug(self):
+        r"""Run the test case without results and without catching exceptions
+
+           The unit test framework includes a debug method on test cases
+           and test suites to support post-mortem debugging.  The test code
+           is run in such a way that errors are not caught.  This way a
+           caller can catch the errors and initiate post-mortem debugging.
+
+           The DocTestCase provides a debug method that raises
+           UnexpectedException errors if there is an unexepcted
+           exception:
+
+             >>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
+             ...                {}, 'foo', 'foo.py', 0)
+             >>> case = DocTestCase(test)
+             >>> try:
+             ...     case.debug()
+             ... except UnexpectedException, failure:
+             ...     pass
+
+           The UnexpectedException contains the test, the example, and
+           the original exception:
+
+             >>> failure.test is test
+             True
+
+             >>> failure.example.want
+             '42\n'
+
+             >>> exc_info = failure.exc_info
+             >>> raise exc_info[0], exc_info[1], exc_info[2]
+             Traceback (most recent call last):
+             ...
+             KeyError
+
+           If the output doesn't match, then a DocTestFailure is raised:
+
+             >>> test = DocTestParser().get_doctest('''
+             ...      >>> x = 1
+             ...      >>> x
+             ...      2
+             ...      ''', {}, 'foo', 'foo.py', 0)
+             >>> case = DocTestCase(test)
+
+             >>> try:
+             ...    case.debug()
+             ... except DocTestFailure, failure:
+             ...    pass
+
+           DocTestFailure objects provide access to the test:
+
+             >>> failure.test is test
+             True
+
+           As well as to the example:
+
+             >>> failure.example.want
+             '2\n'
+
+           and the actual output:
+
+             >>> failure.got
+             '1\n'
+
+           """
+
+        self.setUp()
+        runner = DebugRunner(optionflags=self._dt_optionflags,
+                             checker=self._dt_checker, verbose=False)
+        runner.run(self._dt_test)
+        self.tearDown()
+
+    def id(self):
+        return self._dt_test.name
+
+    def __repr__(self):
+        name = self._dt_test.name.split('.')
+        return "%s (%s)" % (name[-1], '.'.join(name[:-1]))
+
+    __str__ = __repr__
+
+    def shortDescription(self):
+        return "Doctest: " + self._dt_test.name
+
+def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None,
+                 test_class=DocTestCase, **options):
+    """
+    Convert doctest tests for a module to a unittest test suite.
+
+    This converts each documentation string in a module that
+    contains doctest tests to a unittest test case.  If any of the
+    tests in a doc string fail, then the test case fails.  An exception
+    is raised showing the name of the file containing the test and a
+    (sometimes approximate) line number.
+
+    The `module` argument provides the module to be tested.  The argument
+    can be either a module or a module name.
+
+    If no argument is given, the calling module is used.
+
+    A number of options may be provided as keyword arguments:
+
+    setUp
+      A set-up function.  This is called before running the
+      tests in each file. The setUp function will be passed a DocTest
+      object.  The setUp function can access the test globals as the
+      globs attribute of the test passed.
+
+    tearDown
+      A tear-down function.  This is called after running the
+      tests in each file.  The tearDown function will be passed a DocTest
+      object.  The tearDown function can access the test globals as the
+      globs attribute of the test passed.
+
+    globs
+      A dictionary containing initial global variables for the tests.
+
+    optionflags
+       A set of doctest option flags expressed as an integer.
+    """
+
+    if test_finder is None:
+        test_finder = DocTestFinder()
+
+    module = _normalize_module(module)
+    tests = test_finder.find(module, globs=globs, extraglobs=extraglobs)
+    if globs is None:
+        globs = module.__dict__
+    if not tests:
+        # Why do we want to do this? Because it reveals a bug that might
+        # otherwise be hidden.
+        raise ValueError(module, "has no tests")
+
+    tests.sort()
+    suite = unittest.TestSuite()
+    for test in tests:
+        if len(test.examples) == 0:
+            continue
+        if not test.filename:
+            filename = module.__file__
+            if filename[-4:] in (".pyc", ".pyo"):
+                filename = filename[:-1]
+            test.filename = filename
+        suite.addTest(test_class(test, **options))
+
+    return suite
+
+class DocFileCase(DocTestCase):
+
+    def id(self):
+        return '_'.join(self._dt_test.name.split('.'))
+
+    def __repr__(self):
+        return self._dt_test.filename
+    __str__ = __repr__
+
+    def format_failure(self, err):
+        return ('Failed doctest test for %s\n  File "%s", line 0\n\n%s'
+                % (self._dt_test.name, self._dt_test.filename, err)
+                )
+
+def DocFileTest(path, module_relative=True, package=None,
+                globs=None, parser=DocTestParser(), **options):
+    if globs is None:
+        globs = {}
+
+    if package and not module_relative:
+        raise ValueError("Package may only be specified for module-"
+                         "relative paths.")
+
+    # Relativize the path.
+    if module_relative:
+        package = _normalize_module(package)
+        path = _module_relative_path(package, path)
+
+    # Find the file and read it.
+    name = os.path.basename(path)
+    doc = open(path).read()
+
+    # Convert it to a test, and wrap it in a DocFileCase.
+    test = parser.get_doctest(doc, globs, name, path, 0)
+    return DocFileCase(test, **options)
+
+def DocFileSuite(*paths, **kw):
+    """A unittest suite for one or more doctest files.
+
+    The path to each doctest file is given as a string; the
+    interpretation of that string depends on the keyword argument
+    "module_relative".
+
+    A number of options may be provided as keyword arguments:
+
+    module_relative
+      If "module_relative" is True, then the given file paths are
+      interpreted as os-independent module-relative paths.  By
+      default, these paths are relative to the calling module's
+      directory; but if the "package" argument is specified, then
+      they are relative to that package.  To ensure os-independence,
+      "filename" should use "/" characters to separate path
+      segments, and may not be an absolute path (i.e., it may not
+      begin with "/").
+
+      If "module_relative" is False, then the given file paths are
+      interpreted as os-specific paths.  These paths may be absolute
+      or relative (to the current working directory).
+
+    package
+      A Python package or the name of a Python package whose directory
+      should be used as the base directory for module relative paths.
+      If "package" is not specified, then the calling module's
+      directory is used as the base directory for module relative
+      filenames.  It is an error to specify "package" if
+      "module_relative" is False.
+
+    setUp
+      A set-up function.  This is called before running the
+      tests in each file. The setUp function will be passed a DocTest
+      object.  The setUp function can access the test globals as the
+      globs attribute of the test passed.
+
+    tearDown
+      A tear-down function.  This is called after running the
+      tests in each file.  The tearDown function will be passed a DocTest
+      object.  The tearDown function can access the test globals as the
+      globs attribute of the test passed.
+
+    globs
+      A dictionary containing initial global variables for the tests.
+
+    optionflags
+      A set of doctest option flags expressed as an integer.
+
+    parser
+      A DocTestParser (or subclass) that should be used to extract
+      tests from the files.
+    """
+    suite = unittest.TestSuite()
+
+    # We do this here so that _normalize_module is called at the right
+    # level.  If it were called in DocFileTest, then this function
+    # would be the caller and we might guess the package incorrectly.
+    if kw.get('module_relative', True):
+        kw['package'] = _normalize_module(kw.get('package'))
+
+    for path in paths:
+        suite.addTest(DocFileTest(path, **kw))
+
+    return suite
+
+######################################################################
+## 9. Debugging Support
+######################################################################
+
+def script_from_examples(s):
+    r"""Extract script from text with examples.
+
+       Converts text with examples to a Python script.  Example input is
+       converted to regular code.  Example output and all other words
+       are converted to comments:
+
+       >>> text = '''
+       ...       Here are examples of simple math.
+       ...
+       ...           Python has super accurate integer addition
+       ...
+       ...           >>> 2 + 2
+       ...           5
+       ...
+       ...           And very friendly error messages:
+       ...
+       ...           >>> 1/0
+       ...           To Infinity
+       ...           And
+       ...           Beyond
+       ...
+       ...           You can use logic if you want:
+       ...
+       ...           >>> if 0:
+       ...           ...    blah
+       ...           ...    blah
+       ...           ...
+       ...
+       ...           Ho hum
+       ...           '''
+
+       >>> print script_from_examples(text)
+       # Here are examples of simple math.
+       #
+       #     Python has super accurate integer addition
+       #
+       2 + 2
+       # Expected:
+       ## 5
+       #
+       #     And very friendly error messages:
+       #
+       1/0
+       # Expected:
+       ## To Infinity
+       ## And
+       ## Beyond
+       #
+       #     You can use logic if you want:
+       #
+       if 0:
+          blah
+          blah
+       #
+       #     Ho hum
+       """
+    output = []
+    for piece in DocTestParser().parse(s):
+        if isinstance(piece, Example):
+            # Add the example's source code (strip trailing NL)
+            output.append(piece.source[:-1])
+            # Add the expected output:
+            want = piece.want
+            if want:
+                output.append('# Expected:')
+                output += ['## '+l for l in want.split('\n')[:-1]]
+        else:
+            # Add non-example text.
+            output += [_comment_line(l)
+                       for l in piece.split('\n')[:-1]]
+
+    # Trim junk on both ends.
+    while output and output[-1] == '#':
+        output.pop()
+    while output and output[0] == '#':
+        output.pop(0)
+    # Combine the output, and return it.
+    return '\n'.join(output)
+
+def testsource(module, name):
+    """Extract the test sources from a doctest docstring as a script.
+
+    Provide the module (or dotted name of the module) containing the
+    test to be debugged and the name (within the module) of the object
+    with the doc string with tests to be debugged.
+    """
+    module = _normalize_module(module)
+    tests = DocTestFinder().find(module)
+    test = [t for t in tests if t.name == name]
+    if not test:
+        raise ValueError(name, "not found in tests")
+    test = test[0]
+    testsrc = script_from_examples(test.docstring)
+    return testsrc
+
+def debug_src(src, pm=False, globs=None):
+    """Debug a single doctest docstring, in argument `src`'"""
+    testsrc = script_from_examples(src)
+    debug_script(testsrc, pm, globs)
+
+def debug_script(src, pm=False, globs=None):
+    "Debug a test script.  `src` is the script, as a string."
+    import pdb
+
+    # Note that tempfile.NameTemporaryFile() cannot be used.  As the
+    # docs say, a file so created cannot be opened by name a second time
+    # on modern Windows boxes, and execfile() needs to open it.
+    srcfilename = tempfile.mktemp(".py", "doctestdebug")
+    f = open(srcfilename, 'w')
+    f.write(src)
+    f.close()
+
+    try:
+        if globs:
+            globs = globs.copy()
+        else:
+            globs = {}
+
+        if pm:
+            try:
+                execfile(srcfilename, globs, globs)
+            except:
+                print sys.exc_info()[1]
+                pdb.post_mortem(sys.exc_info()[2])
+        else:
+            # Note that %r is vital here.  '%s' instead can, e.g., cause
+            # backslashes to get treated as metacharacters on Windows.
+            pdb.run("execfile(%r)" % srcfilename, globs, globs)
+
+    finally:
+        os.remove(srcfilename)
+
+def debug(module, name, pm=False):
+    """Debug a single doctest docstring.
+
+    Provide the module (or dotted name of the module) containing the
+    test to be debugged and the name (within the module) of the object
+    with the docstring with tests to be debugged.
+    """
+    module = _normalize_module(module)
+    testsrc = testsource(module, name)
+    debug_script(testsrc, pm, module.__dict__)
+
+######################################################################
+## 10. Example Usage
+######################################################################
+class _TestClass:
+    """
+    A pointless class, for sanity-checking of docstring testing.
+
+    Methods:
+        square()
+        get()
+
+    >>> _TestClass(13).get() + _TestClass(-12).get()
+    1
+    >>> hex(_TestClass(13).square().get())
+    '0xa9'
+    """
+
+    def __init__(self, val):
+        """val -> _TestClass object with associated value val.
+
+        >>> t = _TestClass(123)
+        >>> print t.get()
+        123
+        """
+
+        self.val = val
+
+    def square(self):
+        """square() -> square TestClass's associated value
+
+        >>> _TestClass(13).square().get()
+        169
+        """
+
+        self.val = self.val ** 2
+        return self
+
+    def get(self):
+        """get() -> return TestClass's associated value.
+
+        >>> x = _TestClass(-42)
+        >>> print x.get()
+        -42
+        """
+
+        return self.val
+
+__test__ = {"_TestClass": _TestClass,
+            "string": r"""
+                      Example of a string object, searched as-is.
+                      >>> x = 1; y = 2
+                      >>> x + y, x * y
+                      (3, 2)
+                      """,
+
+            "bool-int equivalence": r"""
+                                    In 2.2, boolean expressions displayed
+                                    0 or 1.  By default, we still accept
+                                    them.  This can be disabled by passing
+                                    DONT_ACCEPT_TRUE_FOR_1 to the new
+                                    optionflags argument.
+                                    >>> 4 == 4
+                                    1
+                                    >>> 4 == 4
+                                    True
+                                    >>> 4 > 4
+                                    0
+                                    >>> 4 > 4
+                                    False
+                                    """,
+
+            "blank lines": r"""
+                Blank lines can be marked with <BLANKLINE>:
+                    >>> print 'foo\n\nbar\n'
+                    foo
+                    <BLANKLINE>
+                    bar
+                    <BLANKLINE>
+            """,
+
+            "ellipsis": r"""
+                If the ellipsis flag is used, then '...' can be used to
+                elide substrings in the desired output:
+                    >>> print range(1000) #doctest: +ELLIPSIS
+                    [0, 1, 2, ..., 999]
+            """,
+
+            "whitespace normalization": r"""
+                If the whitespace normalization flag is used, then
+                differences in whitespace are ignored.
+                    >>> print range(30) #doctest: +NORMALIZE_WHITESPACE
+                    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+                     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+                     27, 28, 29]
+            """,
+           }
+
+def _test():
+    r = unittest.TextTestRunner()
+    r.run(DocTestSuite())
+
+if __name__ == "__main__":
+    _test()

Added: vendor/django/current/django/test/signals.py
===================================================================
--- vendor/django/current/django/test/signals.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/signals.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1 @@
+template_rendered = object()
\ No newline at end of file

Added: vendor/django/current/django/test/simple.py
===================================================================
--- vendor/django/current/django/test/simple.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/simple.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,88 @@
+import unittest, doctest
+from django.conf import settings
+from django.test.utils import setup_test_environment, teardown_test_environment
+from django.test.utils import create_test_db, destroy_test_db
+from django.test.testcases import OutputChecker, DocTestRunner
+
+# The module name for tests outside models.py
+TEST_MODULE = 'tests'
+    
+doctestOutputChecker = OutputChecker()
+
+def build_suite(app_module):
+    "Create a complete Django test suite for the provided application module"
+    suite = unittest.TestSuite()
+    
+    # Load unit and doctests in the models.py file
+    suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(app_module))
+    try:
+        suite.addTest(doctest.DocTestSuite(app_module,
+                                           checker=doctestOutputChecker,
+                                           runner=DocTestRunner))
+    except ValueError:
+        # No doc tests in models.py
+        pass
+    
+    # Check to see if a separate 'tests' module exists parallel to the 
+    # models module
+    try:
+        app_path = app_module.__name__.split('.')[:-1]
+        test_module = __import__('.'.join(app_path + [TEST_MODULE]), {}, {}, TEST_MODULE)
+        
+        suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_module))
+        try:            
+            suite.addTest(doctest.DocTestSuite(test_module, 
+                                               checker=doctestOutputChecker,
+                                               runner=DocTestRunner))
+        except ValueError:
+            # No doc tests in tests.py
+            pass
+    except ImportError, e:
+        # Couldn't import tests.py. Was it due to a missing file, or
+        # due to an import error in a tests.py that actually exists?
+        import os.path
+        from imp import find_module
+        try:
+            mod = find_module(TEST_MODULE, [os.path.dirname(app_module.__file__)])
+        except ImportError:
+            # 'tests' module doesn't exist. Move on.
+            pass
+        else:
+            # The module exists, so there must be an import error in the 
+            # test module itself. We don't need the module; close the file
+            # handle returned by find_module.
+            mod[0].close()
+            raise
+            
+    return suite
+
+def run_tests(module_list, verbosity=1, extra_tests=[]):
+    """
+    Run the unit tests for all the modules in the provided list.
+    This testrunner will search each of the modules in the provided list,
+    looking for doctests and unittests in models.py or tests.py within
+    the module. A list of 'extra' tests may also be provided; these tests
+    will be added to the test suite.
+    
+    Returns the number of tests that failed.
+    """
+    setup_test_environment()
+    
+    settings.DEBUG = False    
+    suite = unittest.TestSuite()
+     
+    for module in module_list:
+        suite.addTest(build_suite(module))
+    
+    for test in extra_tests:
+        suite.addTest(test)
+
+    old_name = settings.DATABASE_NAME
+    create_test_db(verbosity)
+    result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
+    destroy_test_db(old_name, verbosity)
+    
+    teardown_test_environment()
+    
+    return len(result.failures)
+    
\ No newline at end of file

Added: vendor/django/current/django/test/testcases.py
===================================================================
--- vendor/django/current/django/test/testcases.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/testcases.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,50 @@
+import re, doctest, unittest
+from django.db import transaction
+from django.core import management
+from django.db.models import get_apps
+    
+normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
+
+class OutputChecker(doctest.OutputChecker):
+    def check_output(self, want, got, optionflags):
+        ok = doctest.OutputChecker.check_output(self, want, got, optionflags)
+
+        # Doctest does an exact string comparison of output, which means long
+        # integers aren't equal to normal integers ("22L" vs. "22"). The
+        # following code normalizes long integers so that they equal normal
+        # integers.
+        if not ok:
+            return normalize_long_ints(want) == normalize_long_ints(got)
+        return ok
+                  
+class DocTestRunner(doctest.DocTestRunner):
+    def __init__(self, *args, **kwargs):
+        doctest.DocTestRunner.__init__(self, *args, **kwargs)
+        self.optionflags = doctest.ELLIPSIS
+        
+    def report_unexpected_exception(self, out, test, example, exc_info):
+        doctest.DocTestRunner.report_unexpected_exception(self,out,test,example,exc_info)
+        
+        # Rollback, in case of database errors. Otherwise they'd have
+        # side effects on other tests.
+        from django.db import transaction
+        transaction.rollback_unless_managed()
+
+class TestCase(unittest.TestCase):    
+    def install_fixtures(self):
+        """If the Test Case class has a 'fixtures' member, clear the database and
+        install the named fixtures at the start of each test.
+        
+        """
+        management.flush(verbosity=0, interactive=False)
+        if hasattr(self, 'fixtures'):
+            management.load_data(self.fixtures, verbosity=0)
+
+    def run(self, result=None):
+        """Wrapper around default run method so that user-defined Test Cases 
+        automatically call install_fixtures without having to include a call to 
+        super().
+        
+        """
+        self.install_fixtures()
+        super(TestCase, self).run(result)

Added: vendor/django/current/django/test/utils.py
===================================================================
--- vendor/django/current/django/test/utils.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/test/utils.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,110 @@
+import sys, time
+from django.conf import settings
+from django.db import connection, transaction, backend
+from django.core import management
+from django.dispatch import dispatcher
+from django.test import signals
+from django.template import Template
+
+# The prefix to put on the default database name when creating
+# the test database.
+TEST_DATABASE_PREFIX = 'test_'
+
+def instrumented_test_render(self, context):
+    """An instrumented Template render method, providing a signal 
+    that can be intercepted by the test system Client
+    
+    """
+    dispatcher.send(signal=signals.template_rendered, sender=self, template=self, context=context)
+    return self.nodelist.render(context)
+    
+def setup_test_environment():
+    """Perform any global pre-test setup. This involves:
+        
+        - Installing the instrumented test renderer
+        
+    """
+    Template.original_render = Template.render
+    Template.render = instrumented_test_render
+    
+def teardown_test_environment():
+    """Perform any global post-test teardown. This involves:
+
+        - Restoring the original test renderer
+        
+    """
+    Template.render = Template.original_render
+    del Template.original_render
+    
+def _set_autocommit(connection):
+    "Make sure a connection is in autocommit mode."
+    if hasattr(connection.connection, "autocommit"):
+        connection.connection.autocommit(True)
+    elif hasattr(connection.connection, "set_isolation_level"):
+        connection.connection.set_isolation_level(0)
+
+def create_test_db(verbosity=1, autoclobber=False):
+    if verbosity >= 1:
+        print "Creating test database..."
+    # If we're using SQLite, it's more convenient to test against an
+    # in-memory database.
+    if settings.DATABASE_ENGINE == "sqlite3":
+        TEST_DATABASE_NAME = ":memory:"
+    else:
+        if settings.TEST_DATABASE_NAME:
+            TEST_DATABASE_NAME = settings.TEST_DATABASE_NAME
+        else:
+            TEST_DATABASE_NAME = TEST_DATABASE_PREFIX + settings.DATABASE_NAME
+        
+        # Create the test database and connect to it. We need to autocommit
+        # if the database supports it because PostgreSQL doesn't allow 
+        # CREATE/DROP DATABASE statements within transactions.
+        cursor = connection.cursor()
+        _set_autocommit(connection)
+        try:
+            cursor.execute("CREATE DATABASE %s" % backend.quote_name(TEST_DATABASE_NAME))
+        except Exception, e:            
+            sys.stderr.write("Got an error creating the test database: %s\n" % e)
+            if not autoclobber:
+                confirm = raw_input("It appears the test database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_DATABASE_NAME)
+            if autoclobber or confirm == 'yes':
+                try:
+                    if verbosity >= 1:
+                        print "Destroying old test database..."                
+                    cursor.execute("DROP DATABASE %s" % backend.quote_name(TEST_DATABASE_NAME))
+                    if verbosity >= 1:
+                        print "Creating test database..."
+                    cursor.execute("CREATE DATABASE %s" % backend.quote_name(TEST_DATABASE_NAME))
+                except Exception, e:
+                    sys.stderr.write("Got an error recreating the test database: %s\n" % e)
+                    sys.exit(2)
+            else:
+                print "Tests cancelled."
+                sys.exit(1)
+               
+    connection.close()
+    settings.DATABASE_NAME = TEST_DATABASE_NAME
+
+    management.syncdb(verbosity, interactive=False)
+
+    # Get a cursor (even though we don't need one yet). This has
+    # the side effect of initializing the test database.
+    cursor = connection.cursor()
+
+def destroy_test_db(old_database_name, verbosity=1):
+    # Unless we're using SQLite, remove the test database to clean up after
+    # ourselves. Connect to the previous database (not the test database)
+    # to do so, because it's not allowed to delete a database while being
+    # connected to it.
+    if verbosity >= 1:
+        print "Destroying test database..."
+    connection.close()
+    TEST_DATABASE_NAME = settings.DATABASE_NAME
+    settings.DATABASE_NAME = old_database_name
+
+    if settings.DATABASE_ENGINE != "sqlite3":
+        cursor = connection.cursor()
+        _set_autocommit(connection)
+        time.sleep(1) # To avoid "database is being accessed by other users" errors.
+        cursor.execute("DROP DATABASE %s" % backend.quote_name(TEST_DATABASE_NAME))
+        connection.close()

Modified: vendor/django/current/django/utils/datastructures.py
===================================================================
--- vendor/django/current/django/utils/datastructures.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/datastructures.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -14,7 +14,13 @@
                 pass
         raise KeyError
 
-    def get(self, key, default):
+    def __contains__(self, key):
+        return self.has_key(key)
+        
+    def __copy__(self): 
+        return self.__class__(*self.dicts) 
+
+    def get(self, key, default=None):
         try:
             return self[key]
         except KeyError:
@@ -39,6 +45,10 @@
             if dict.has_key(key):
                 return True
         return False
+        
+    def copy(self): 
+        """ returns a copy of this object""" 
+        return self.__copy__()
 
 class SortedDict(dict):
     "A dictionary that keeps its keys in the order in which they're inserted."
@@ -67,7 +77,7 @@
         return self.keyOrder[:]
 
     def values(self):
-        return [dict.__getitem__(self,k) for k in self.keyOrder]
+        return [dict.__getitem__(self, k) for k in self.keyOrder]
 
     def update(self, dict):
         for k, v in dict.items():
@@ -78,6 +88,17 @@
             self.keyOrder.append(key)
         return dict.setdefault(self, key, default)
 
+    def value_for_index(self, index):
+        "Returns the value of the item at the given zero-based index."
+        return self[self.keyOrder[index]]
+
+    def copy(self):
+        "Returns a copy of this object."
+        # This way of initializing the copy means it works for subclasses, too.
+        obj = self.__class__(self)
+        obj.keyOrder = self.keyOrder
+        return obj
+
 class MultiValueDictKeyError(KeyError):
     pass
 
@@ -187,17 +208,23 @@
         "Returns a copy of this object."
         return self.__deepcopy__()
 
-    def update(self, other_dict):
-        "update() extends rather than replaces existing key lists."
-        if isinstance(other_dict, MultiValueDict):
-            for key, value_list in other_dict.lists():
-                self.setlistdefault(key, []).extend(value_list)
-        else:
-            try:
-                for key, value in other_dict.items():
-                    self.setlistdefault(key, []).append(value)
-            except TypeError:
-                raise ValueError, "MultiValueDict.update() takes either a MultiValueDict or dictionary"
+    def update(self, *args, **kwargs):
+        "update() extends rather than replaces existing key lists. Also accepts keyword args."
+        if len(args) > 1:
+            raise TypeError, "update expected at most 1 arguments, got %d", len(args)
+        if args:
+            other_dict = args[0]
+            if isinstance(other_dict, MultiValueDict):
+                for key, value_list in other_dict.lists():
+                    self.setlistdefault(key, []).extend(value_list)
+            else:
+                try:
+                    for key, value in other_dict.items():
+                        self.setlistdefault(key, []).append(value)
+                except TypeError:
+                    raise ValueError, "MultiValueDict.update() takes either a MultiValueDict or dictionary"
+        for key, value in kwargs.iteritems():
+            self.setlistdefault(key, []).append(value)
 
 class DotExpandedDict(dict):
     """

Modified: vendor/django/current/django/utils/dateformat.py
===================================================================
--- vendor/django/current/django/utils/dateformat.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/dateformat.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,12 +11,13 @@
 >>>
 """
 
-from django.utils.dates import MONTHS, MONTHS_AP, WEEKDAYS
+from django.utils.dates import MONTHS, MONTHS_3, MONTHS_AP, WEEKDAYS
 from django.utils.tzinfo import LocalTimezone
+from django.utils.translation import gettext as _
 from calendar import isleap, monthrange
 import re, time
 
-re_formatchars = re.compile(r'(?<!\\)([aABdDfFgGhHiIjlLmMnNOPrsStTUwWyYzZ])')
+re_formatchars = re.compile(r'(?<!\\)([aAbBdDfFgGhHiIjlLmMnNOPrsStTUwWyYzZ])')
 re_escaped = re.compile(r'\\(.)')
 
 class Formatter(object):
@@ -36,14 +37,14 @@
     def a(self):
         "'a.m.' or 'p.m.'"
         if self.data.hour > 11:
-            return 'p.m.'
-        return 'a.m.'
+            return _('p.m.')
+        return _('a.m.')
 
     def A(self):
         "'AM' or 'PM'"
         if self.data.hour > 11:
-            return 'PM'
-        return 'AM'
+            return _('PM')
+        return _('AM')
 
     def B(self):
         "Swatch Internet time"
@@ -91,9 +92,9 @@
         Proprietary extension.
         """
         if self.data.minute == 0 and self.data.hour == 0:
-            return 'midnight'
+            return _('midnight')
         if self.data.minute == 0 and self.data.hour == 12:
-            return 'noon'
+            return _('noon')
         return '%s %s' % (self.f(), self.a())
 
     def s(self):
@@ -110,6 +111,10 @@
         if hasattr(self.data, 'hour') and not self.timezone:
             self.timezone = LocalTimezone(dt)
 
+    def b(self):
+        "Month, textual, 3 letters, lowercase; e.g. 'jan'"
+        return MONTHS_3[self.data.month]
+
     def d(self):
         "Day of the month, 2 digits with leading zeros; i.e. '01' to '31'"
         return '%02d' % self.data.day
@@ -147,7 +152,7 @@
 
     def M(self):
         "Month, textual, 3 letters; e.g. 'Jan'"
-        return MONTHS[self.data.month][0:3]
+        return MONTHS_3[self.data.month].title()
 
     def n(self):
         "Month without leading zeros; i.e. '1' to '12'"

Modified: vendor/django/current/django/utils/feedgenerator.py
===================================================================
--- vendor/django/current/django/utils/feedgenerator.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/feedgenerator.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -40,7 +40,7 @@
     "Base class for all syndication feeds. Subclasses should provide write()"
     def __init__(self, title, link, description, language=None, author_email=None,
             author_name=None, author_link=None, subtitle=None, categories=None,
-            feed_url=None):
+            feed_url=None, feed_copyright=None):
         self.feed = {
             'title': title,
             'link': link,
@@ -52,12 +52,13 @@
             'subtitle': subtitle,
             'categories': categories or (),
             'feed_url': feed_url,
+            'feed_copyright': feed_copyright,
         }
         self.items = []
 
     def add_item(self, title, link, description, author_email=None,
         author_name=None, author_link=None, pubdate=None, comments=None,
-        unique_id=None, enclosure=None, categories=()):
+        unique_id=None, enclosure=None, categories=(), item_copyright=None):
         """
         Adds an item to the feed. All args are expected to be Python Unicode
         objects except pubdate, which is a datetime.datetime object, and
@@ -75,6 +76,7 @@
             'unique_id': unique_id,
             'enclosure': enclosure,
             'categories': categories or (),
+            'item_copyright': item_copyright,
         })
 
     def num_items(self):
@@ -128,6 +130,8 @@
             handler.addQuickElement(u"language", self.feed['language'])
         for cat in self.feed['categories']:
             handler.addQuickElement(u"category", cat)
+        if self.feed['feed_copyright'] is not None:
+            handler.addQuickElement(u"copyright", self.feed['feed_copyright'])
         self.write_items(handler)
         self.endChannelElement(handler)
         handler.endElement(u"rss")
@@ -212,6 +216,8 @@
             handler.addQuickElement(u"subtitle", self.feed['subtitle'])
         for cat in self.feed['categories']:
             handler.addQuickElement(u"category", "", {u"term": cat})
+        if self.feed['feed_copyright'] is not None:
+            handler.addQuickElement(u"rights", self.feed['feed_copyright'])
         self.write_items(handler)
         handler.endElement(u"feed")
 
@@ -252,10 +258,14 @@
                      u"length": item['enclosure'].length,
                      u"type": item['enclosure'].mime_type})
 
-            # Categories:
+            # Categories.
             for cat in item['categories']:
                 handler.addQuickElement(u"category", u"", {u"term": cat})
 
+            # Rights.
+            if item['item_copyright'] is not None:
+                handler.addQuickElement(u"rights", item['item_copyright'])
+
             handler.endElement(u"entry")
 
 # This isolates the decision of what the system default is, so calling code can

Modified: vendor/django/current/django/utils/functional.py
===================================================================
--- vendor/django/current/django/utils/functional.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/functional.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,6 +1,6 @@
-def curry(*args, **kwargs):
+def curry(_curried_func, *args, **kwargs):
     def _curried(*moreargs, **morekwargs):
-        return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
+        return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
     return _curried
 
 class Promise:

Added: vendor/django/current/django/utils/itercompat.py
===================================================================
--- vendor/django/current/django/utils/itercompat.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/itercompat.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,31 @@
+"""
+Providing iterator functions that are not in all version of Python we support.
+Where possible, we try to use the system-native version and only fall back to
+these implementations if necessary.
+"""
+
+import itertools
+
+def compat_tee(iterable):
+    """Return two independent iterators from a single iterable.
+
+    Based on http://www.python.org/doc/2.3.5/lib/itertools-example.html
+    """
+    # Note: Using a dictionary and a list as the default arguments here is
+    # deliberate and safe in this instance.
+    def gen(next, data={}, cnt=[0]):
+        dpop = data.pop
+        for i in itertools.count():
+            if i == cnt[0]:
+                item = data[i] = next()
+                cnt[0] += 1
+            else:
+                item = dpop(i)
+            yield item
+    next = iter(iterable).next
+    return gen(next), gen(next)
+
+if hasattr(itertools, 'tee'):
+    tee = itertools.tee
+else:
+    tee = compat_tee

Modified: vendor/django/current/django/utils/simplejson/LICENSE.txt
===================================================================
--- vendor/django/current/django/utils/simplejson/LICENSE.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/simplejson/LICENSE.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,4 +1,4 @@
-simplejson 1.3
+simplejson 1.5
 Copyright (c) 2006 Bob Ippolito
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of

Modified: vendor/django/current/django/utils/simplejson/__init__.py
===================================================================
--- vendor/django/current/django/utils/simplejson/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/simplejson/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -27,6 +27,21 @@
     >>> io.getvalue()
     '["streaming API"]'
 
+Compact encoding::
+
+    >>> import simplejson
+    >>> simplejson.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
+    '[1,2,3,{"4":5,"6":7}]'
+
+Pretty printing::
+
+    >>> import simplejson
+    >>> print simplejson.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
+    {
+        "4": 5, 
+        "6": 7
+    }
+
 Decoding JSON::
     
     >>> import simplejson
@@ -68,10 +83,10 @@
     ['[', '2.0', ', ', '1.0', ']']
     
 
-Note that the JSON produced by this module is a subset of YAML,
-so it may be used as a serializer for that as well.
+Note that the JSON produced by this module's default settings
+is a subset of YAML, so it may be used as a serializer for that as well.
 """
-__version__ = '1.3'
+__version__ = '1.5'
 __all__ = [
     'dump', 'dumps', 'load', 'loads',
     'JSONDecoder', 'JSONEncoder',
@@ -81,7 +96,7 @@
 from django.utils.simplejson.encoder import JSONEncoder
 
 def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
-        allow_nan=True, cls=None, **kw):
+        allow_nan=True, cls=None, indent=None, **kw):
     """
     Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
     ``.write()``-supporting file-like object).
@@ -105,6 +120,10 @@
     in strict compliance of the JSON specification, instead of using the
     JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
 
+    If ``indent`` is a non-negative integer, then JSON array elements and object
+    members will be pretty-printed with that indent level.  An indent level
+    of 0 will only insert newlines.  ``None`` is the most compact representation.
+
     To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
     ``.default()`` method to serialize additional types), specify it with
     the ``cls`` kwarg.
@@ -112,7 +131,7 @@
     if cls is None:
         cls = JSONEncoder
     iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
-        check_circular=check_circular, allow_nan=allow_nan,
+        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
         **kw).iterencode(obj)
     # could accelerate with writelines in some versions of Python, at
     # a debuggability cost
@@ -120,7 +139,7 @@
         fp.write(chunk)
 
 def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
-        allow_nan=True, cls=None, **kw):
+        allow_nan=True, cls=None, indent=None, separators=None, **kw):
     """
     Serialize ``obj`` to a JSON formatted ``str``.
 
@@ -141,14 +160,26 @@
     strict compliance of the JSON specification, instead of using the
     JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
 
+    If ``indent`` is a non-negative integer, then JSON array elements and
+    object members will be pretty-printed with that indent level.  An indent
+    level of 0 will only insert newlines.  ``None`` is the most compact
+    representation.
+
+    If ``separators`` is an ``(item_separator, dict_separator)`` tuple
+    then it will be used instead of the default ``(', ', ': ')`` separators.
+    ``(',', ':')`` is the most compact JSON representation.
+
     To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
     ``.default()`` method to serialize additional types), specify it with
     the ``cls`` kwarg.
     """
     if cls is None:
         cls = JSONEncoder
-    return cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
-        check_circular=check_circular, allow_nan=allow_nan, **kw).encode(obj)
+    return cls(
+        skipkeys=skipkeys, ensure_ascii=ensure_ascii,
+        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
+        separators=separators,
+        **kw).encode(obj)
 
 def load(fp, encoding=None, cls=None, object_hook=None, **kw):
     """

Modified: vendor/django/current/django/utils/simplejson/decoder.py
===================================================================
--- vendor/django/current/django/utils/simplejson/decoder.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/simplejson/decoder.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -127,6 +127,7 @@
         raise ValueError(errmsg("Expecting property name", s, end))
     end += 1
     encoding = getattr(context, 'encoding', None)
+    iterscan = JSONScanner.iterscan
     while True:
         key, end = scanstring(s, end, encoding)
         end = _w(s, end).end()
@@ -134,7 +135,7 @@
             raise ValueError(errmsg("Expecting : delimiter", s, end))
         end = _w(s, end + 1).end()
         try:
-            value, end = JSONScanner.iterscan(s, idx=end).next()
+            value, end = iterscan(s, idx=end, context=context).next()
         except StopIteration:
             raise ValueError(errmsg("Expecting object", s, end))
         pairs[key] = value
@@ -164,9 +165,10 @@
     nextchar = s[end:end + 1]
     if nextchar == ']':
         return values, end + 1
+    iterscan = JSONScanner.iterscan
     while True:
         try:
-            value, end = JSONScanner.iterscan(s, idx=end).next()
+            value, end = iterscan(s, idx=end, context=context).next()
         except StopIteration:
             raise ValueError(errmsg("Expecting object", s, end))
         values.append(value)

Modified: vendor/django/current/django/utils/simplejson/encoder.py
===================================================================
--- vendor/django/current/django/utils/simplejson/encoder.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/simplejson/encoder.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,11 +3,11 @@
 """
 import re
 
-# this should match any kind of infinity
-INFCHARS = re.compile(r'[infINF]')
 ESCAPE = re.compile(r'[\x00-\x19\\"\b\f\n\r\t]')
-ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
+ESCAPE_ASCII = re.compile(r'([\\"/]|[^\ -~])')
 ESCAPE_DCT = {
+    # escape all forward slashes to prevent </script> attack
+    '/': '\\/',
     '\\': '\\\\',
     '"': '\\"',
     '\b': '\\b',
@@ -16,32 +16,32 @@
     '\r': '\\r',
     '\t': '\\t',
 }
-for i in range(20):
+for i in range(0x20):
     ESCAPE_DCT.setdefault(chr(i), '\\u%04x' % (i,))
 
+# assume this produces an infinity on all machines (probably not guaranteed)
+INFINITY = float('1e66666')
+
 def floatstr(o, allow_nan=True):
-    s = str(o)
-    # If the first non-sign is a digit then it's not a special value
-    if (o < 0.0 and s[1].isdigit()) or s[0].isdigit():
-        return s
-    elif not allow_nan:
+    # Check for specials.  Note that this type of test is processor- and/or
+    # platform-specific, so do tests which don't depend on the internals.
+
+    if o != o:
+        text = 'NaN'
+    elif o == INFINITY:
+        text = 'Infinity'
+    elif o == -INFINITY:
+        text = '-Infinity'
+    else:
+        return str(o)
+
+    if not allow_nan:
         raise ValueError("Out of range float values are not JSON compliant: %r"
             % (o,))
-    # These are the string representations on the platforms I've tried
-    if s == 'nan':
-        return 'NaN'
-    if s == 'inf':
-        return 'Infinity'
-    if s == '-inf':
-        return '-Infinity'
-    # NaN should either be inequal to itself, or equal to everything
-    if o != o or o == 0.0:
-        return 'NaN'
-    # Last ditch effort, assume inf
-    if o < 0:
-        return '-Infinity'
-    return 'Infinity'
 
+    return text
+
+
 def encode_basestring(s):
     """
     Return a JSON representation of a Python string
@@ -90,8 +90,11 @@
     implementation (to raise ``TypeError``).
     """
     __all__ = ['__init__', 'default', 'encode', 'iterencode']
+    item_separator = ', '
+    key_separator = ': '
     def __init__(self, skipkeys=False, ensure_ascii=True,
-            check_circular=True, allow_nan=True, sort_keys=False):
+            check_circular=True, allow_nan=True, sort_keys=False,
+            indent=None, separators=None):
         """
         Constructor for JSONEncoder, with sensible defaults.
 
@@ -116,6 +119,15 @@
         If sort_keys is True, then the output of dictionaries will be
         sorted by key; this is useful for regression tests to ensure
         that JSON serializations can be compared on a day-to-day basis.
+
+        If indent is a non-negative integer, then JSON array
+        elements and object members will be pretty-printed with that
+        indent level.  An indent level of 0 will only insert newlines.
+        None is the most compact representation.
+
+        If specified, separators should be a (item_separator, key_separator)
+        tuple. The default is (', ', ': '). To get the most compact JSON
+        representation you should specify (',', ':') to eliminate whitespace.
         """
 
         self.skipkeys = skipkeys
@@ -123,7 +135,14 @@
         self.check_circular = check_circular
         self.allow_nan = allow_nan
         self.sort_keys = sort_keys
+        self.indent = indent
+        self.current_indent_level = 0
+        if separators is not None:
+            self.item_separator, self.key_separator = separators
 
+    def _newline_indent(self):
+        return '\n' + (' ' * (self.indent * self.current_indent_level))
+
     def _iterencode_list(self, lst, markers=None):
         if not lst:
             yield '[]'
@@ -134,14 +153,25 @@
                 raise ValueError("Circular reference detected")
             markers[markerid] = lst
         yield '['
+        if self.indent is not None:
+            self.current_indent_level += 1
+            newline_indent = self._newline_indent()
+            separator = self.item_separator + newline_indent
+            yield newline_indent
+        else:
+            newline_indent = None
+            separator = self.item_separator
         first = True
         for value in lst:
             if first:
                 first = False
             else:
-                yield ', '
+                yield separator
             for chunk in self._iterencode(value, markers):
                 yield chunk
+        if newline_indent is not None:
+            self.current_indent_level -= 1
+            yield self._newline_indent()
         yield ']'
         if markers is not None:
             del markers[markerid]
@@ -156,6 +186,15 @@
                 raise ValueError("Circular reference detected")
             markers[markerid] = dct
         yield '{'
+        key_separator = self.key_separator
+        if self.indent is not None:
+            self.current_indent_level += 1
+            newline_indent = self._newline_indent()
+            item_separator = self.item_separator + newline_indent
+            yield newline_indent
+        else:
+            newline_indent = None
+            item_separator = self.item_separator
         first = True
         if self.ensure_ascii:
             encoder = encode_basestring_ascii
@@ -165,7 +204,7 @@
         if self.sort_keys:
             keys = dct.keys()
             keys.sort()
-            items = [(k,dct[k]) for k in keys]
+            items = [(k, dct[k]) for k in keys]
         else:
             items = dct.iteritems()
         for key, value in items:
@@ -190,11 +229,14 @@
             if first:
                 first = False
             else:
-                yield ', '
+                yield item_separator
             yield encoder(key)
-            yield ': '
+            yield key_separator
             for chunk in self._iterencode(value, markers):
                 yield chunk
+        if newline_indent is not None:
+            self.current_indent_level -= 1
+            yield self._newline_indent()
         yield '}'
         if markers is not None:
             del markers[markerid]

Added: vendor/django/current/django/utils/simplejson/jsonfilter.py
===================================================================
--- vendor/django/current/django/utils/simplejson/jsonfilter.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/simplejson/jsonfilter.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,40 @@
+from django.utils import simplejson
+import cgi
+
+class JSONFilter(object):
+    def __init__(self, app, mime_type='text/x-json'):
+        self.app = app
+        self.mime_type = mime_type
+
+    def __call__(self, environ, start_response):
+        # Read JSON POST input to jsonfilter.json if matching mime type
+        response = {'status': '200 OK', 'headers': []}
+        def json_start_response(status, headers):
+            response['status'] = status
+            response['headers'].extend(headers)
+        environ['jsonfilter.mime_type'] = self.mime_type
+        if environ.get('REQUEST_METHOD', '') == 'POST':
+            if environ.get('CONTENT_TYPE', '') == self.mime_type:
+                args = [_ for _ in [environ.get('CONTENT_LENGTH')] if _]
+                data = environ['wsgi.input'].read(*map(int, args))
+                environ['jsonfilter.json'] = simplejson.loads(data)
+        res = simplejson.dumps(self.app(environ, json_start_response))
+        jsonp = cgi.parse_qs(environ.get('QUERY_STRING', '')).get('jsonp')
+        if jsonp:
+            content_type = 'text/javascript'
+            res = ''.join(jsonp + ['(', res, ')'])
+        elif 'Opera' in environ.get('HTTP_USER_AGENT', ''):
+            # Opera has bunk XMLHttpRequest support for most mime types
+            content_type = 'text/plain'
+        else:
+            content_type = self.mime_type
+        headers = [
+            ('Content-type', content_type),
+            ('Content-length', len(res)),
+        ]
+        headers.extend(response['headers'])
+        start_response(response['status'], headers)
+        return [res]
+
+def factory(app, global_conf, **kw):
+    return JSONFilter(app, **kw)

Modified: vendor/django/current/django/utils/simplejson/scanner.py
===================================================================
--- vendor/django/current/django/utils/simplejson/scanner.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/simplejson/scanner.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,7 +3,7 @@
 """
 import sre_parse, sre_compile, sre_constants
 from sre_constants import BRANCH, SUBPATTERN
-from sre import VERBOSE, MULTILINE, DOTALL
+from re import VERBOSE, MULTILINE, DOTALL
 import re
 
 __all__ = ['Scanner', 'pattern']

Modified: vendor/django/current/django/utils/text.py
===================================================================
--- vendor/django/current/django/utils/text.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/utils/text.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -8,17 +8,28 @@
 def wrap(text, width):
     """
     A word-wrap function that preserves existing line breaks and most spaces in
-    the text. Expects that existing line breaks are posix newlines (\n).
-    See http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/148061
+    the text. Expects that existing line breaks are posix newlines.
     """
-    return reduce(lambda line, word, width=width: '%s%s%s' %
-                  (line,
-                   ' \n'[(len(line[line.rfind('\n')+1:])
-                         + len(word.split('\n',1)[0]
-                              ) >= width)],
-                   word),
-                  text.split(' ')
-                 )
+    def _generator():
+        it = iter(text.split(' '))
+        word = it.next()
+        yield word
+        pos = len(word) - word.rfind('\n') - 1
+        for word in it:
+            if "\n" in word:
+                lines = word.split('\n')
+            else:
+                lines = (word,)
+            pos += len(lines[0]) + 1
+            if pos > width:
+                yield '\n'
+                pos = len(lines[-1])
+            else:
+                yield ' '
+                if len(lines) > 1:
+                    pos = len(lines[-1])
+            yield word
+    return "".join(_generator())
 
 def truncate_words(s, num):
     "Truncates a string after a certain number of words."
@@ -30,6 +41,66 @@
             words.append('...')
     return ' '.join(words)
 
+def truncate_html_words(s, num):
+    """
+    Truncates html to a certain number of words (not counting tags and comments).
+    Closes opened tags if they were correctly closed in the given html.
+    """
+    length = int(num)
+    if length <= 0:
+        return ''
+    html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input')
+    # Set up regular expressions
+    re_words = re.compile(r'&.*?;|<.*?>|([A-Za-z0-9][\w-]*)')
+    re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>')
+    # Count non-HTML words and keep note of open tags
+    pos = 0
+    ellipsis_pos = 0
+    words = 0
+    open_tags = []
+    while words <= length:
+        m = re_words.search(s, pos)
+        if not m:
+            # Checked through whole string
+            break
+        pos = m.end(0)
+        if m.group(1):
+            # It's an actual non-HTML word
+            words += 1
+            if words == length:
+                ellipsis_pos = pos
+            continue
+        # Check for tag
+        tag = re_tag.match(m.group(0))
+        if not tag or ellipsis_pos:
+            # Don't worry about non tags or tags after our truncate point
+            continue
+        closing_tag, tagname, self_closing = tag.groups()
+        tagname = tagname.lower()  # Element names are always case-insensitive
+        if self_closing or tagname in html4_singlets:
+            pass
+        elif closing_tag:
+            # Check for match in open tags list
+            try:
+                i = open_tags.index(tagname)
+            except ValueError:
+                pass
+            else:
+                # SGML: An end tag closes, back to the matching start tag, all unclosed intervening start tags with omitted end tags
+                open_tags = open_tags[i+1:]
+        else:
+            # Add it to the start of the open tags list
+            open_tags.insert(0, tagname)
+    if words <= length:
+        # Don't try to close tags if we don't need to truncate
+        return s
+    out = s[:ellipsis_pos] + ' ...'
+    # Close any tags still open
+    for tag in open_tags:
+        out += '</%s>' % tag
+    # Return string
+    return out
+
 def get_valid_filename(s):
     """
     Returns the given string converted to a string that can be used for a clean
@@ -94,8 +165,9 @@
     return zbuf.getvalue()
 
 ustring_re = re.compile(u"([\u0080-\uffff])")
-def javascript_quote(s):
 
+def javascript_quote(s, quote_double_quotes=False):
+
     def fix(match):
         return r"\u%04x" % ord(match.group(1))
 
@@ -104,9 +176,12 @@
     elif type(s) != unicode:
         raise TypeError, s
     s = s.replace('\\', '\\\\')
+    s = s.replace('\r', '\\r')
     s = s.replace('\n', '\\n')
     s = s.replace('\t', '\\t')
     s = s.replace("'", "\\'")
+    if quote_double_quotes:
+        s = s.replace('"', '&quot;')
     return str(ustring_re.sub(fix, s))
 
 smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)')

Modified: vendor/django/current/django/views/debug.py
===================================================================
--- vendor/django/current/django/views/debug.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/debug.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -4,7 +4,7 @@
 from django.http import HttpResponseServerError, HttpResponseNotFound
 import os, re
 
-HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD')
+HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST')
 
 def linebreak_iter(template_source):
     yield 0
@@ -75,7 +75,7 @@
         loader_debug_info = []
         for loader in template_source_loaders:
             try:
-                source_list_func = getattr(__import__(loader.__module__, '', '', ['get_template_sources']), 'get_template_sources')
+                source_list_func = getattr(__import__(loader.__module__, {}, {}, ['get_template_sources']), 'get_template_sources')
                 # NOTE: This assumes exc_value is the name of the template that
                 # the loader attempted to load.
                 template_list = [{'name': t, 'exists': os.path.exists(t)} \
@@ -115,7 +115,7 @@
             'function': '?',
             'lineno': '?',
         }]
-    t = Template(TECHNICAL_500_TEMPLATE)
+    t = Template(TECHNICAL_500_TEMPLATE, name='Technical 500 template')
     c = Context({
         'exception_type': exc_type.__name__,
         'exception_value': exc_value,
@@ -141,7 +141,7 @@
             # tried exists but is an empty list. The URLconf must've been empty.
             return empty_urlconf(request)
 
-    t = Template(TECHNICAL_404_TEMPLATE)
+    t = Template(TECHNICAL_404_TEMPLATE, name='Technical 404 template')
     c = Context({
         'root_urlconf': settings.ROOT_URLCONF,
         'urlpatterns': tried,
@@ -154,7 +154,7 @@
 
 def empty_urlconf(request):
     "Create an empty URLconf 404 error response."
-    t = Template(EMPTY_URLCONF_TEMPLATE)
+    t = Template(EMPTY_URLCONF_TEMPLATE, name='Empty URLConf template')
     c = Context({
         'project_name': settings.SETTINGS_MODULE.split('.')[0]
     })
@@ -189,7 +189,7 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
   <meta name="robots" content="NONE,NOARCHIVE" />
-  <title>{{ exception_type }} at {{ request.path }}</title>
+  <title>{{ exception_type }} at {{ request.path|escape }}</title>
   <style type="text/css">
     html * { padding:0; margin:0; }
     body * { padding:10px 20px; }
@@ -292,7 +292,7 @@
 <body>
 
 <div id="summary">
-  <h1>{{ exception_type }} at {{ request.path }}</h1>
+  <h1>{{ exception_type }} at {{ request.path|escape }}</h1>
   <h2>{{ exception_value|escape }}</h2>
   <table class="meta">
     <tr>
@@ -301,7 +301,7 @@
     </tr>
     <tr>
       <th>Request URL:</th>
-      <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.path }}</td>
+      <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.path|escape }}</td>
     </tr>
     <tr>
       <th>Exception Type:</th>
@@ -309,7 +309,7 @@
     </tr>
     <tr>
       <th>Exception Value:</th>
-      <td>{{ exception_value }}</td>
+      <td>{{ exception_value|escape }}</td>
     </tr>
     <tr>
       <th>Exception Location:</th>
@@ -412,7 +412,7 @@
     &nbsp;&nbsp;{{ frame.lineno }}. {{ frame.context_line|escape }}<br/>
   {% endif %}
 {% endfor %}<br/>
-&nbsp;&nbsp;{{ exception_type }} at {{ request.path }}<br/>
+&nbsp;&nbsp;{{ exception_type }} at {{ request.path|escape }}<br/>
 &nbsp;&nbsp;{{ exception_value|escape }}</code>
           </td>
         </tr>
@@ -546,7 +546,7 @@
 <html lang="en">
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title>Page not found at {{ request.path }}</title>
+  <title>Page not found at {{ request.path|escape }}</title>
   <meta name="robots" content="NONE,NOARCHIVE" />
   <style type="text/css">
     html * { padding:0; margin:0; }
@@ -576,7 +576,7 @@
       </tr>
       <tr>
         <th>Request URL:</th>
-      <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.path }}</td>
+      <td>{{ request_protocol }}://{{ request.META.HTTP_HOST }}{{ request.path|escape }}</td>
       </tr>
     </table>
   </div>
@@ -591,7 +591,7 @@
           <li>{{ pattern|escape }}</li>
         {% endfor %}
       </ol>
-      <p>The current URL, <code>{{ request.path }}</code>, didn't match any of these.</p>
+      <p>The current URL, <code>{{ request.path|escape }}</code>, didn't match any of these.</p>
     {% else %}
       <p>{{ reason|escape }}</p>
     {% endif %}

Modified: vendor/django/current/django/views/defaults.py
===================================================================
--- vendor/django/current/django/views/defaults.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/defaults.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -75,7 +75,7 @@
         request_path
             The path of the requested URL (e.g., '/app/pages/bad_page/')
     """
-    t = loader.get_template(template_name)
+    t = loader.get_template(template_name) # You need to create a 404.html template.
     return http.HttpResponseNotFound(t.render(RequestContext(request, {'request_path': request.path})))
 
 def server_error(request, template_name='500.html'):
@@ -85,5 +85,5 @@
     Templates: `500.html`
     Context: None
     """
-    t = loader.get_template(template_name)
+    t = loader.get_template(template_name) # You need to create a 500.html template.
     return http.HttpResponseServerError(t.render(Context({})))

Modified: vendor/django/current/django/views/generic/create_update.py
===================================================================
--- vendor/django/current/django/views/generic/create_update.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/generic/create_update.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,11 +1,12 @@
 from django.core.xheaders import populate_xheaders
 from django.template import loader
-from django import forms
+from django import oldforms
 from django.db.models import FileField
 from django.contrib.auth.views import redirect_to_login
 from django.template import RequestContext
 from django.http import Http404, HttpResponse, HttpResponseRedirect
 from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
+from django.utils.translation import gettext
 
 def create_object(request, model, template_name=None,
         template_loader=loader, extra_context=None, post_save_redirect=None,
@@ -39,7 +40,7 @@
             new_object = manipulator.save(new_data)
 
             if request.user.is_authenticated():
-                request.user.message_set.create(message="The %s was created successfully." % model._meta.verbose_name)
+                request.user.message_set.create(message=gettext("The %(verbose_name)s was created successfully.") % {"verbose_name": model._meta.verbose_name})
 
             # Redirect to the new object: first by trying post_save_redirect,
             # then by obj.get_absolute_url; fail if neither works.
@@ -55,7 +56,7 @@
         new_data = manipulator.flatten_data()
 
     # Create the FormWrapper, template, context, response
-    form = forms.FormWrapper(manipulator, new_data, errors)
+    form = oldforms.FormWrapper(manipulator, new_data, errors)
     if not template_name:
         template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
@@ -101,7 +102,7 @@
     except ObjectDoesNotExist:
         raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs)
 
-    manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.name), follow=follow)
+    manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.attname), follow=follow)
 
     if request.POST:
         new_data = request.POST.copy()
@@ -113,7 +114,7 @@
             object = manipulator.save(new_data)
 
             if request.user.is_authenticated():
-                request.user.message_set.create(message="The %s was updated successfully." % model._meta.verbose_name)
+                request.user.message_set.create(message=gettext("The %(verbose_name)s was updated successfully.") % {"verbose_name": model._meta.verbose_name})
 
             # Do a post-after-redirect so that reload works, etc.
             if post_save_redirect:
@@ -127,7 +128,7 @@
         # This makes sure the form acurate represents the fields of the place.
         new_data = manipulator.flatten_data()
 
-    form = forms.FormWrapper(manipulator, new_data, errors)
+    form = oldforms.FormWrapper(manipulator, new_data, errors)
     if not template_name:
         template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
@@ -141,7 +142,7 @@
         else:
             c[key] = value
     response = HttpResponse(t.render(c))
-    populate_xheaders(request, response, model, getattr(object, object._meta.pk.name))
+    populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname))
     return response
 
 def delete_object(request, model, post_delete_redirect,
@@ -180,7 +181,7 @@
     if request.method == 'POST':
         object.delete()
         if request.user.is_authenticated():
-            request.user.message_set.create(message="The %s was deleted." % model._meta.verbose_name)
+            request.user.message_set.create(message=gettext("The %(verbose_name)s was deleted.") % {"verbose_name": model._meta.verbose_name})
         return HttpResponseRedirect(post_delete_redirect)
     else:
         if not template_name:
@@ -195,5 +196,5 @@
             else:
                 c[key] = value
         response = HttpResponse(t.render(c))
-        populate_xheaders(request, response, model, getattr(object, object._meta.pk.name))
+        populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname))
         return response

Modified: vendor/django/current/django/views/generic/date_based.py
===================================================================
--- vendor/django/current/django/views/generic/date_based.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/generic/date_based.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,6 +1,7 @@
 from django.template import loader, RequestContext
 from django.core.exceptions import ObjectDoesNotExist
 from django.core.xheaders import populate_xheaders
+from django.db.models.fields import DateTimeField
 from django.http import Http404, HttpResponse
 import datetime, time
 
@@ -235,9 +236,10 @@
     model = queryset.model
     now = datetime.datetime.now()
 
-    lookup_kwargs = {
-        '%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max)),
-    }
+    if isinstance(model._meta.get_field(date_field), DateTimeField):
+        lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
+    else:
+        lookup_kwargs = {date_field: date}
 
     # Only bother to check current date if the date isn't in the past and future objects aren't requested.
     if date >= now.date() and not allow_future:
@@ -304,9 +306,10 @@
     model = queryset.model
     now = datetime.datetime.now()
 
-    lookup_kwargs = {
-        '%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max)),
-    }
+    if isinstance(model._meta.get_field(date_field), DateTimeField):
+        lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
+    else:
+        lookup_kwargs = {date_field: date}
 
     # Only bother to check current date if the date isn't in the past and future objects aren't requested.
     if date >= now.date() and not allow_future:

Modified: vendor/django/current/django/views/generic/list_detail.py
===================================================================
--- vendor/django/current/django/views/generic/list_detail.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/generic/list_detail.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -33,6 +33,12 @@
             number of pages, total
         hits
             number of objects, total
+        last_on_page
+            the result number of the last of object in the
+            object_list (1-indexed)
+        first_on_page
+            the result number of the first object in the
+            object_list (1-indexed)
     """
     if extra_context is None: extra_context = {}
     queryset = queryset._clone()
@@ -57,6 +63,8 @@
             'page': page,
             'next': page + 1,
             'previous': page - 1,
+            'last_on_page': paginator.last_on_page(page - 1),
+            'first_on_page': paginator.first_on_page(page - 1),
             'pages': paginator.pages,
             'hits' : paginator.hits,
         }, context_processors)
@@ -84,7 +92,7 @@
         context_processors=None, template_object_name='object',
         mimetype=None):
     """
-    Generic list of objects.
+    Generic detail of an object.
 
     Templates: ``<app_label>/<model_name>_detail.html``
     Context:

Modified: vendor/django/current/django/views/generic/simple.py
===================================================================
--- vendor/django/current/django/views/generic/simple.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/generic/simple.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,12 +2,18 @@
 from django.template import RequestContext
 from django.http import HttpResponse, HttpResponsePermanentRedirect, HttpResponseGone
 
-def direct_to_template(request, template, **kwargs):
+def direct_to_template(request, template, extra_context={}, **kwargs):
     """
     Render a given template with any extra URL parameters in the context as
     ``{{ params }}``.
     """
-    return render_to_response(template, {'params' : kwargs}, context_instance=RequestContext(request))
+    dictionary = {'params': kwargs}
+    for key, value in extra_context.items():
+        if callable(value):
+            dictionary[key] = value()
+        else:
+            dictionary[key] = value
+    return render_to_response(template, dictionary, context_instance=RequestContext(request))
 
 def redirect_to(request, url, **kwargs):
     """
@@ -18,7 +24,7 @@
     ``/foo/<id>/`` to ``/bar/<id>/``, you could use the following URLconf::
 
         urlpatterns = patterns('',
-            ('^foo/(?p<id>\d+)/$', 'django.views.generic.simple.redirect_to', {'url' : '/bar/%(id)s/'}),
+            ('^foo/(?P<id>\d+)/$', 'django.views.generic.simple.redirect_to', {'url' : '/bar/%(id)s/'}),
         )
 
     If the given url is ``None``, a HttpResponseGone (410) will be issued.

Modified: vendor/django/current/django/views/i18n.py
===================================================================
--- vendor/django/current/django/views/i18n.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/i18n.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -9,16 +9,16 @@
     """
     Redirect to a given url while setting the chosen language in the
     session or cookie. The url and the language code need to be
-    specified in the GET paramters.
+    specified in the GET parameters.
     """
-    lang_code = request.GET['language']
+    lang_code = request.GET.get('language', None)
     next = request.GET.get('next', None)
     if not next:
         next = request.META.get('HTTP_REFERER', None)
     if not next:
         next = '/'
     response = http.HttpResponseRedirect(next)
-    if check_for_language(lang_code):
+    if lang_code and check_for_language(lang_code):
         if hasattr(request, 'session'):
             request.session['django_language'] = lang_code
         else:

Modified: vendor/django/current/django/views/static.py
===================================================================
--- vendor/django/current/django/views/static.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/django/views/static.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -81,7 +81,7 @@
     try:
         t = loader.get_template('static/directory_index')
     except TemplateDoesNotExist:
-        t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE)
+        t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name='Default directory index template')
     files = []
     for f in os.listdir(fullpath):
         if not f.startswith('.'):

Modified: vendor/django/current/docs/add_ons.txt
===================================================================
--- vendor/django/current/docs/add_ons.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/add_ons.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,20 +1,23 @@
-=====================
-The "contrib" add-ons
-=====================
+============================
+The "django.contrib" add-ons
+============================
 
-Django aims to follow Python's "batteries included" philosophy. It ships with a
-variety of extra, optional tools that solve common Web-development problems.
+Django aims to follow Python's `"batteries included" philosophy`_. It ships
+with a variety of extra, optional tools that solve common Web-development
+problems.
 
 This code lives in ``django/contrib`` in the Django distribution. Here's a
 rundown of the packages in ``contrib``:
 
+.. _"batteries included" philosophy: http://docs.python.org/tut/node12.html#batteries-included
+
 admin
 =====
 
 The automatic Django administrative interface. For more information, see
 `Tutorial 2`_.
 
-.. _Tutorial 2: http://www.djangoproject.com/documentation/tutorial2/
+.. _Tutorial 2: ../tutorial2/
 
 auth
 ====
@@ -23,7 +26,7 @@
 
 See the `authentication documentation`_.
 
-.. _authentication documentation: http://www.djangoproject.com/documentation/authentication/
+.. _authentication documentation: ../authentication/
 
 comments
 ========
@@ -43,8 +46,23 @@
 
 See the `csrf documentation`_.
 
-.. _csrf documentation: http://www.djangoproject.com/documentation/csrf/
+.. _csrf documentation: ../csrf/
 
+formtools
+=========
+
+A set of high-level abstractions for Django forms (django.newforms).
+
+django.contrib.formtools.preview
+--------------------------------
+
+An abstraction of the following workflow:
+
+"Display an HTML form, force a preview, then do something with the submission."
+
+Full documentation for this feature does not yet exist, but you can read the
+code and docstrings in ``django/contrib/formtools/preview.py`` for a start.
+
 humanize
 ========
 
@@ -117,19 +135,30 @@
 
 See the `flatpages documentation`_.
 
-.. _flatpages documentation: http://www.djangoproject.com/documentation/flatpages/
+.. _flatpages documentation: ../flatpages/
 
+localflavor
+===========
+
+A collection of various Django snippets that are useful only for a particular
+country or culture. For example, ``django.contrib.localflavor.usa.forms``
+contains a ``USZipCodeField`` that you can use to validate U.S. zip codes.
+
 markup
 ======
 
 A collection of template filters that implement these common markup languages:
 
-    * Textile
-    * Markdown
-    * ReST (ReStructured Text)
+    * `Textile`_
+    * `Markdown`_
+    * `ReST (ReStructured Text)`_
 
 For documentation, read the source code in django/contrib/markup/templatetags/markup.py.
 
+.. _Textile: http://en.wikipedia.org/wiki/Textile_%28markup_language%29
+.. _Markdown: http://en.wikipedia.org/wiki/Markdown
+.. _ReST (ReStructured Text): http://en.wikipedia.org/wiki/ReStructuredText
+
 redirects
 =========
 
@@ -137,7 +166,7 @@
 
 See the `redirects documentation`_.
 
-.. _redirects documentation: http://www.djangoproject.com/documentation/redirects/
+.. _redirects documentation: ../redirects/
 
 sites
 =====
@@ -148,8 +177,17 @@
 
 See the `sites documentation`_.
 
-.. _sites documentation: http://www.djangoproject.com/documentation/sites/
+.. _sites documentation: ../sites/
 
+sitemaps
+========
+
+A framework for generating Google sitemap XML files.
+
+See the `sitemaps documentation`_.
+
+.. _sitemaps documentation: ../sitemaps/
+
 syndication
 ===========
 
@@ -157,7 +195,7 @@
 
 See the `syndication documentation`_.
 
-.. _syndication documentation: http://www.djangoproject.com/documentation/syndication/
+.. _syndication documentation: ../syndication/
 
 Other add-ons
 =============

Modified: vendor/django/current/docs/admin_css.txt
===================================================================
--- vendor/django/current/docs/admin_css.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/admin_css.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -82,7 +82,7 @@
 .help
     This is a custom class for blocks of inline help text explaining the
     function of form elements. It makes text smaller and gray, and when applied
-    to ``p`` elements withing ``.form-row`` elements (see Form Styles below),
+    to ``p`` elements within ``.form-row`` elements (see Form Styles below),
     it will offset the text to align with the form field. Use this for help
     text, instead of ``small quiet``. It works on other elements, but try to
     put the class on a ``p`` whenever you can.
@@ -170,4 +170,4 @@
 Form labels should always precede the field, except in the case
 of checkboxes and radio buttons, where the ``input`` should come first. Any
 explanation or help text should follow the ``label`` in a ``p`` with class
-``.help``.
\ No newline at end of file
+``.help``.

Modified: vendor/django/current/docs/apache_auth.txt
===================================================================
--- vendor/django/current/docs/apache_auth.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/apache_auth.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -6,7 +6,7 @@
 dealing with Apache, you can configuring Apache to authenticate against Django's
 `authentication system`_ directly.  For example, you could:
 
-    * Serve media files directly from Apache only to authenticated users.
+    * Serve static/media files directly from Apache only to authenticated users.
 
     * Authenticate access to a Subversion_ repository against Django users with
       a certain permission.
@@ -65,7 +65,7 @@
     SetEnv DJANGO_SETTINGS_MODULE mysite.settings
     PythonOption DJANGO_SETTINGS_MODULE mysite.settings
 
-.. _authentication system: http://www.djangoproject.com/documentation/authentication/
+.. _authentication system: ../authentication/
 .. _Subversion: http://subversion.tigris.org/
 .. _mod_dav: http://httpd.apache.org/docs/2.0/mod/mod_dav.html
-.. _custom permissions: http://www.djangoproject.com/documentation/authentication/#custom-permissions
+.. _custom permissions: ../authentication/#custom-permissions

Modified: vendor/django/current/docs/api_stability.txt
===================================================================
--- vendor/django/current/docs/api_stability.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/api_stability.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -82,7 +82,7 @@
 That said, these APIs should *not* be considered stable, and are likely to
 change:
 
-   - `Forms and validation`_ will most likely be compeltely rewritten to
+   - `Forms and validation`_ will most likely be completely rewritten to
      deemphasize Manipulators in favor of validation-aware models.
 
    - `Serialization`_ is under heavy development; changes are likely.
@@ -91,33 +91,33 @@
      API changes may be necessary.
 
    - Generic relations will most likely be moved out of core and into the
-     content-types contrib package to avoid core dependacies on optional
+     content-types contrib package to avoid core dependancies on optional
      components.
 
    - The comments framework, which is yet undocumented, will likely get a complete
      rewrite before Django 1.0. Even if the change isn't quite that drastic,
      there will at least be moderate changes.
      
-.. _caching: http://www.djangoproject.com/documentation/cache/
-.. _custom template tags and libraries: http://www.djangoproject.com/documentation/templates_python/
-.. _database lookup: http://www.djangoproject.com/documentation/db_api/
-.. _django-admin utility: http://www.djangoproject.com/documentation/django_admin/
-.. _fastcgi integration: http://www.djangoproject.com/documentation/fastcgi/
-.. _flatpages: http://www.djangoproject.com/documentation/flatpages/
-.. _generic views: http://www.djangoproject.com/documentation/generic_views/
-.. _internationalization: http://www.djangoproject.com/documentation/i18n/
-.. _legacy database integration: http://www.djangoproject.com/documentation/legacy_databases/
-.. _model definition: http://www.djangoproject.com/documentation/model_api/
-.. _mod_python integration: http://www.djangoproject.com/documentation/modpython/
-.. _redirects: http://www.djangoproject.com/documentation/redirects/
-.. _request/response objects: http://www.djangoproject.com/documentation/request_response/
-.. _sending email: http://www.djangoproject.com/documentation/email/
-.. _sessions: http://www.djangoproject.com/documentation/sessions/
-.. _settings: http://www.djangoproject.com/documentation/settings/
-.. _syndication: http://www.djangoproject.com/documentation/syndication/
-.. _template language: http://www.djangoproject.com/documentation/templates/
-.. _transactions: http://www.djangoproject.com/documentation/transactions/
-.. _url dispatch: http://www.djangoproject.com/documentation/url_dispatch/
-.. _forms and validation: http://www.djangoproject.com/documentation/forms/
-.. _serialization: http://www.djangoproject.com/documentation/serialization/
-.. _authentication: http://www.djangoproject.com/documentation/authentication/
+.. _caching: ../cache/
+.. _custom template tags and libraries: ../templates_python/
+.. _database lookup: ../db_api/
+.. _django-admin utility: ../django_admin/
+.. _fastcgi integration: ../fastcgi/
+.. _flatpages: ../flatpages/
+.. _generic views: ../generic_views/
+.. _internationalization: ../i18n/
+.. _legacy database integration: ../legacy_databases/
+.. _model definition: ../model_api/
+.. _mod_python integration: ../modpython/
+.. _redirects: ../redirects/
+.. _request/response objects: ../request_response/
+.. _sending email: ../email/
+.. _sessions: ../sessions/
+.. _settings: ../settings/
+.. _syndication: ../syndication/
+.. _template language: ../templates/
+.. _transactions: ../transactions/
+.. _url dispatch: ../url_dispatch/
+.. _forms and validation: ../forms/
+.. _serialization: ../serialization/
+.. _authentication: ../authentication/

Modified: vendor/django/current/docs/authentication.txt
===================================================================
--- vendor/django/current/docs/authentication.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/authentication.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -66,8 +66,8 @@
       long and can contain any character. See the "Passwords" section below.
     * ``is_staff`` -- Boolean. Designates whether this user can access the
       admin site.
-    * ``is_active`` -- Boolean. Designates whether this user can log into the
-      Django admin. Set this to ``False`` instead of deleting accounts.
+    * ``is_active`` -- Boolean. Designates whether this account can be used
+      to log in. Set this flag to ``False`` instead of deleting accounts.
     * ``is_superuser`` -- Boolean. Designates that this user has all permissions
       without explicitly assigning them.
     * ``last_login`` -- A datetime of the user's last login. Is set to the
@@ -82,14 +82,14 @@
 ``user_permissions``. ``User`` objects can access their related
 objects in the same way as any other `Django model`_::
 
-    myuser.objects.groups = [group_list]
-    myuser.objects.groups.add(group, group,...)
-    myuser.objects.groups.remove(group, group,...)
-    myuser.objects.groups.clear()
-    myuser.objects.permissions = [permission_list]
-    myuser.objects.permissions.add(permission, permission, ...)
-    myuser.objects.permissions.remove(permission, permission, ...]
-    myuser.objects.permissions.clear()
+    myuser.groups = [group_list]
+    myuser.groups.add(group, group,...)
+    myuser.groups.remove(group, group,...)
+    myuser.groups.clear()
+    myuser.user_permissions = [permission_list]
+    myuser.user_permissions.add(permission, permission, ...)
+    myuser.user_permissions.remove(permission, permission, ...]
+    myuser.user_permissions.clear()
 
 In addition to those automatic API methods, ``User`` objects have the following
 custom methods:
@@ -99,7 +99,9 @@
       should prefer using ``is_authenticated()`` to this method.
 
     * ``is_authenticated()`` -- Always returns ``True``. This is a way to
-      tell if the user has been authenticated.
+      tell if the user has been authenticated. This does not imply any 
+      permissions, and doesn't check if the user is active - it only indicates
+      that the user has provided a valid username and password.
 
     * ``get_full_name()`` -- Returns the ``first_name`` plus the ``last_name``,
       with a space in between.
@@ -120,13 +122,16 @@
 
     * ``has_perm(perm)`` -- Returns ``True`` if the user has the specified
       permission, where perm is in the format ``"package.codename"``.
+      If the user is inactive, this method will always return ``False``.
 
     * ``has_perms(perm_list)`` -- Returns ``True`` if the user has each of the
       specified permissions, where each perm is in the format
-      ``"package.codename"``.
+      ``"package.codename"``. If the user is inactive, this method will 
+      always return ``False``.
 
     * ``has_module_perms(package_name)`` -- Returns ``True`` if the user has
       any permissions in the given package (the Django app label).
+      If the user is inactive, this method will always return ``False``.
 
     * ``get_and_delete_messages()`` -- Returns a list of ``Message`` objects in
       the user's queue and deletes the messages from the queue.
@@ -139,8 +144,8 @@
       Raises ``django.contrib.auth.models.SiteProfileNotAvailable`` if the current site
       doesn't allow profiles.
 
-.. _Django model: http://www.djangoproject.com/documentation/model_api/
-.. _DEFAULT_FROM_EMAIL: http://www.djangoproject.com/documentation/settings/#default-from-email
+.. _Django model: ../model_api/
+.. _DEFAULT_FROM_EMAIL: ../settings/#default-from-email
 
 Manager functions
 ~~~~~~~~~~~~~~~~~
@@ -266,8 +271,8 @@
     else:
         # Do something for anonymous users.
 
-.. _request objects: http://www.djangoproject.com/documentation/request_response/#httprequest-objects
-.. _session documentation: http://www.djangoproject.com/documentation/sessions/
+.. _request objects: ../request_response/#httprequest-objects
+.. _session documentation: ../sessions/
 
 How to log a user in
 --------------------
@@ -283,7 +288,10 @@
     from django.contrib.auth import authenticate
     user = authenticate(username='john', password='secret')
     if user is not None:
-        print "You provided a correct username and password!"
+        if user.is_active:
+            print "You provided a correct username and password!"
+        else:
+            print "Your account has been disabled!"
     else:
         print "Your username and password were incorrect."
 
@@ -301,11 +309,24 @@
         password = request.POST['password']
         user = authenticate(username=username, password=password)
         if user is not None:
-            login(request, user)
-            # Redirect to a success page.
+            if user.is_active:
+                login(request, user)
+                # Redirect to a success page.
+            else:
+                # Return a 'disabled account' error message
         else:
-            # Return an error message.
+            # Return an 'invalid login' error message.
 
+Manually checking a user's password
+-----------------------------------
+
+If you'd like to manually authenticate a user by comparing a
+plain-text password to the hashed password in the database, use the
+convenience function `django.contrib.auth.models.check_password`. It
+takes two arguments: the plain-text password to check, and the full
+value of a user's ``password`` field in the database to check against,
+and returns ``True`` if they match, ``False`` otherwise.
+
 How to log a user out
 ---------------------
 
@@ -377,7 +398,7 @@
 
     (r'^accounts/login/$', 'django.contrib.auth.views.login'),
 
-Here's what ``django.contrib.auth.views.login`` does::
+Here's what ``django.contrib.auth.views.login`` does:
 
     * If called via ``GET``, it displays a login form that POSTs to the same
       URL. More on this in a bit.
@@ -430,9 +451,150 @@
 
     {% endblock %}
 
-.. _forms documentation: http://www.djangoproject.com/documentation/forms/
-.. _site framework docs: http://www.djangoproject.com/documentation/sites/
+.. _forms documentation: ../forms/
+.. _site framework docs: ../sites/
 
+Other built-in views
+--------------------
+
+In addition to the `login` view, the authentication system includes a
+few other useful built-in views:
+
+``django.contrib.auth.views.logout``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+Logs a user out.
+
+**Optional arguments:**
+
+    * ``template_name``: The full name of a template to display after
+      logging the user out. This will default to
+      ``registration/logged_out.html`` if no argument is supplied.
+
+**Template context:**
+
+    * ``title``: The string "Logged out", localized.
+
+``django.contrib.auth.views.logout_then_login``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+Logs a user out, then redirects to the login page.
+
+**Optional arguments:**
+
+    * ``login_url``: The URL of the login page to redirect to. This
+      will default to ``/accounts/login/`` if not supplied.
+
+``django.contrib.auth.views.password_change``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+Allows a user to change their password.
+
+**Optional arguments:**
+
+    * ``template_name``: The full name of a template to use for
+      displaying the password change form. This will default to
+      ``registration/password_change_form.html`` if not supplied.
+
+**Template context:**
+
+    * ``form``: The password change form.
+
+``django.contrib.auth.views.password_change_done``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+The page shown after a user has changed their password.
+
+**Optional arguments:**
+
+    * ``template_name``: The full name of a template to use. This will
+      default to ``registration/password_change_done.html`` if not
+      supplied.
+
+``django.contrib.auth.views.password_reset``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+Allows a user to reset their password, and sends them the new password
+in an email.
+
+**Optional arguments:**
+
+    * ``template_name``: The full name of a template to use for
+      displaying the password reset form. This will default to
+      ``registration/password_reset_form.html`` if not supplied.
+
+    * ``email_template_name``: The full name of a template to use for
+      generating the email with the new password. This will default to
+      ``registration/password_reset_email.html`` if not supplied.
+
+**Template context:**
+
+    * ``form``: The form for resetting the user's password.
+
+``django.contrib.auth.views.password_reset_done``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+The page shown after a user has reset their password.
+
+**Optional arguments:**
+
+    * ``template_name``: The full name of a template to use. This will
+      default to ``registration/password_reset_done.html`` if not
+      supplied.
+
+``django.contrib.auth.views.redirect_to_login``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Description:**
+
+Redirects to the login page, and then back to another URL after a
+successful login.
+
+**Required arguments:**
+
+    * ``next``: The URL to redirect to after a successful login.
+
+**Optional arguments:**
+
+    * ``login_url``: The URL of the login page to redirect to. This
+      will default to ``/accounts/login/`` if not supplied.
+
+Built-in manipulators
+---------------------
+
+If you don't want to use the built-in views, but want the convenience
+of not having to write manipulators for this functionality, the
+authentication system provides several built-in manipulators:
+
+    * ``django.contrib.auth.forms.AdminPasswordChangeForm``: A
+      manipulator used in the admin interface to change a user's
+      password.
+
+    * ``django.contrib.auth.forms.AuthenticationForm``: A manipulator
+      for logging a user in.
+
+    * ``django.contrib.auth.forms.PasswordChangeForm``: A manipulator
+      for allowing a user to change their password.
+
+    * ``django.contrib.auth.forms.PasswordResetForm``: A manipulator
+      for resetting a user's password and emailing the new password to
+      them.
+
+    * ``django.contrib.auth.forms.UserCreationForm``: A manipulator
+      for creating a new user.
+
 Limiting access to logged-in users that pass a test
 ---------------------------------------------------
 
@@ -456,6 +618,10 @@
         # ...
     my_view = user_passes_test(lambda u: u.has_perm('polls.can_vote'))(my_view)
 
+We're using this particular test as a relatively simple example. However, if
+you just want to test whether a permission is available to a user, you can use
+the ``permission_required()`` decorator, described later in this document.
+
 Here's the same thing, using Python 2.4's decorator syntax::
 
     from django.contrib.auth.decorators import user_passes_test
@@ -488,6 +654,34 @@
     def my_view(request):
         # ...
 
+The permission_required decorator
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**New in Django development version**
+
+It's a relatively common task to check whether a user has a particular
+permission. For that reason, Django provides a shortcut for that case: the
+``permission_required()`` decorator. Using this decorator, the earlier example
+can be written as::
+
+    from django.contrib.auth.decorators import permission_required
+
+    def my_view(request):
+        # ...
+    my_view = permission_required('polls.can_vote')(my_view)
+
+Note that ``permission_required()`` also takes an optional ``login_url``
+parameter. Example::
+
+    from django.contrib.auth.decorators import permission_required
+
+    def my_view(request):
+        # ...
+    my_view = permission_required('polls.can_vote', login_url='/loginpage/')(my_view)
+
+As in the ``login_required`` decorator, ``login_url`` defaults to
+``'/accounts/login/'``.
+
 Limiting access to generic views
 --------------------------------
 
@@ -501,7 +695,7 @@
     def limited_object_detail(*args, **kwargs):
         return object_detail(*args, **kwargs)
 
-.. _generic view: http://www.djangoproject.com/documentation/generic_views/
+.. _generic view: ../generic_views/
 
 Permissions
 ===========
@@ -563,7 +757,7 @@
 The only thing this does is create those extra permissions when you run
 ``syncdb``.
 
-.. _model Meta attribute: http://www.djangoproject.com/documentation/model_api/#meta-options
+.. _model Meta attribute: ../model_api/#meta-options
 
 API reference
 -------------
@@ -602,7 +796,7 @@
    setting contains ``"django.core.context_processors.auth"``, which is default.
    For more, see the `RequestContext docs`_.
 
-   .. _RequestContext docs: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-requestcontext
+   .. _RequestContext docs: ../templates_python/#subclassing-context-requestcontext
 
 Users
 -----
@@ -611,7 +805,7 @@
 instance, is stored in the template variable ``{{ user }}``::
 
     {% if user.is_authenticated %}
-        <p>Welcome, {{ user.username }}. Thanks for logging in.</p>    
+        <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
     {% else %}
         <p>Welcome, new user. Please log in.</p>
     {% endif %}
@@ -648,7 +842,7 @@
         <p>You don't have permission to do anything in the foo app.</p>
     {% endif %}
 
-.. _template context: http://www.djangoproject.com/documentation/templates_python/
+.. _template context: ../templates_python/
 
 Groups
 ======
@@ -677,7 +871,7 @@
 Messages are used by the Django admin after successful actions. For example,
 ``"The poll Foo was created successfully."`` is a message.
 
-The API is simple::
+The API is simple:
 
     * To create a new message, use
       ``user_obj.message_set.create(message='message_text')``.
@@ -702,7 +896,7 @@
     {% if messages %}
     <ul>
         {% for message in messages %}
-        <li>{{ message.message }}</li>
+        <li>{{ message }}</li>
         {% endfor %}
     </ul>
     {% endif %}
@@ -713,7 +907,7 @@
 Finally, note that this messages framework only works with users in the user
 database. To send messages to anonymous users, use the `session framework`_.
 
-.. _session framework: http://www.djangoproject.com/documentation/sessions/
+.. _session framework: ../sessions/
 
 Other authentication sources
 ============================
@@ -770,13 +964,13 @@
 the time, it'll just look like this::
 
     class MyBackend:
-        def authenticate(username=None, password=None):
+        def authenticate(self, username=None, password=None):
             # Check the username/password and return a User.
 
 But it could also authenticate a token, like so::
 
     class MyBackend:
-        def authenticate(token=None):
+        def authenticate(self, token=None):
             # Check the token and return a User.
 
 Either way, ``authenticate`` should check the credentials it gets, and it

Modified: vendor/django/current/docs/cache.txt
===================================================================
--- vendor/django/current/docs/cache.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/cache.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -233,7 +233,10 @@
 parameters. Optionally, if the ``CACHE_MIDDLEWARE_ANONYMOUS_ONLY`` setting is
 ``True``, only anonymous requests (i.e., not those made by a logged-in user)
 will be cached. This is a simple and effective way of disabling caching for any
-user-specific pages (include Django's admin interface).
+user-specific pages (include Django's admin interface). Note that if you use
+``CACHE_MIDDLEWARE_ANONYMOUS_ONLY``, you should make sure you've activated
+``AuthenticationMiddleware`` and that ``AuthenticationMiddleware`` appears
+before ``CacheMiddleware`` in your ``MIDDLEWARE_CLASSES``.
 
 Additionally, ``CacheMiddleware`` automatically sets a few headers in each
 ``HttpResponse``:
@@ -247,7 +250,7 @@
 
 See the `middleware documentation`_ for more on middleware.
 
-.. _`middleware documentation`: http://www.djangoproject.com/documentation/middleware/
+.. _`middleware documentation`: ../middleware/
 
 The per-view cache
 ==================

Modified: vendor/django/current/docs/contributing.txt
===================================================================
--- vendor/django/current/docs/contributing.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/contributing.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -22,6 +22,9 @@
       likely to be skeptical of large-scale suggestions without some code to
       back it up.
 
+    * Triage patches that have been submitted by other users. Please read
+      `Ticket triage`_ below, for details on the triage process.
+
 That's all you need to know if you'd like to join the Django development
 community. The rest of this document describes the details of how our community
 works and how it handles bugs, mailing lists, and all the other minutiae of
@@ -44,8 +47,10 @@
 
     * **Do** write complete, reproducible, specific bug reports. Include as
       much information as you possibly can, complete with code snippets, test
-      cases, etc.  A minimal example that illustrates the bug in a nice small
-      test case is the best possible bug report.
+      cases, etc. This means including a clear, concise description of the
+      problem, and a clear set of instructions for replicating the problem.
+      A minimal example that illustrates the bug in a nice small test case
+      is the best possible bug report.
 
     * **Don't** use the ticket system to ask support questions.  Use the
       `django-users`_ list, or the `#django`_ IRC channel for that.
@@ -117,10 +122,127 @@
     * Name the patch file with a ``.diff`` extension; this will let the ticket
       tracker apply correct syntax highlighting, which is quite helpful.
 
-    * Put the prefix "[patch] " before the title of your ticket. This will make
-      it obvious that the ticket includes a patch, and it will add the ticket
-      to the `list of tickets with patches`_.
+    * Check the "Has patch" box on the ticket details. This will make it
+      obvious that the ticket includes a patch, and it will add the ticket to
+      the `list of tickets with patches`_.
 
+    * The code required to fix a problem or add a feature is an essential part
+      of a patch, but it is not the only part. A good patch should also include
+      a regression test to validate the behavior that has been fixed (and prevent
+      the problem from arising again).
+
+    * If the code associated with a patch adds a new feature, or modifies behavior
+      of an existing feature, the patch should also contain documentation.
+
+Non-trivial patches
+-------------------
+
+A "non-trivial" patch is one that is more than a simple bug fix. It's a patch
+that introduces Django functionality and makes some sort of design decision.
+
+If you provide a non-trivial patch, include evidence that alternatives have
+been discussed on `django-developers`_. If you're not sure whether your patch
+should be considered non-trivial, just ask.
+
+Ticket triage
+=============
+
+Unfortunately, not all bug reports in the `ticket tracker`_ provide all
+the `required details`_. A number of tickets have patches, but those patches
+don't meet all the requirements of a `good patch`_.
+
+One way to help out is to *triage* bugs that have been reported by other
+users. A couple of dedicated volunteers work on this regularly, but more help
+is always appreciated.
+
+Most of the workflow is based around the concept of a ticket's "triage stage".
+This stage describes where in its lifetime a given ticket is at any time.
+Along with a handful of flags, this field easily tells us what and who each
+ticket is waiting on.
+
+Since a picture is worth a thousand words, let's start there:
+
+.. image:: http://media.djangoproject.com/img/doc/djangotickets.png
+   :height: 451
+   :width: 590
+   :alt: Django's ticket workflow
+
+We've got two roles here:
+
+    * Core developers: people with commit access who make the decisions and
+      write the bulk of the code.
+
+    * Ticket triagers: community members who keep track of tickets, making
+      sure the tickets are always categorized correctly.
+
+Second, note the four triage stages:
+
+    1. A ticket starts as "Unreviewed", meaning that a triager has yet to
+       examine the ticket and move it along.
+
+    2. "Design decision needed" means "this concept requires a design
+       decision," which should be discussed either in the ticket comments or on
+       django-developers.
+
+    3. Once a ticket is ruled to be approved for fixing, it's moved into the
+       "Accepted" stage. This stage is where all the real work gets done.
+
+    4. If a ticket has an associated patch (see below), a triager will review the
+       patch. If the patch is complete, it'll be marked as "ready for checkin" so
+       that a core developer knows to review and check in the patches.
+
+The second part of this workflow involves a set of flags the describe what the
+ticket has or needs in order to be "ready for checkin":
+
+    "Has patch"
+        This means the ticket has an associated patch_. These will be
+        reviewed to see if the patch is "good".
+
+    "Needs documentation"
+        This flag is used for tickets with patches that need associated
+        documentation. Complete documentation of features is a prerequisite
+        before we can check a fix into the codebase.
+
+    "Needs tests"
+        This flags the patch as needing associated unit tests. Again, this is a
+        required part of a valid patch.
+
+    "Patch needs improvement"
+        This flag means that although the ticket *has* a patch, it's not quite
+        ready for checkin. This could mean the patch no longer applies
+        cleanly, or that the code doesn't live up to our standards.
+
+A ticket can be resolved in a number of ways:
+
+    "fixed"
+        Used by one of the core developers once a patch has been rolled into
+        Django and the issue is fixed.
+
+    "invalid"
+        Used if the ticket is found to be incorrect or a user error.
+
+    "wontfix"
+        Used when a core developer decides that this request is not
+        appropriate for consideration in Django. This is usually chosen after
+        discussion in the ``django-developers`` mailing list, and you should
+        feel free to join in when it's something you care about.
+
+    "duplicate"
+        Used when another ticket covers the same issue. By closing duplicate
+        tickets, we keep all the discussion in one place, which helps everyone.
+
+    "worksforme"
+        Used when the triage team is unable to replicate the original bug.
+
+If you believe that the ticket was closed in error -- because you're
+still having the issue, or it's popped up somewhere else, or the triagers have
+-- made a mistake, please reopen the ticket and tell us why. Please do not
+reopen tickets that have been marked as "wontfix" by core developers.
+
+.. _required details: `Reporting bugs`_
+.. _good patch: `Patch style`_
+.. _patch: `Submitting patches`_
+
 Submitting and maintaining translations
 =======================================
 
@@ -137,7 +259,7 @@
       `i18n documentation`_.
 
 .. _Django i18n mailing list: http://groups.google.com/group/django-i18n/
-.. _i18n documentation: http://www.djangoproject.com/documentation/i18n/
+.. _i18n documentation: ../i18n/
 
 Coding style
 ============
@@ -168,10 +290,25 @@
 
           {{foo}}
 
-    * Please don't put your name in the code. While we appreciate all
-      contributions to Django, our policy is not to publish individual
-      developer names in code -- for instance, at the top of Python modules.
+    * In Django views, the first parameter in a view function should be called
+      ``request``.
 
+      Do this::
+
+          def my_view(request, foo):
+              # ...
+
+      Don't do this::
+
+          def my_view(req, foo):
+              # ...
+
+    * Please don't put your name in the code you contribute. Our policy is to
+      keep contributors' names in the ``AUTHORS`` file distributed with Django
+      -- not scattered throughout the codebase itself. Feel free to include a
+      change to the ``AUTHORS`` file in your patch if you make more than a
+      single trivial change.
+
 Committing code
 ===============
 
@@ -234,18 +371,23 @@
 
 The tests cover:
 
-    * Models and the database API (``tests/testapp/models``).
-    * The cache system (``tests/otherthests/cache.py``).
-    * The ``django.utils.dateformat`` module (``tests/othertests/dateformat.py``).
-    * Database typecasts (``tests/othertests/db_typecasts.py``).
-    * The template system (``tests/othertests/templates.py`` and
-      ``tests/othertests/defaultfilters.py``).
-    * ``QueryDict`` objects (``tests/othertests/httpwrappers.py``).
-    * Markup template tags (``tests/othertests/markup.py``).
-    * The ``django.utils.timesince`` module (``tests/othertests/timesince.py``).
+    * Models and the database API (``tests/modeltests/``).
+    * The cache system (``tests/regressiontests/cache.py``).
+    * The ``django.utils.dateformat`` module (``tests/regressiontests/dateformat/``).
+    * Database typecasts (``tests/regressiontests/db_typecasts/``).
+    * The template system (``tests/regressiontests/templates/`` and
+      ``tests/regressiontests/defaultfilters/``).
+    * ``QueryDict`` objects (``tests/regressiontests/httpwrappers/``).
+    * Markup template tags (``tests/regressiontests/markup/``).
 
 We appreciate any and all contributions to the test suite!
 
+The Django tests all use the testing infrastructure that ships with Django for
+testing applications. See `Testing Django applications`_ for an explanation of
+how to write new tests.
+
+.. _Testing Django applications: ../testing/
+
 Running the unit tests
 ----------------------
 
@@ -255,10 +397,14 @@
 
 Yes, the unit tests need a settings module, but only for database connection
 info -- the ``DATABASE_ENGINE``, ``DATABASE_USER`` and ``DATABASE_PASSWORD``.
+You will also need a ``ROOT_URLCONF`` setting (its value is ignored; it just
+needs to be present) and a ``SITE_ID`` setting (any integer value will do) in
+order for all the tests to pass.
 
-The unit tests will not touch your database; they create a new database, called
-``django_test_db``, which is deleted when the tests are finished. This means
-your user account needs permission to execute ``CREATE DATABASE``.
+The unit tests will not touch your existing databases; they create a new
+database, called ``django_test_db``, which is deleted when the tests are
+finished. This means your user account needs permission to execute ``CREATE
+DATABASE``.
 
 Requesting features
 ===================
@@ -316,22 +462,89 @@
 Using branches
 --------------
 
-To test a given branch, you can simply check out the entire branch, like so::
+To use a branch, you'll need to do two things:
 
+    * Get the branch's code through Subversion.
+
+    * Point your Python ``site-packages`` directory at the branch's version of
+      the ``django`` package rather than the version you already have
+      installed.
+
+Getting the code from Subversion
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To get the latest version of a branch's code, check it out using Subversion::
+
     svn co http://code.djangoproject.com/svn/django/branches/<branch>/
 
-Or, if you've got a working directory you'd like to switch to use a branch,
-you can use::
+...where ``<branch>`` is the branch's name. See the `list of branch names`_.
 
+Alternatively, you can automatically convert an existing directory of the
+Django source code as long as you've checked it out via Subversion. To do the
+conversion, execute this command from within your ``django`` directory::
+
     svn switch http://code.djangoproject.com/svn/django/branches/<branch>/
 
-...in the root of your Django sandbox (the directory that contains ``django``,
-``docs``, and ``tests``).
-
 The advantage of using ``svn switch`` instead of ``svn co`` is that the
 ``switch`` command retains any changes you might have made to your local copy
-of the code. It attempts to merge those changes into the "switched" code.
+of the code. It attempts to merge those changes into the "switched" code. The
+disadvantage is that it may cause conflicts with your local changes if the
+"switched" code has altered the same lines of code.
 
+(Note that if you use ``svn switch``, you don't need to point Python at the new
+version, as explained in the next section.)
+
+.. _list of branch names: http://code.djangoproject.com/browser/django/branches
+
+Pointing Python at the new Django version
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Once you've retrieved the branch's code, you'll need to change your Python
+``site-packages`` directory so that it points to the branch version of the
+``django`` directory. (The ``site-packages`` directory is somewhere such as
+``/usr/lib/python2.4/site-packages`` or
+``/usr/local/lib/python2.4/site-packages`` or ``C:\Python\site-packages``.)
+
+The simplest way to do this is by renaming the old ``django`` directory to
+``django.OLD`` and moving the trunk version of the code into the directory
+and calling it ``django``.
+
+Alternatively, you can use a symlink called ``django`` that points to the
+location of the branch's ``django`` package. If you want to switch back, just
+change the symlink to point to the old code.
+
+A third option is to use a `path file`_ (``<something>.pth``) which should
+work on all systems (including Windows, which doesn't have symlinks
+available). First, make sure there are no files, directories or symlinks named
+``django`` in your ``site-packages`` directory. Then create a text file named
+``django.pth`` and save it to your ``site-packages`` directory. That file
+should contain a path to your copy of Django on a single line and optional
+comments. Here is an example that points to multiple branches. Just uncomment
+the line for the branch you want to use ('Trunk' in this example) and make
+sure all other lines are commented::
+
+    # Trunk is a svn checkout of:
+    #   http://code.djangoproject.com/svn/django/trunk/
+    #
+    /path/to/trunk
+
+    # <branch> is a svn checkout of:
+    #   http://code.djangoproject.com/svn/django/branches/<branch>/
+    #
+    #/path/to/<branch>
+
+    # On windows a path may look like this:
+    # C:/path/to/<branch>
+
+If you're using Django 0.95 or earlier and installed it using
+``python setup.py install``, you'll have a directory called something like
+``Django-0.95-py2.4.egg`` instead of ``django``. In this case, edit the file
+``setuptools.pth`` and remove the line that references the Django ``.egg``
+file. Then copy the branch's version of the ``django`` directory into
+``site-packages``.
+
+.. _path file: http://docs.python.org/lib/module-site.html
+
 Official releases
 =================
 
@@ -435,8 +648,7 @@
 .. _search the tracker: http://code.djangoproject.com/search
 .. _django-users: http://groups.google.com/group/django-users
 .. _`#django`: irc://irc.freenode.net/django
-.. _list of tickets with patches: http://code.djangoproject.com/report/12
+.. _list of tickets with patches: http://code.djangoproject.com/query?status=new&status=assigned&status=reopened&has_patch=1&order=priority
 .. _PEP 8: http://www.python.org/peps/pep-0008.html
-.. _i18n documentation: http://www.djangoproject.com/documentation/i18n/
 .. _i18n branch: http://code.djangoproject.com/browser/django/branches/i18n
 .. _`tags/releases`: http://code.djangoproject.com/browser/django/tags/releases

Modified: vendor/django/current/docs/csrf.txt
===================================================================
--- vendor/django/current/docs/csrf.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/csrf.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,9 +1,9 @@
 =====================================
-Cross Site Request Forgery Protection
+Cross Site Request Forgery protection
 =====================================
 
-The CsrfMiddleware class provides easy-to-use protection against 
-`Cross Site Request Forgeries`_.  This type of attack occurs when a malicious 
+The CsrfMiddleware class provides easy-to-use protection against
+`Cross Site Request Forgeries`_.  This type of attack occurs when a malicious
 web site creates a link or form button that is intended to perform some action
 on your web site, using the credentials of a logged-in user who is tricked
 into clicking on the link in their browser.
@@ -12,12 +12,12 @@
 are side-effect free.  POST requests can then be protected by adding this
 middleware into your list of installed middleware.
 
-
 .. _Cross Site Request Forgeries:  http://www.squarefree.com/securitytips/web-developers.html#CSRF
 
 How to use it
 =============
-Add the middleware ``'django.contrib.csrf.middleware.CsrfMiddleware'`` to 
+
+Add the middleware ``'django.contrib.csrf.middleware.CsrfMiddleware'`` to
 your list of middleware classes, ``MIDDLEWARE_CLASSES``. It needs to process
 the response after the SessionMiddleware, so must come before it in the
 list. It also must process the response before things like compression
@@ -25,16 +25,17 @@
 
 How it works
 ============
+
 CsrfMiddleware does two things:
 
-1. It modifies outgoing requests by adding a hidden form field to all 
-   'POST' forms, with the name 'csrfmiddlewaretoken' and a value which is 
-   a hash of the session ID plus a secret. If there is no session ID set, 
-   this modification of the response isn't done, so there is very little 
+1. It modifies outgoing requests by adding a hidden form field to all
+   'POST' forms, with the name 'csrfmiddlewaretoken' and a value which is
+   a hash of the session ID plus a secret. If there is no session ID set,
+   this modification of the response isn't done, so there is very little
    performance penalty for those requests that don't have a session.
 
-2. On all incoming POST requests that have the session cookie set, it 
-   checks that the 'csrfmiddlewaretoken' is present and correct. If it 
+2. On all incoming POST requests that have the session cookie set, it
+   checks that the 'csrfmiddlewaretoken' is present and correct. If it
    isn't, the user will get a 403 error.
 
 This ensures that only forms that have originated from your web site
@@ -43,26 +44,26 @@
 It deliberately only targets HTTP POST requests (and the corresponding
 POST forms). GET requests ought never to have side effects (if you are
 using HTTP GET and POST correctly), and so a CSRF attack with a GET
-request will always be harmless. 
+request will always be harmless.
 
 POST requests that are not accompanied by a session cookie are not protected,
 but they do not need to be protected, since the 'attacking' web site
 could make these kind of requests anyway.
 
-The Content-Type is checked before modifying the response, and only 
+The Content-Type is checked before modifying the response, and only
 pages that are served as 'text/html' or 'application/xml+xhtml'
 are modified.
 
 Limitations
 ===========
+
 CsrfMiddleware requires Django's session framework to work. If you have
 a custom authentication system that manually sets cookies and the like,
 it won't help you.
 
-If your app creates HTML pages and forms in some unusual way, (e.g. 
-it sends fragments of HTML in javascript document.write statements) 
-you might bypass the filter that adds the hidden field to the form, 
+If your app creates HTML pages and forms in some unusual way, (e.g.
+it sends fragments of HTML in javascript document.write statements)
+you might bypass the filter that adds the hidden field to the form,
 in which case form submission will always fail.  It may still be possible
 to use the middleware, provided you can find some way to get the
-CSRF token and ensure that is included when your form is submitted.
-
+CSRF token and ensure that is included when your form is submitted.
\ No newline at end of file

Added: vendor/django/current/docs/databases.txt
===================================================================
--- vendor/django/current/docs/databases.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/databases.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,162 @@
+===============================
+Notes about supported databases
+===============================
+
+Django attempts to support as many features as possible on all database
+backends. However, not all database backends are alike, and we've had to make
+design decisions on which features to support and which assumptions we can make
+safely.
+
+This file describes some of the features that might be relevant to Django
+usage. Of course, it is not intended as a replacement for server-specific
+documentation or reference manuals.
+
+MySQL notes
+===========
+
+Django expects the database to support transactions, referential integrity,
+and Unicode support (UTF-8 encoding). Fortunately, MySQL_ has all these
+features as available as far back as 3.23. While it may be possible to use
+3.23 or 4.0, you'll probably have less trouble if you use 4.1 or 5.0.
+
+MySQL 4.1
+---------
+
+`MySQL 4.1`_ has greatly improved support for character sets. It is possible to
+set different default character sets on the database, table, and column.
+Previous versions have only a server-wide character set setting. It's also the
+first version where the character set can be changed on the fly. 4.1 also has
+support for views, but Django currently doesn't use views.
+
+MySQL 5.0
+---------
+
+`MySQL 5.0`_ adds the ``information_schema`` database, which contains detailed
+data on all database schema. Django's ``inspectdb`` feature uses this
+``information_schema`` if it's available. 5.0 also has support for stored
+procedures, but Django currently doesn't use stored procedures.
+
+.. _MySQL: http://www.mysql.com/
+.. _MySQL 4.1: http://dev.mysql.com/doc/refman/4.1/en/index.html
+.. _MySQL 5.0: http://dev.mysql.com/doc/refman/5.0/en/index.html
+
+Storage engines
+---------------
+
+MySQL has several `storage engines`_ (previously called table types). You can
+change the default storage engine in the server configuration.
+
+The default engine is MyISAM_. The main drawback of MyISAM is that it doesn't
+currently support transactions or foreign keys. On the plus side, it's
+currently the only engine that supports full-text indexing and searching.
+
+The InnoDB_ engine is fully transactional and supports foreign key references.
+
+The BDB_ engine, like InnoDB, is also fully transactional and supports foreign
+key references. However, its use seems to be deprecated.
+
+`Other storage engines`_, including SolidDB_ and Falcon_, are on the horizon.
+For now, InnoDB is probably your best choice.
+
+.. _storage engines: http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html
+.. _MyISAM: http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html
+.. _BDB: http://dev.mysql.com/doc/refman/5.0/en/bdb-storage-engine.html
+.. _InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb.html
+.. _Other storage engines: http://dev.mysql.com/doc/refman/5.1/en/storage-engines-other.html
+.. _SolidDB: http://forge.mysql.com/projects/view.php?id=139
+.. _Falcon: http://dev.mysql.com/doc/falcon/en/index.html
+
+MySQLdb
+-------
+
+`MySQLdb`_ is the Python interface to MySQL. 1.2.1 is the first version that
+has support for MySQL 4.1 and newer. If you are trying to use an older version
+of MySQL, then 1.2.0 *might* work for you.
+
+.. _MySQLdb: http://sourceforge.net/projects/mysql-python
+
+Creating your database
+----------------------
+
+You can `create your database`_ using the command-line tools and this SQL::
+
+  CREATE DATABASE <dbname> CHARACTER SET utf8;
+
+This ensures all tables and columns will use UTF-8 by default.
+
+.. _create your database: http://dev.mysql.com/doc/refman/5.0/en/create-database.html
+
+Connecting to the database
+--------------------------
+
+Refer to the `settings documentation`_.
+
+Connection settings are used in this order:
+
+ 1. ``DATABASE_OPTIONS``
+ 2. ``DATABASE_NAME``, ``DATABASE_USER``, ``DATABASE_PASSWORD``, ``DATABASE_HOST``,
+    ``DATABASE_PORT``
+ 3. MySQL option files.
+
+In other words, if you set the name of the database in ``DATABASE_OPTIONS``,
+this will take precedence over ``DATABASE_NAME``, which would override
+anything in a `MySQL option file`_.
+
+Here's a sample configuration which uses a MySQL option file::
+
+  # settings.py
+  DATABASE_ENGINE = "mysql"
+  DATABASE_OPTIONS = {
+      'read_default_file': '/path/to/my.cnf',
+      }
+
+  # my.cnf
+  [client]
+  database = DATABASE_NAME
+  user = DATABASE_USER
+  passwd = DATABASE_PASSWORD
+  default-character-set = utf8
+
+Several other MySQLdb connection options may be useful, such as ``ssl``,
+``use_unicode``, ``init_command``, and ``sql_mode``. Consult the
+`MySQLdb documentation`_ for more details.
+
+.. _settings documentation: http://www.djangoproject.com/documentation/settings/#database-engine
+.. _MySQL option file: http://dev.mysql.com/doc/refman/5.0/en/option-files.html
+.. _MySQLdb documentation: http://mysql-python.sourceforge.net/
+
+Creating your tables
+--------------------
+
+When Django generates the schema, it doesn't specify a storage engine, so
+tables will be created with whatever default storage engine your database
+server is configured for. The easiest solution is to set your database server's
+default storage engine to the desired engine.
+
+If you're using a hosting service and can't change your server's default
+storage engine, you have a couple of options.
+
+    * After the tables are created, execute an ``ALTER TABLE`` statement to
+      convert a table to a new storage engine (such as InnoDB)::
+
+          ALTER TABLE <tablename> ENGINE=INNODB;
+
+      This can be tedious if you have a lot of tables.
+
+    * Another option is to use the ``init_command`` option for MySQLdb prior to
+      creating your tables::
+
+          DATABASE_OPTIONS = {
+              # ...
+             "init_command": "SET storage_engine=INNODB",
+              # ...
+          }
+
+      This sets the default storage engine upon connecting to the database.
+      After your tables have been created, you should remove this option.
+
+    * Another method for changing the storage engine is described in
+      AlterModelOnSyncDB_.
+
+.. _AlterModelOnSyncDB: http://code.djangoproject.com/wiki/AlterModelOnSyncDB
+

Modified: vendor/django/current/docs/db-api.txt
===================================================================
--- vendor/django/current/docs/db-api.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/db-api.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -6,7 +6,7 @@
 database-abstraction API that lets you create, retrieve, update and delete
 objects. This document explains that API.
 
-.. _`data models`: http://www.djangoproject.com/documentation/model_api/
+.. _`data models`: ../model_api/
 
 Throughout this reference, we'll refer to the following models, which comprise
 a weblog application::
@@ -85,7 +85,7 @@
 unless you explicitly specify ``primary_key=True`` on a field. See the
 `AutoField documentation`_.)
 
-.. _AutoField documentation: http://www.djangoproject.com/documentation/model_api/#autofield
+.. _AutoField documentation: ../model_api/#autofield
 
 Explicitly specifying auto-primary-key values
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -143,9 +143,9 @@
 follows this algorithm:
 
     * If the object's primary key attribute is set to a value that evaluates to
-      ``False`` (such as ``None`` or the empty string), Django executes a
-      ``SELECT`` query to determine whether a record with the given primary key
-      already exists.
+      ``True`` (i.e., a value other than ``None`` or the empty string), Django 
+      executes a ``SELECT`` query to determine whether a record with the given 
+      primary key already exists.
     * If the record with the given primary key does already exist, Django
       executes an ``UPDATE`` query.
     * If the object's primary key attribute is *not* set, or if it's set but a
@@ -525,7 +525,22 @@
     [datetime.datetime(2005, 3, 20), datetime.datetime(2005, 2, 20)]
     >>> Entry.objects.filter(headline__contains='Lennon').dates('pub_date', 'day')
     [datetime.datetime(2005, 3, 20)]
+    
+``none()``
+~~~~~~~~~~
 
+**New in Django development version**
+
+Returns an ``EmptyQuerySet`` -- a ``QuerySet`` that always evaluates to 
+an empty list. This can be used in cases where you know that you should
+return an empty result set and your caller is expecting a ``QuerySet``
+object (instead of returning an empty list, for example.)
+
+Examples::
+    
+    >>> Entry.objects.none()
+    []
+
 ``select_related()``
 ~~~~~~~~~~~~~~~~~~~~
 
@@ -578,6 +593,24 @@
     p = b.author         # Hits the database.
     c = p.hometown       # Hits the database.
 
+Note that ``select_related()`` does not follow foreign keys that have
+``null=True``.
+
+Usually, using ``select_related()`` can vastly improve performance because your
+app can avoid many database calls. However, in situations with deeply nested
+sets of relationships ``select_related()`` can sometimes end up following "too
+many" relations, and can generate queries so large that they end up being slow.
+
+In these situations, you can use the ``depth`` argument to ``select_related()``
+to control how many "levels" of relations ``select_related()`` will actually
+follow::
+
+    b = Book.objects.select_related(depth=1).get(id=4)
+    p = b.author         # Doesn't hit the database.
+    c = p.hometown       # Requires a database call.
+
+The ``depth`` argument is new in the Django development version.
+    
 ``extra(select=None, where=None, params=None, tables=None)``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -715,12 +748,12 @@
 A convenience method for creating an object and saving it all in one step.  Thus::
 
     p = Person.objects.create(first_name="Bruce", last_name="Springsteen")
-    
+
 and::
 
     p = Person(first_name="Bruce", last_name="Springsteen")
     p.save()
-    
+
 are equivalent.
 
 ``get_or_create(**kwargs)``
@@ -873,15 +906,18 @@
 exact
 ~~~~~
 
-Exact match.
+Exact match. If the value provided for comparison is ``None``, it will 
+be interpreted as an SQL ``NULL`` (See isnull_ for more details).  
 
-Example::
+Examples::
 
     Entry.objects.get(id__exact=14)
+    Entry.objects.get(id__exact=None)
 
-SQL equivalent::
+SQL equivalents::
 
     SELECT ... WHERE id = 14;
+    SELECT ... WHERE id = NULL;
 
 iexact
 ~~~~~~
@@ -1100,8 +1136,8 @@
 isnull
 ~~~~~~
 
-``NULL`` or ``IS NOT NULL`` match. Takes either ``True`` or ``False``, which
-correspond to ``IS NULL`` and ``IS NOT NULL``, respectively.
+Takes either ``True`` or ``False``, which correspond to SQL queries of 
+``IS NULL`` and ``IS NOT NULL``, respectively.
 
 Example::
 
@@ -1111,6 +1147,14 @@
 
     SELECT ... WHERE pub_date IS NULL;
 
+.. admonition:: ``__isnull=True`` vs ``__exact=None``
+
+    There is an important difference between ``__isnull=True`` and 
+    ``__exact=None``. ``__exact=None`` will *always* return an empty result
+    set, because SQL requires that no value is equal to ``NULL``. 
+    ``__isnull`` determines if the field is currently holding the value 
+    of ``NULL`` without performing a comparison.
+
 search
 ~~~~~~
 
@@ -1137,7 +1181,7 @@
 ----------------------
 
 For convenience, Django provides a ``pk`` lookup type, which stands for
-"primary_key". This is shorthand for "an exact lookup on the primary-key."
+"primary_key". 
 
 In the example ``Blog`` model, the primary key is the ``id`` field, so these
 three statements are equivalent::
@@ -1146,6 +1190,14 @@
     Blog.objects.get(id=14) # __exact is implied
     Blog.objects.get(pk=14) # pk implies id__exact
 
+The use of ``pk`` isn't limited to ``__exact`` queries -- any query term 
+can be combined with ``pk`` to perform a query on the primary key of a model::
+
+    # Get blogs entries  with id 1, 4 and 7
+    Blog.objects.filter(pk__in=[1,4,7])
+    # Get all blog entries with id > 14
+    Blog.objects.filter(pk__gt=14) 
+    
 ``pk`` lookups also work across joins. For example, these three statements are
 equivalent::
 
@@ -1468,11 +1520,12 @@
           b.entry_set.remove(e) # Disassociates Entry e from Blog b.
 
       In order to prevent database inconsistency, this method only exists on
-      ``ForeignKey``s where ``null=True``. If the related field can't be set to
-      ``None`` (``NULL``), then an object can't be removed from a relation
-      without being added to another. In the above example, removing ``e`` from
-      ``b.entry_set()`` is equivalent to doing ``e.blog = None``, and because
-      the ``blog`` ``ForeignKey`` doesn't have ``null=True``, this is invalid.
+      ``ForeignKey`` objects where ``null=True``. If the related field can't be
+      set to ``None`` (``NULL``), then an object can't be removed from a
+      relation without being added to another. In the above example, removing
+      ``e`` from ``b.entry_set()`` is equivalent to doing ``e.blog = None``,
+      and because the ``blog`` ``ForeignKey`` doesn't have ``null=True``, this
+      is invalid.
 
     * ``clear()``: Removes all objects from the related object set.
 
@@ -1507,7 +1560,7 @@
 --------------------------
 
 Both ends of a many-to-many relationship get automatic API access to the other
-end. The API works just as a "backward" one-to-many relationship. See _Backward
+end. The API works just as a "backward" one-to-many relationship. See Backward_
 above.
 
 The only difference is in the attribute naming: The model that defines the
@@ -1556,13 +1609,13 @@
 ----------------------------
 
 Queries involving related objects follow the same rules as queries involving
-normal value fields. When specifying the the value for a query to match, you 
-may use either an object instance itself, or the primary key value for the 
+normal value fields. When specifying the the value for a query to match, you
+may use either an object instance itself, or the primary key value for the
 object.
 
 For example, if you have a Blog object ``b`` with ``id=5``, the following
 three queries would be identical::
-     
+
     Entry.objects.filter(blog=b) # Query using object instance
     Entry.objects.filter(blog=b.id) # Query using id from instance
     Entry.objects.filter(blog=5) # Query using id directly
@@ -1583,6 +1636,15 @@
 
     Entry.objects.filter(pub_date__year=2005).delete()
 
+When Django deletes an object, it emulates the behavior of the SQL
+constraint ``ON DELETE CASCADE`` -- in other words, any objects which
+had foreign keys pointing at the object to be deleted will be deleted
+along with it. For example::
+
+    b = Blog.objects.get(pk=1)
+    # This will delete the Blog and all of its Entry objects.
+    b.delete()
+
 Note that ``delete()`` is the only ``QuerySet`` method that is not exposed on a
 ``Manager`` itself. This is a safety mechanism to prevent you from accidentally
 requesting ``Entry.objects.delete()``, and deleting *all* the entries. If you
@@ -1681,6 +1743,46 @@
 ``get_FOO_width()`` methods, where ``FOO`` is the name of the field. This
 returns the height (or width) of the image, as an integer, in pixels.
 
+Shortcuts
+=========
+
+As you develop views, you will discover a number of common idioms in the
+way you use the database API. Django encodes some of these idioms as
+shortcuts that can be used to simplify the process of writing views.
+
+get_object_or_404()
+-------------------
+
+One common idiom to use ``get()`` and raise ``Http404`` if the
+object doesn't exist. This idiom is captured by ``get_object_or_404()``. 
+This function takes a Django model as its first argument and an 
+arbitrary number of keyword arguments, which it passes to the manager's 
+``get()`` function. It raises ``Http404`` if the object doesn't
+exist. For example:: 
+    
+    # Get the Entry with a primary key of 3
+    e = get_object_or_404(Entry, pk=3)
+
+When you provide a model to this shortcut function, the default manager 
+is used to execute the underlying ``get()`` query. If you don't want to 
+use the default manager, or you want to search a list of related objects, 
+you can provide ``get_object_or_404()`` with a manager object, instead. 
+For example::
+
+    # Get the author of blog instance `e` with a name of 'Fred'
+    a = get_object_or_404(e.authors, name='Fred')
+
+    # Use a custom manager 'recent_entries' in the search for an
+    # entry with a primary key of 3
+    e = get_object_or_404(Entry.recent_entries, pk=3)
+
+get_list_or_404()
+-----------------
+
+``get_list_or_404`` behaves the same was as ``get_object_or_404()`` 
+-- except the it uses using ``filter()`` instead of ``get()``. It raises 
+``Http404`` if the list is empty.
+
 Falling back to raw SQL
 =======================
 
@@ -1699,4 +1801,4 @@
 programming languages or database frameworks; there's nothing Django-specific
 about your database.
 
-.. _Executing custom SQL: http://www.djangoproject.com/documentation/model_api/#executing-custom-sql
+.. _Executing custom SQL: ../model_api/#executing-custom-sql

Modified: vendor/django/current/docs/design_philosophies.txt
===================================================================
--- vendor/django/current/docs/design_philosophies.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/design_philosophies.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -186,7 +186,7 @@
 
 This is the philosophy behind `template inheritance`_.
 
-.. _template inheritance: http://www.djangoproject.com/documentation/templates/#template-inheritance
+.. _template inheritance: ../templates/#template-inheritance
 
 Be decoupled from HTML
 ----------------------

Added: vendor/django/current/docs/distributions.txt
===================================================================
--- vendor/django/current/docs/distributions.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/distributions.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,76 @@
+===================================
+Third-party distributions of Django
+===================================
+
+Several third-party distributors are now providing versions of Django integrated
+with their package-management systems. These can make installation and upgrading
+much easier for users of Django since the integration includes the ability to
+automatically install dependancies (like database adapters) that Django
+requires.
+
+Typically, these packages are based on the latest stable release of Django, so
+if you want to use the development version of Django you'll need to follow the
+instructions for `installing the development version`_ from our Subversion
+repository.
+
+.. _installing the development version: ../install/#installing-the-development-version
+
+Linux distributions
+===================
+
+Debian
+------
+
+A `packaged version of Django`_ is available for `Debian GNU/Linux`_, and can be
+installed from either the "testing" or the "unstable" repositories by typing
+``apt-get install python-django``.
+
+When you install this package, ``apt`` will recommend installing a database
+adapter; you should select and install the adapter for whichever database you
+plan to use with Django.
+
+.. _Debian GNU/Linux: http://www.debian.org/
+.. _packaged version of Django: http://packages.debian.org/testing/python/python-django
+
+Ubuntu
+------
+
+The Debian ``python-django`` package is also available for `Ubuntu Linux`_, in
+the "universe" repository for Ubuntu 7.04 ("Feisty Fawn"). The `current Ubuntu
+package`_ is also based on Django 0.95.1 and can be installed in the same
+fashion as for Debian.
+
+.. _Ubuntu Linux: http://www.ubuntu.com/
+.. _current Ubuntu package: http://packages.ubuntu.com/feisty/python/python-django
+
+Fedora
+------
+
+A Django package is available for `Fedora Linux`_, in the "Fedora Extras"
+repository. The `current Fedora package`_ is based on Django 0.95.1, and can be
+installed by typing ``yum install Django``.
+
+.. _Fedora Linux: http://fedora.redhat.com/
+.. _current Fedora package: http://fedoraproject.org/extras/6/i386/repodata/repoview/Django-0-0.95.1-1.fc6.html
+
+Gentoo
+------
+
+A Django build is available for `Gentoo Linux`_, and is based on Django 0.95.1.
+The `current Gentoo build`_ can be installed by typing ``emerge django``.
+
+.. _Gentoo Linux: http://www.gentoo.org/
+.. _current Gentoo build: http://packages.gentoo.org/packages/?category=dev-python;name=django
+
+For distributors
+================
+
+If you'd like to package Django for distribution, we'd be happy to help out!
+Please join the `django-developers mailing list`_ and introduce yourself. 
+
+We also encourage all distributors to subscribe to the `django-announce mailing
+list`_, which is a (very) low-traffic list for announcing new releases of Django
+and important bugfixes.
+
+.. _django-developers mailing list: http://groups.google.com/group/django-developers/
+.. _django-announce mailing list: http://groups.google.com/group/django-announce/

Modified: vendor/django/current/docs/django-admin.txt
===================================================================
--- vendor/django/current/docs/django-admin.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/django-admin.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,8 +17,13 @@
 The ``django-admin.py`` script should be on your system path if you installed
 Django via its ``setup.py`` utility. If it's not on your path, you can find it in
 ``site-packages/django/bin`` within your Python installation. Consider
-symlinking to it from some place on your path, such as ``/usr/local/bin``.
+symlinking it from some place on your path, such as ``/usr/local/bin``.
 
+For Windows users, who do not have symlinking functionality available, you
+can copy ``django-admin.py`` to a location on your existing path or edit the
+``PATH`` settings (under ``Settings - Control Panel - System - Advanced - Environment...``)
+to point to its installed location.
+
 Generally, when working on a single Django project, it's easier to use
 ``manage.py``. Use ``django-admin.py`` with ``DJANGO_SETTINGS_MODULE``, or the
 ``--settings`` command line option, if you need to switch between multiple
@@ -53,7 +58,7 @@
 Use admin-index template snippets if you want to customize the look and feel of
 your admin's index page. See `Tutorial 2`_ for more information.
 
-.. _Tutorial 2: http://www.djangoproject.com/documentation/tutorial2/
+.. _Tutorial 2: ../tutorial2/
 
 createcachetable [tablename]
 ----------------------------
@@ -61,7 +66,7 @@
 Creates a cache table named ``tablename`` for use with the database cache
 backend.  See the `cache documentation`_ for more information.
 
-.. _cache documentation: http://www.djangoproject.com/documentation/cache/
+.. _cache documentation: ../cache/
 
 dbshell
 -------
@@ -92,6 +97,29 @@
 Note that Django's default settings live in ``django/conf/global_settings.py``,
 if you're ever curious to see the full list of defaults.
 
+dumpdata [appname appname ...]
+------------------------------
+
+Output to standard output all data in the database associated with the named 
+application(s).
+
+By default, the database will be dumped in JSON format. If you want the output
+to be in another format, use the ``--format`` option (e.g., ``format=xml``). 
+You may specify any Django serialization backend (including any user specified 
+serialization backends named in the ``SERIALIZATION_MODULES`` setting).
+
+If no application name is provided, all installed applications will be dumped.
+
+The output of ``dumpdata`` can be used as input for ``loaddata``. 
+
+flush
+-----
+
+Return the database to the state it was in immediately after syncdb was 
+executed. This means that all data will be removed from the database, any 
+post-synchronization handlers will be re-executed, and the ``initial_data``
+fixture will be re-installed.
+
 inspectdb
 ---------
 
@@ -133,11 +161,86 @@
 ``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection
 only works in PostgreSQL and with certain types of MySQL tables.
 
-install [appname appname ...]
------------------------------
+loaddata [fixture fixture ...]
+------------------------------
 
-Executes the equivalent of ``sqlall`` for the given appnames.
+Searches for and loads the contents of the named fixture into the database.
 
+A *Fixture* is a collection of files that contain the serialized contents of
+the database. Each fixture has a unique name; however, the files that
+comprise the fixture can be distributed over multiple directories, in
+multiple applications.
+
+Django will search in three locations for fixtures:
+
+   1. In the ``fixtures`` directory of every installed application
+   2. In any directory named in the ``FIXTURE_DIRS`` setting
+   3. In the literal path named by the fixture
+
+Django will load any and all fixtures it finds in these locations that match
+the provided fixture names. 
+
+If the named fixture has a file extension, only fixtures of that type 
+will be loaded. For example::
+
+    django-admin.py loaddata mydata.json
+    
+would only load JSON fixtures called ``mydata``. The fixture extension 
+must correspond to the registered name of a serializer (e.g., ``json`` or 
+``xml``).
+
+If you omit the extension, Django will search all available fixture types 
+for a matching fixture. For example::
+
+    django-admin.py loaddata mydata
+    
+would look for any fixture of any fixture type called ``mydata``. If a fixture
+directory contained ``mydata.json``, that fixture would be loaded
+as a JSON fixture. However, if two fixtures with the same name but different 
+fixture type are discovered (for example, if ``mydata.json`` and 
+``mydata.xml`` were found in the same fixture directory), fixture 
+installation will be aborted, and any data installed in the call to 
+``loaddata`` will be removed from the database.
+
+The fixtures that are named can include directory components. These 
+directories will be included in the search path. For example::
+
+    django-admin.py loaddata foo/bar/mydata.json
+ 
+would search ``<appname>/fixtures/foo/bar/mydata.json`` for each installed 
+application,  ``<dirname>/foo/bar/mydata.json`` for each directory in 
+``FIXTURE_DIRS``, and the literal path ``foo/bar/mydata.json``.
+
+Note that the order in which fixture files are processed is undefined. However,
+all fixture data is installed as a single transaction, so data in
+one fixture can reference data in another fixture. If the database backend
+supports row-level constraints, these constraints will be checked at the
+end of the transaction.
+
+.. admonition:: MySQL and Fixtures
+
+    Unfortunately, MySQL isn't capable of completely supporting all the 
+    features of Django fixtures. If you use MyISAM tables, MySQL doesn't
+    support transactions or constraints, so you won't get a rollback if 
+    multiple transaction files are found, or validation of fixture data. 
+    If you use InnoDB tables, you won't be able to have any forward 
+    references in your data files - MySQL doesn't provide a mechanism to 
+    defer checking of row constraints until a transaction is committed.    
+    
+reset [appname appname ...]
+---------------------------
+Executes the equivalent of ``sqlreset`` for the given appnames.
+
+runfcgi [options]
+-----------------
+Starts a set of FastCGI processes suitable for use with any web server
+which supports the FastCGI protocol. See the `FastCGI deployment
+documentation`_ for details. Requires the Python FastCGI module from
+`flup`_.
+
+.. _FastCGI deployment documentation: ../fastcgi/
+.. _flup: http://www.saddi.com/software/flup/
+
 runserver [optional port number, or ipaddr:port]
 ------------------------------------------------
 
@@ -190,7 +293,7 @@
 you want to configure Django to serve static media, read the `serving static files`_
 documentation.
 
-.. _serving static files: http://www.djangoproject.com/documentation/static_files/
+.. _serving static files: ../static_files/
 
 Turning off auto-reload
 ~~~~~~~~~~~~~~~~~~~~~~~
@@ -231,16 +334,11 @@
 
 Prints the DROP TABLE SQL statements for the given appnames.
 
-sqlindexes [appname appname ...]
-----------------------------------------
+sqlcustom [appname appname ...]
+-------------------------------
 
-Prints the CREATE INDEX SQL statements for the given appnames.
+Prints the custom SQL statements for the given appnames.
 
-sqlinitialdata [appname appname ...]
---------------------------------------------
-
-Prints the initial INSERT SQL statements for the given appnames.
-
 For each model in each specified app, this command looks for the file
 ``<appname>/sql/<modelname>.sql``, where ``<appname>`` is the given appname and
 ``<modelname>`` is the model's name in lowercase. For example, if you have an
@@ -250,9 +348,16 @@
 
 Each of the SQL files, if given, is expected to contain valid SQL. The SQL
 files are piped directly into the database after all of the models'
-table-creation statements have been executed. Use this SQL hook to populate
-tables with any necessary initial records, SQL functions or test data.
+table-creation statements have been executed. Use this SQL hook to make any
+table modifications, or insert any SQL functions into the database.
 
+Note that the order in which the SQL files are processed is undefined.
+
+sqlindexes [appname appname ...]
+----------------------------------------
+
+Prints the CREATE INDEX SQL statements for the given appnames.
+
 sqlreset [appname appname ...]
 --------------------------------------
 
@@ -292,6 +397,17 @@
 If you're installing the ``django.contrib.auth`` application, ``syncdb`` will
 give you the option of creating a superuser immediately.
 
+``syncdb`` will also search for and install any fixture named ``initial_data``. 
+See the documentation for ``loaddata`` for details on the specification of 
+fixture data files.
+
+test
+----
+
+Discover and run tests for all installed models.  See `Testing Django applications`_ for more information.
+
+.. _testing django applications: ../testing/
+
 validate
 --------
 
@@ -332,12 +448,45 @@
 
 .. _import search path: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html
 
+--format
+--------
+
+Example usage::
+
+    django-admin.py dumpdata --format=xml
+
+Specifies the output format that will be used. The name provided must be the name
+of a registered serializer.
+
 --help
 ------
 
 Displays a help message that includes a terse list of all available actions and
 options.
 
+--indent
+--------
+
+Example usage::
+
+    django-admin.py dumpdata --indent=4
+
+Specifies the number of spaces that will be used for indentation when 
+pretty-printing output. By default, output will *not* be pretty-printed.
+Pretty-printing will only be enabled if the indent option is provided.
+
+--noinput
+---------
+
+Inform django-admin that the user should NOT be prompted for any input. Useful
+if the django-admin script will be executed as an unattended, automated
+script.
+
+--noreload
+----------
+
+Disable the use of the auto-reloader when running the development server.
+
 --version
 ---------
 
@@ -348,6 +497,28 @@
     0.9.1
     0.9.1 (SVN)
 
+--verbosity
+-----------
+
+Example usage::
+
+    django-admin.py syncdb --verbosity=2
+
+Verbosity determines the amount of notification and debug information that
+will be printed to the console. '0' is no output, '1' is normal output,
+and `2` is verbose output.
+
+--adminmedia
+------------
+
+Example usage::
+    django-admin.py manage.py --adminmedia=/tmp/new-admin-style/
+
+Tells Django where to find the various CSS and JavaScript files for the admin
+interface when running the development server. Normally these files are served
+out of the Django source tree, but because some designers customize these files
+for their site, this option allows you to test against custom versions.
+
 Extra niceties
 ==============
 

Added: vendor/django/current/docs/documentation.txt
===================================================================
--- vendor/django/current/docs/documentation.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/documentation.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,148 @@
+====================================
+How to read the Django documentation
+====================================
+
+We've put a lot of effort into making Django's documentation useful, easy to
+read and as complete as possible. Here are a few tips on how to make the best
+of it, along with some style guidelines.
+
+(Yes, this is documentation about documentation. Rest assured we have no plans
+to write a document about how to read the document about documentation.)
+
+How documentation is updated
+============================
+
+Just as the Django code base is developed and improved on a daily basis, our
+documentation is consistently improving. We improve documentation for several
+reasons:
+
+    * To make content fixes, such as grammar/typo corrections.
+    * To add information and/or examples to existing sections that need to be
+      expanded.
+    * To document Django features that aren't yet documented. (The list of
+      such features is shrinking but exists nonetheless.)
+    * To add documentation for new features as new features get added, or as
+      Django APIs or behaviors change.
+
+Django's documentation is kept in the same source control system as its code.
+It lives in the `django/trunk/docs`_ directory of our Subversion repository.
+Each document is a separate text file that covers a narrowly focused topic,
+such as the "generic views" framework or how to construct a database model.
+
+.. _django/trunk/docs: http://code.djangoproject.com/browser/django/trunk/docs
+
+Where to get it
+===============
+
+You can read Django documentation in several ways. They are, in order of
+preference:
+
+On the Web
+----------
+
+The most recent version of the Django documentation lives at
+http://www.djangoproject.com/documentation/ . These HTML pages are generated
+automatically from the text files in source control every 15 minutes. That
+means they reflect the "latest and greatest" in Django -- they include the very
+latest corrections and additions, and they discuss the latest Django features,
+which may only be available to users of the Django development version. (See
+"Differences between versions" below.)
+
+A key advantage of the Web-based documentation is the comment section at the
+bottom of each document. This is an area for anybody to submit changes,
+corrections and suggestions about the given document. The Django developers
+frequently monitor the comments there and use them to improve the documentation
+for everybody.
+
+We encourage you to help improve the docs: it's easy! Note, however, that
+comments should explicitly relate to the documentation, rather than asking
+broad tech-support questions. If you need help with your particular Django
+setup, try the `django-users mailing list`_ instead of posting a comment to the
+documentation.
+
+.. _django-users mailing list: http://groups.google.com/group/django-users
+
+In plain text
+-------------
+
+For offline reading, or just for convenience, you can read the Django
+documentation in plain text.
+
+If you're using an official release of Django, note that the zipped package
+(tarball) of the code includes a ``docs/`` directory, which contains all the
+documentation for that release.
+
+If you're using the development version of Django (aka the Subversion "trunk"),
+note that the ``docs/`` directory contains all of the documentation. You can
+``svn update`` it, just as you ``svn update`` the Python code, in order to get
+the latest changes.
+
+You can check out the latest Django documentation from Subversion using this
+shell command::
+
+    svn co http://code.djangoproject.com/svn/django/trunk/docs/ django_docs
+
+One low-tech way of taking advantage of the text documentation is by using the
+Unix ``grep`` utility to search for a phrase in all of the documentation. For
+example, this will show you each mention of the phrase "edit_inline" in any
+Django document::
+
+    grep edit_inline /path/to/django/docs/*.txt
+
+Formatting
+~~~~~~~~~~
+
+The text documentation is written in ReST (ReStructured Text) format. That
+means it's easy to read but is also formatted in a way that makes it easy to
+convert into other formats, such as HTML. If you're interested, the script that
+converts the ReST text docs into djangoproject.com's HTML lives at
+`djangoproject.com/django_website/apps/docs/parts/build_documentation.py`_ in
+the Django Subversion repository.
+
+.. _djangoproject.com/django_website/apps/docs/parts/build_documentation.py: http://code.djangoproject.com/browser/djangoproject.com/django_website/apps/docs/parts/build_documentation.py
+
+Differences between versions
+============================
+
+As previously mentioned, the text documentation in our Subversion repository
+contains the "latest and greatest" changes and additions. These changes often
+include documentation of new features added in the Django development version
+-- the Subversion ("trunk") version of Django. For that reason, it's worth
+pointing out our policy on keeping straight the documentation for various
+versions of the framework.
+
+We follow this policy:
+
+    * The primary documentation on djangoproject.com is an HTML version of the
+      latest docs in Subversion. These docs always correspond to the latest
+      official Django release, plus whatever features we've added/changed in
+      the framework *since* the latest release.
+
+    * As we add features to Django's development version, we try to update the
+      documentation in the same Subversion commit transaction.
+
+    * To distinguish feature changes/additions in the docs, we use the phrase
+      **New in Django development version**. In practice, this means that the
+      current documentation on djangoproject.com can be used by users of either
+      the latest release *or* the development version.
+
+    * Documentation for a particular Django release is frozen once the version
+      has been released officially. It remains a snapshot of the docs as of the
+      moment of the release. We will make exceptions to this rule in
+      the case of retroactive security updates or other such retroactive
+      changes. Once documentation is frozen, we add a note to the top of each
+      frozen document that says "These docs are frozen for Django version XXX"
+      and links to the current version of that document.
+
+    * Once a document is frozen for a Django release, we remove comments from
+      that page, in favor of having comments on the latest version of that
+      document. This is for the sake of maintainability and usability, so that
+      users have one, and only one, place to leave comments on a particular
+      document. We realize that some people may be stuck on a previous version
+      of Django, but we believe the usability problems with multiple versions
+      of a document the outweigh the benefits.
+
+    * The `main documentation Web page`_ includes links to documentation for
+      all previous versions.
+
+.. _main documentation Web page: http://www.djangoproject.com/documentation/

Modified: vendor/django/current/docs/email.txt
===================================================================
--- vendor/django/current/docs/email.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/email.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -34,8 +34,8 @@
 ``django.core.mail.send_mail()``. Here's its definition::
 
     send_mail(subject, message, from_email, recipient_list,
-        fail_silently=False, auth_user=EMAIL_HOST_USER,
-        auth_password=EMAIL_HOST_PASSWORD)
+        fail_silently=False, auth_user=None,
+        auth_password=None)
 
 The ``subject``, ``message``, ``from_email`` and ``recipient_list`` parameters
 are required.
@@ -65,7 +65,7 @@
 Here's the definition::
 
     send_mass_mail(datatuple, fail_silently=False,
-        auth_user=EMAIL_HOST_USER, auth_password=EMAIL_HOST_PASSWORD):
+        auth_user=None, auth_password=None):
 
 ``datatuple`` is a tuple in which each element is in this format::
 
@@ -101,9 +101,9 @@
 
 This method exists for convenience and readability.
 
-.. _ADMINS setting: http://www.djangoproject.com/documentation/settings/#admins
-.. _EMAIL_SUBJECT_PREFIX setting: http://www.djangoproject.com/documentation/settings/#email-subject-prefix
-.. _SERVER_EMAIL setting: http://www.djangoproject.com/documentation/settings/#server-email
+.. _ADMINS setting: ../settings/#admins
+.. _EMAIL_SUBJECT_PREFIX setting: ../settings/#email-subject-prefix
+.. _SERVER_EMAIL setting: ../settings/#server-email
 
 mail_managers() function
 ========================
@@ -114,7 +114,7 @@
 
     mail_managers(subject, message, fail_silently=False)
 
-.. _MANAGERS setting: http://www.djangoproject.com/documentation/settings/#managers
+.. _MANAGERS setting: ../settings/#managers
 
 Examples
 ========

Modified: vendor/django/current/docs/faq.txt
===================================================================
--- vendor/django/current/docs/faq.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/faq.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -16,12 +16,17 @@
 At the same time, the World Online Web developers have consistently been
 perfectionists when it comes to following best practices of Web development.
 
-Thus, Django was designed not only to allow fast Web development, but
-*best-practice* Web development.
+In fall 2003, the World Online developers (Adrian Holovaty and Simon Willison)
+ditched PHP and began using Python to develop its Web sites. As they built
+intensive, richly interactive sites such as Lawrence.com, they began to extract
+a generic Web development framework that let them build Web applications more
+and more quickly. They tweaked this framework constantly, adding improvements
+over two years.
 
-Django would not be possible without a whole host of open-source projects --
-`Apache`_, `Python`_, and `PostgreSQL`_ to name a few -- and we're thrilled to
-be able to give something back to the open-source community.
+In summer 2005, World Online decided to open-source the resulting software,
+Django. Django would not be possible without a whole host of open-source
+projects -- `Apache`_, `Python`_, and `PostgreSQL`_ to name a few -- and we're
+thrilled to be able to give something back to the open-source community.
 
 .. _Apache: http://httpd.apache.org/
 .. _Python: http://www.python.org/
@@ -42,8 +47,8 @@
 Is Django stable?
 -----------------
 
-Yes. World Online has been using Django for more than two years. Sites built on
-Django have weathered traffic spikes of over one million hits an hour and a
+Yes. World Online has been using Django for more than three years. Sites built
+on Django have weathered traffic spikes of over one million hits an hour and a
 number of Slashdottings. Yes, it's quite stable.
 
 Does Django scale?
@@ -58,7 +63,7 @@
 The framework cleanly separates components such as its database layer and
 application layer. And it ships with a simple-yet-powerful `cache framework`_.
 
-.. _`cache framework`: http://www.djangoproject.com/documentation/cache/
+.. _`cache framework`: ../cache/
 
 Who's behind this?
 ------------------
@@ -98,10 +103,9 @@
     On IRC, Simon goes by ``SimonW``.
 
 `Wilson Miner`_
-    Wilson's design-fu makes us all look like rock stars. When not sneaking
-    into apartment complex swimming pools, he's the Commercial Development
-    Director for World Online, which means he makes the money that pays all our
-    paychecks. He lives in Lawrence, Kansas.
+    Wilson's design-fu makes us all look like rock stars. By day, he's an
+    interactive designer for `Apple`. Don't ask him what he's working on, or
+    he'll have to kill you. He lives in San Francisco.
 
     On IRC, Wilson goes by ``wilsonian``.
 
@@ -113,6 +117,7 @@
 .. _`simon.incutio.com`: http://simon.incutio.com/
 .. _`Jacob Kaplan-Moss`: http://www.jacobian.org/
 .. _`Wilson Miner`: http://www.wilsonminer.com/
+.. _`Apple`: http://www.apple.com/
 
 Which sites use Django?
 -----------------------
@@ -186,7 +191,7 @@
 
 We've documented our philosophies on the `design philosophies page`_.
 
-.. _design philosophies page: http://www.djangoproject.com/documentation/design_philosophies/
+.. _design philosophies page: ../design_philosophies/
 
 Do you have any of those nifty "screencast" things?
 ---------------------------------------------------
@@ -222,9 +227,7 @@
 
 Short answer: When we're comfortable with Django's APIs, have added all
 features that we feel are necessary to earn a "1.0" status, and are ready to
-begin maintaining backwards compatibility. This should happen in a couple of
-months or so, although it's entirely possible that it could happen earlier.
-That translates into summer 2006.
+begin maintaining backwards compatibility. 
 
 The merging of Django's `magic-removal branch`_ went a long way toward Django
 1.0.
@@ -274,9 +277,9 @@
        run into trouble.
 
 .. _`Download the code`: http://www.djangoproject.com/download/
-.. _`installation guide`: http://www.djangoproject.com/documentation/install/
-.. _tutorial:  http://www.djangoproject.com/documentation/tutorial1/
-.. _documentation: http://www.djangoproject.com/documentation/
+.. _`installation guide`: ../install/
+.. _tutorial:  ../tutorial1/
+.. _documentation: ../
 .. _ask questions: http://www.djangoproject.com/community/
 
 How do I fix the "install a later version of setuptools" error?
@@ -308,6 +311,18 @@
 .. _MySQL: http://www.mysql.com/
 .. _`SQLite 3`: http://www.sqlite.org/
 
+Do I lose anything by using Python 2.3 versus newer Python versions, such as Python 2.5?
+----------------------------------------------------------------------------------------
+
+No. Django itself is guaranteed to work with any version of Python from 2.3
+and higher.
+
+If you use a Python version newer than 2.3, you will, of course, be able to
+take advantage of newer Python features in your own code, along with the speed
+improvements and other optimizations that have been made to the Python language
+itself. But the Django framework itself should work equally well on 2.3 as it
+does on 2.4 or 2.5.
+
 Do I have to use mod_python?
 ----------------------------
 
@@ -322,7 +337,7 @@
 the development Web server that comes with Django. Things should Just Work.
 
 .. _WSGI: http://www.python.org/peps/pep-0333.html
-.. _How to use Django with FastCGI: http://www.djangoproject.com/documentation/fastcgi/
+.. _How to use Django with FastCGI: ../fastcgi/
 .. _server arrangements wiki page: http://code.djangoproject.com/wiki/ServerArrangements
 
 How do I install mod_python on Windows?
@@ -449,7 +464,7 @@
 
 Yes. See `Integrating with a legacy database`_.
 
-.. _`Integrating with a legacy database`: http://www.djangoproject.com/documentation/legacy_databases/
+.. _`Integrating with a legacy database`: ../legacy_databases/
 
 If I make changes to a model, how do I update the database?
 -----------------------------------------------------------
@@ -482,7 +497,7 @@
 How do I add database-specific options to my CREATE TABLE statements, such as specifying MyISAM as the table type?
 ------------------------------------------------------------------------------------------------------------------
 
-We try to avoid adding special cases in the Django code to accomodate all the
+We try to avoid adding special cases in the Django code to accommodate all the
 database-specific options such as table type, etc. If you'd like to use any of
 these options, create an `SQL initial data file`_ that contains ``ALTER TABLE``
 statements that do what you want to do. The initial data files are executed in
@@ -496,7 +511,7 @@
 As explained in the `SQL initial data file`_ documentation, this SQL file can
 contain arbitrary SQL, so you can make any sorts of changes you need to make.
 
-.. _SQL initial data file: http://www.djangoproject.com/documentation/model_api/#providing-initial-sql-data
+.. _SQL initial data file: ../model_api/#providing-initial-sql-data
 
 Why is Django leaking memory?
 -----------------------------
@@ -577,7 +592,7 @@
 See `serving the admin files`_ in the "How to use Django with mod_python"
 documentation.
 
-.. _serving the admin files: http://www.djangoproject.com/documentation/modpython/#serving-the-admin-files
+.. _serving the admin files: ../modpython/#serving-the-admin-files
 
 My "list_filter" contains a ManyToManyField, but the filter doesn't display.
 ----------------------------------------------------------------------------
@@ -615,24 +630,29 @@
 like to make should be possible by editing the stylesheet. We've got a
 `guide to the CSS used in the admin`_ to get you started.
 
-.. _`guide to the CSS used in the admin`: http://www.djangoproject.com/documentation/admin_css/
+.. _`guide to the CSS used in the admin`: ../admin_css/
 
 How do I create users without having to edit password hashes?
 -------------------------------------------------------------
 
-We don't recommend you create users via the admin interface, because at the
-moment it requires you to edit password hashes manually. (Passwords are hashed
-using one-way hash algorithms for security; there's currently no Web interface
-for changing passwords by entering the actual password rather than the hash.)
+If you'd like to use the admin site to create users, upgrade to the Django
+development version, where this problem was fixed on Aug. 4, 2006.
 
-To create a user, you'll have to use the Python API. See `creating users`_ for
-full info.
+You can also use the Python API. See `creating users`_ for full info.
 
-.. _creating users: http://www.djangoproject.com/documentation/authentication/#creating-users
+.. _creating users: ../authentication/#creating-users
 
 Contributing code
 =================
 
+How can I get started contributing code to Django?
+--------------------------------------------------
+
+Thanks for asking! We've written an entire document devoted to this question.
+It's titled `Contributing to Django`_.
+
+.. _Contributing to Django: ../contributing/
+
 I submitted a bug fix in the ticket system several weeks ago. Why are you ignoring my patch?
 --------------------------------------------------------------------------------------------
 

Modified: vendor/django/current/docs/fastcgi.txt
===================================================================
--- vendor/django/current/docs/fastcgi.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/fastcgi.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,7 +17,7 @@
 process doesn't run inside the Web server process, but in a separate,
 persistent process.
 
-.. _current preferred setup: http://www.djangoproject.com/documentation/modpython/
+.. _current preferred setup: ../modpython/
 .. _Apache: http://httpd.apache.org/
 .. _mod_python: http://www.modpython.org/
 .. _mod_perl: http://perl.apache.org/
@@ -270,11 +270,11 @@
     AddHandler fastcgi-script .fcgi
     RewriteEngine On
     RewriteCond %{REQUEST_FILENAME} !-f
-    RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
+    RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]
 
 Then, create a small script that tells Apache how to spawn your FastCGI
 program. Create a file ``mysite.fcgi`` and place it in your Web directory, and
-be sure to make it executable ::
+be sure to make it executable::
 
     #!/usr/bin/python
     import sys, os
@@ -289,7 +289,7 @@
     os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"
 
     from django.core.servers.fastcgi import runfastcgi
-    runfastcgi(["method=threaded", "daemonize=false"])
+    runfastcgi(method="threaded", daemonize="false")
 
 Restarting the spawned server
 -----------------------------
@@ -304,3 +304,14 @@
 easily by using the ``touch`` command::
 
     touch mysite.fcgi
+
+Serving admin media files
+=========================
+
+Regardless of the server and configuration you eventually decide to use, you will
+also need to give some thought to how to serve the admin media files. The
+advice given in the modpython_ documentation is also applicable in the setups
+detailed above.
+
+.. _modpython: ../modpython/#serving-the-admin-files
+

Modified: vendor/django/current/docs/flatpages.txt
===================================================================
--- vendor/django/current/docs/flatpages.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/flatpages.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -29,8 +29,8 @@
        to your MIDDLEWARE_CLASSES_ setting.
     3. Run the command ``manage.py syncdb``.
 
-.. _INSTALLED_APPS: http://www.djangoproject.com/documentation/settings/#installed-apps
-.. _MIDDLEWARE_CLASSES: http://www.djangoproject.com/documentation/settings/#middleware-classes
+.. _INSTALLED_APPS: ../settings/#installed-apps
+.. _MIDDLEWARE_CLASSES: ../settings/#middleware-classes
 
 How it works
 ============
@@ -63,9 +63,9 @@
 
 For more on middleware, read the `middleware docs`_.
 
-.. _SITE_ID: http://www.djangoproject.com/documentation/settings/#site-id
-.. _RequestContext: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-djangocontext
-.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
+.. _SITE_ID: ../settings/#site-id
+.. _RequestContext: ../templates_python/#subclassing-context-djangocontext
+.. _middleware docs: ../middleware/
 
 How to add, change and delete flatpages
 =======================================
@@ -84,9 +84,9 @@
 `django/contrib/flatpages/models.py`_. You can access flatpage objects via the
 `Django database API`_.
 
-.. _Django model: http://www.djangoproject.com/documentation/model_api/
+.. _Django model: ../model_api/
 .. _django/contrib/flatpages/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/models.py
-.. _Django database API: http://www.djangoproject.com/documentation/db_api/
+.. _Django database API: ../db_api/
 
 Flatpage templates
 ==================

Modified: vendor/django/current/docs/forms.txt
===================================================================
--- vendor/django/current/docs/forms.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/forms.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -2,15 +2,27 @@
 Forms, fields, and manipulators
 ===============================
 
+Forwards-compatibility note
+===========================
+
+The legacy forms/manipulators system described in this document is going to be
+replaced in the next Django release. If you're starting from scratch, we
+strongly encourage you not to waste your time learning this. Instead, learn and
+use the django.newforms system, which we have begun to document in the
+`newforms documentation`_.
+
+If you have legacy form/manipulator code, read the "Migration plan" section in
+that document to understand how we're making the switch.
+
+.. _newforms documentation: ../newforms/
+
+Introduction
+============
+
 Once you've got a chance to play with Django's admin interface, you'll probably
 wonder if the fantastic form validation framework it uses is available to user
 code. It is, and this document explains how the framework works.
 
-    .. admonition:: A note to the lazy
-
-        If all you want to do is present forms for a user to create and/or
-        update a given object, you may be able to use `generic views`_.
-
 We'll take a top-down approach to examining Django's form validation framework,
 because much of the time you won't need to use the lower-level APIs. Throughout
 this document, we'll be working with the following model, a "place" object::
@@ -41,17 +53,17 @@
 Defining the above class is enough to create an admin interface to a ``Place``,
 but what if you want to allow public users to submit places?
 
-Manipulators
-============
+Automatic Manipulators
+======================
 
 The highest-level interface for object creation and modification is the
-**Manipulator** framework. A manipulator is a utility class tied to a given
-model that "knows" how to create or modify instances of that model and how to
-validate data for the object. Manipulators come in two flavors:
-``AddManipulators`` and ``ChangeManipulators``. Functionally they are quite
-similar, but the former knows how to create new instances of the model, while
-the latter modifies existing instances. Both types of classes are automatically
-created when you define a new class::
+**automatic Manipulator** framework. An automatic manipulator is a utility
+class tied to a given model that "knows" how to create or modify instances of
+that model and how to validate data for the object. Automatic Manipulators come
+in two flavors: ``AddManipulators`` and ``ChangeManipulators``. Functionally
+they are quite similar, but the former knows how to create new instances of the
+model, while the latter modifies existing instances. Both types of classes are
+automatically created when you define a new class::
 
     >>> from mysite.myapp.models import Place
     >>> Place.AddManipulator
@@ -136,7 +148,7 @@
     {% endblock %}
 
 Before we get back to the problems with these naive set of views, let's go over
-some salient points of the above template::
+some salient points of the above template:
 
     * Field "widgets" are handled for you: ``{{ form.field }}`` automatically
       creates the "right" type of widget for the form, as you can see with the
@@ -148,8 +160,8 @@
       If you must use tables, use tables. If you're a semantic purist, you can
       probably find better HTML than in the above template.
 
-    * To avoid name conflicts, the ``id``s of form elements take the form
-      "id_*fieldname*".
+    * To avoid name conflicts, the ``id`` values of form elements take the
+      form "id_*fieldname*".
 
 By creating a creation form we've solved problem number 3 above, but we still
 don't have any validation. Let's revise the validation issue by writing a new
@@ -161,10 +173,10 @@
 
         # Check for validation errors
         errors = manipulator.get_validation_errors(new_data)
+        manipulator.do_html2python(new_data)
         if errors:
             return render_to_response('places/errors.html', {'errors': errors})
         else:
-            manipulator.do_html2python(new_data)
             new_place = manipulator.save(new_data)
             return HttpResponse("Place created: %s" % new_place)
 
@@ -211,16 +223,16 @@
     def create_place(request):
         manipulator = Place.AddManipulator()
 
-        if request.POST:
+        if request.method == 'POST':
             # If data was POSTed, we're trying to create a new Place.
             new_data = request.POST.copy()
 
             # Check for errors.
             errors = manipulator.get_validation_errors(new_data)
+            manipulator.do_html2python(new_data)
 
             if not errors:
                 # No errors. This means we can save the data!
-                manipulator.do_html2python(new_data)
                 new_place = manipulator.save(new_data)
 
                 # Redirect to the object's "edit" page. Always use a redirect
@@ -309,11 +321,11 @@
         # Grab the Place object in question for future use.
         place = manipulator.original_object
 
-        if request.POST:
+        if request.method == 'POST':
             new_data = request.POST.copy()
             errors = manipulator.get_validation_errors(new_data)
+            manipulator.do_html2python(new_data)
             if not errors:
-                manipulator.do_html2python(new_data)
                 manipulator.save(new_data)
 
                 # Do a post-after-redirect so that reload works, etc.
@@ -321,7 +333,7 @@
         else:
             errors = {}
             # This makes sure the form accurate represents the fields of the place.
-            new_data = place.__dict__
+            new_data = manipulator.flatten_data()
 
         form = forms.FormWrapper(manipulator, new_data, errors)
         return render_to_response('places/edit_form.html', {'form': form, 'place': place})
@@ -336,10 +348,10 @@
     * ``ChangeManipulator.original_object`` stores the instance of the
       object being edited.
 
-    * We set ``new_data`` to the original object's ``__dict__``. This makes
-      sure the form fields contain the current values of the object.
-      ``FormWrapper`` does not modify ``new_data`` in any way, and templates
-      cannot, so this is perfectly safe.
+    * We set ``new_data`` based upon ``flatten_data()`` from the manipulator.
+      ``flatten_data()`` takes the data from the original object under
+      manipulation, and converts it into a data dictionary that can be used
+      to populate form elements with the existing values for the object.
 
     * The above example uses a different template, so create and edit can be
       "skinned" differently if needed, but the form chunk itself is completely
@@ -391,11 +403,11 @@
 
     def contact_form(request):
         manipulator = ContactManipulator()
-        if request.POST:
+        if request.method == 'POST':
             new_data = request.POST.copy()
             errors = manipulator.get_validation_errors(new_data)
+            manipulator.do_html2python(new_data)
             if not errors:
-                manipulator.do_html2python(new_data)
 
                 # Send e-mail using new_data here...
 
@@ -404,7 +416,28 @@
             errors = new_data = {}
         form = forms.FormWrapper(manipulator, new_data, errors)
         return render_to_response('contact_form.html', {'form': form})
-        
+
+Implementing ``flatten_data`` for custom manipulators
+------------------------------------------------------
+
+It is possible (although rarely needed) to replace the default automatically
+created manipulators on a model with your own custom manipulators. If you do
+this and you are intending to use those models in generic views, you should
+also define a ``flatten_data`` method in any ``ChangeManipulator`` replacement.
+This should act like the default ``flatten_data`` and return a dictionary
+mapping field names to their values, like so::
+
+    def flatten_data(self):
+        obj = self.original_object
+        return dict(
+            from = obj.from,
+            subject = obj.subject,
+            ...
+        )
+
+In this way, your new change manipulator will act exactly like the default
+version.
+
 ``FileField`` and ``ImageField`` special cases
 ==============================================
 
@@ -481,7 +514,33 @@
 Also, because consistency in user interfaces is important, we strongly urge you
 to put punctuation at the end of your validation messages.
 
-Ready-made Validators
+When are validators called?
+---------------------------
+
+After a form has been submitted, Django first checks to see that all the
+required fields are present and non-empty. For each field that passes that
+test *and if the form submission contained data* for that field, all the
+validators for that field are called in turn. The emphasized portion in the
+last sentence is important: if a form field is not submitted (because it
+contains no data -- which is normal HTML behavior), the validators are not
+run against the field.
+
+This feature is particularly important for models using
+``models.BooleanField`` or custom manipulators using things like
+``forms.CheckBoxField``. If the checkbox is not selected, it will not
+contribute to the form submission.
+
+If you would like your validator to run *always*, regardless of whether its
+attached field contains any data, set the ``always_test`` attribute on the
+validator function. For example::
+
+    def my_custom_validator(field_data, all_data):
+        # ...
+    my_custom_validator.always_test = True
+
+This validator will always be executed for any field it is attached to.
+
+Ready-made validators
 ---------------------
 
 Writing your own validator is not difficult, but there are some situations
@@ -553,7 +612,7 @@
 ``ValidateIfOtherFieldEquals``
     Takes three parameters: ``other_field``, ``other_value`` and
     ``validator_list``, in that order. If ``other_field`` has a value of
-    ``other_vaue``, then the validators in ``validator_list`` are all run
+    ``other_value``, then the validators in ``validator_list`` are all run
     against the current field.
 
 ``RequiredIfOtherFieldNotGiven``
@@ -570,6 +629,10 @@
     order). If the given field does (or does not have, in the latter case) the
     given value, then the current field being validated is required.
 
+    An optional ``other_label`` argument can be passed which, if given, is used
+    in error messages instead of the value. This allows more user friendly error
+    messages if the value itself is not descriptive enough.
+
     Note that because validators are called before any ``do_html2python()``
     functions, the value being compared against is a string. So
     ``RequiredIfOtherFieldEquals('choice', '1')`` is correct, whilst
@@ -584,6 +647,15 @@
     string "123" is less than the string "2", for example. If you don't want
     string comparison here, you will need to write your own validator.
 
+``NumberIsInRange``
+    Takes two boundary numbers, ``lower`` and ``upper``, and checks that the
+    field is greater than ``lower`` (if given) and less than ``upper`` (if
+    given).  
+    
+    Both checks are inclusive. That is, ``NumberIsInRange(10, 20)`` will allow
+    values of both 10 and 20. This validator only checks numeric values
+    (e.g., float and integer values).
+
 ``IsAPowerOf``
     Takes an integer argument and when called as a validator, checks that the
     field being validated is a power of the integer.
@@ -618,6 +690,6 @@
     the executable specified in the ``JING_PATH`` setting (see the settings_
     document for more details).
 
-.. _`generic views`: http://www.djangoproject.com/documentation/generic_views/
-.. _`models API`: http://www.djangoproject.com/documentation/model_api/
-.. _settings: http://www.djangoproject.com/documentation/settings/
+.. _`generic views`: ../generic_views/
+.. _`models API`: ../model_api/
+.. _settings: ../settings/

Modified: vendor/django/current/docs/generic_views.txt
===================================================================
--- vendor/django/current/docs/generic_views.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/generic_views.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -71,7 +71,7 @@
 ``extra_context`` that is always fresh you need to wrap it in a function or
 lambda that returns the QuerySet.
 
-.. _database API docs: http://www.djangoproject.com/documentation/db_api/
+.. _database API docs: ../db_api/
 
 "Simple" generic views
 ======================
@@ -92,6 +92,13 @@
 
     * ``template``: The full name of a template to use.
 
+**Optional arguments:**
+
+    * ``extra_context``: A dictionary of values to add to the template
+      context. By default, this is an empty dictionary. If a value in the
+      dictionary is callable, the generic view will call it
+      just before rendering the template.
+
 **Example:**
 
 Given the following URL patterns::
@@ -127,7 +134,7 @@
 This example redirects from ``/foo/<id>/`` to ``/bar/<id>/``::
 
     urlpatterns = patterns('django.views.generic.simple',
-        ('^foo/(?p<id>\d+)/$', 'redirect_to', {'url': '/bar/%(id)s/'}),
+        ('^foo/(?P<id>\d+)/$', 'redirect_to', {'url': '/bar/%(id)s/'}),
     )
 
 This example returns a 410 HTTP error for requests to ``/bar/``::
@@ -171,7 +178,7 @@
       template. By default, it's ``django.template.loader``.
 
     * ``extra_context``: A dictionary of values to add to the template
-      context. By default, this is an empty dictionary.
+      context. By default, this is an empty dictionary. If a value in the
       dictionary is callable, the generic view will call it
       just before rendering the template.
 
@@ -184,7 +191,7 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
     * ``allow_future``: A boolean specifying whether to include "future"
       objects on this page, where "future" means objects in which the field
@@ -197,11 +204,11 @@
 ``<app_label>/<model_name>_archive.html`` by default, where:
 
     * ``<model_name>`` is your model's name in all lowercase. For a model
-        ``StaffMember``, that'd be ``staffmember``.
+      ``StaffMember``, that'd be ``staffmember``.
 
     * ``<app_label>`` is the right-most part of the full Python path to
-        your model's app. For example, if your model lives in
-        ``apps/blog/models.py``, that'd be ``blog``.
+      your model's app. For example, if your model lives in
+      ``apps/blog/models.py``, that'd be ``blog``.
 
 **Template context:**
 
@@ -215,7 +222,7 @@
       by ``date_field``. For example, if ``num_latest`` is ``10``, then
       ``latest`` will be a list of the latest 10 objects in ``queryset``.
 
-.. _RequestContext docs: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-djangocontext
+.. _RequestContext docs: ../templates_python/#subclassing-context-djangocontext
 
 ``django.views.generic.date_based.archive_year``
 ------------------------------------------------
@@ -258,9 +265,9 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``. The
-       view will append ``'_list'`` to the value of this parameter in
-       determining the variable's name.
+      to use in the template context. By default, this is ``'object'``. The
+      view will append ``'_list'`` to the value of this parameter in
+      determining the variable's name.
 
     * ``make_object_list``: A boolean specifying whether to retrieve the full
       list of objects for this year and pass those to the template. If ``True``,
@@ -270,7 +277,7 @@
       this is ``False``.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
     * ``allow_future``: A boolean specifying whether to include "future"
       objects on this page, where "future" means objects in which the field
@@ -352,12 +359,12 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``. The
-       view will append ``'_list'`` to the value of this parameter in
-       determining the variable's name.
+      to use in the template context. By default, this is ``'object'``. The
+      view will append ``'_list'`` to the value of this parameter in
+      determining the variable's name.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
     * ``allow_future``: A boolean specifying whether to include "future"
       objects on this page, where "future" means objects in which the field
@@ -433,12 +440,12 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``. The
-       view will append ``'_list'`` to the value of this parameter in
-       determining the variable's name.
+      to use in the template context. By default, this is ``'object'``. The
+      view will append ``'_list'`` to the value of this parameter in
+      determining the variable's name.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
     * ``allow_future``: A boolean specifying whether to include "future"
       objects on this page, where "future" means objects in which the field
@@ -518,12 +525,12 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``. The
-       view will append ``'_list'`` to the value of this parameter in
-       determining the variable's name.
+      to use in the template context. By default, this is ``'object'``. The
+      view will append ``'_list'`` to the value of this parameter in
+      determining the variable's name.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
     * ``allow_future``: A boolean specifying whether to include "future"
       objects on this page, where "future" means objects in which the field
@@ -630,10 +637,10 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``.
+      to use in the template context. By default, this is ``'object'``.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
     * ``allow_future``: A boolean specifying whether to include "future"
       objects on this page, where "future" means objects in which the field
@@ -678,7 +685,7 @@
     * ``paginate_by``: An integer specifying how many objects should be
       displayed per page. If this is given, the view will paginate objects with
       ``paginate_by`` objects per page. The view will expect either a ``page``
-      query string parameter (via ``GET``) containing a zero-indexed page
+      query string parameter (via ``GET``) containing a 1-based page
       number, or a ``page`` variable specified in the URLconf. See
       "Notes on pagination" below.
 
@@ -702,12 +709,12 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``. The
-       view will append ``'_list'`` to the value of this parameter in
-       determining the variable's name.
+      to use in the template context. By default, this is ``'object'``. The
+      view will append ``'_list'`` to the value of this parameter in
+      determining the variable's name.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
 **Template name:**
 
@@ -744,6 +751,12 @@
 
     * ``previous``: The previous page number, as an integer. This is 1-based.
 
+    * `last_on_page`: The number of the
+      last result on the current page. This is 1-based.
+
+    * `first_on_page`: The number of the
+      first result on the current page. This is 1-based.
+
     * ``pages``: The total number of pages, as an integer.
 
     * ``hits``: The total number of objects across *all* pages, not just this
@@ -816,10 +829,10 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``.
+      to use in the template context. By default, this is ``'object'``.
 
     * ``mimetype``: The MIME type to use for the resulting document. Defaults
-      to the value of the ``DEFAULT_MIME_TYPE`` setting.
+      to the value of the ``DEFAULT_CONTENT_TYPE`` setting.
 
 **Template name:**
 
@@ -894,7 +907,7 @@
 
 In addition to ``extra_context``, the template's context will be:
 
-    * ``form``: A ``django.forms.FormWrapper`` instance representing the form
+    * ``form``: A ``django.oldforms.FormWrapper`` instance representing the form
       for editing the object. This lets you refer to form fields easily in the
       template system.
 
@@ -908,8 +921,8 @@
       See the `manipulator and formfield documentation`_ for more information
       about using ``FormWrapper`` objects in templates.
 
-.. _authentication system: http://www.djangoproject.com/documentation/authentication/
-.. _manipulator and formfield documentation: http://www.djangoproject.com/documentation/forms/
+.. _authentication system: ../authentication/
+.. _manipulator and formfield documentation: ../forms/
 
 ``django.views.generic.create_update.update_object``
 ----------------------------------------------------
@@ -965,7 +978,7 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``.
+      to use in the template context. By default, this is ``'object'``.
 
 **Template name:**
 
@@ -976,7 +989,7 @@
 
 In addition to ``extra_context``, the template's context will be:
 
-    * ``form``: A ``django.forms.FormWrapper`` instance representing the form
+    * ``form``: A ``django.oldforms.FormWrapper`` instance representing the form
       for editing the object. This lets you refer to form fields easily in the
       template system.
 
@@ -1046,7 +1059,7 @@
       the view's template. See the `RequestContext docs`_.
 
     * ``template_object_name``:  Designates the name of the template variable
-       to use in the template context. By default, this is ``'object'``.
+      to use in the template context. By default, this is ``'object'``.
 
 **Template name:**
 

Modified: vendor/django/current/docs/i18n.txt
===================================================================
--- vendor/django/current/docs/i18n.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/i18n.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -48,11 +48,12 @@
 use internationalization, you should take the two seconds to set
 ``USE_I18N = False`` in your settings file. If ``USE_I18N`` is set to
 ``False``, then Django will make some optimizations so as not to load the
-internationalization machinery.
+internationalization machinery. See the `documentation for USE_I18N`_.
 
-See the `documentation for USE_I18N`_.
+You'll probably also want to remove ``'django.core.context_processors.i18n'``
+from your ``TEMPLATE_CONTEXT_PROCESSORS`` setting.
 
-.. _documentation for USE_I18N: http://www.djangoproject.com/documentation/settings/#use-i18n
+.. _documentation for USE_I18N: ../settings/#use-i18n
 
 How to specify translation strings
 ==================================
@@ -174,7 +175,7 @@
             verbose_name = _('my thing')
             verbose_name_plural = _('mythings')
 
-.. _Django models: http://www.djangoproject.com/documentation/model_api/
+.. _Django models: ../model_api/
 
 Pluralization
 ~~~~~~~~~~~~~
@@ -273,7 +274,7 @@
 In this case, both the tag and the filter will see the already-translated
 string, so they don't need to be aware of translations.
 
-.. _Django templates: http://www.djangoproject.com/documentation/templates_python/
+.. _Django templates: ../templates_python/
 
 How to create language files
 ============================
@@ -281,6 +282,17 @@
 Once you've tagged your strings for later translation, you need to write (or
 obtain) the language translations themselves. Here's how that works.
 
+.. admonition:: Locale restrictions
+
+    Django does not support localizing your application into a locale for
+    which Django itself has not been translated. In this case, it will ignore
+    your translation files. If you were to try this and Django supported it,
+    you would inevitably see a mixture of translated strings (from your
+    application) and English strings (from Django itself). If you want to
+    support a locale for your application that is not already part of
+    Django, you'll need to make at least a minimal translation of the Django
+    core.
+
 Message files
 -------------
 
@@ -393,7 +405,7 @@
     please let us know! See `Submitting and maintaining translations`_ for
     the steps to take.
 
-    .. _Submitting and maintaining translations: http://www.djangoproject.com/documentation/contributing/
+    .. _Submitting and maintaining translations: ../contributing/
 
 How Django discovers language preference
 ========================================
@@ -471,7 +483,7 @@
       selection to German and English (and any sublanguage, like de-ch or
       en-us).
 
-      .. _LANGUAGES setting: http://www.djangoproject.com/documentation/settings/#languages
+      .. _LANGUAGES setting: ../settings/#languages
 
     * If you define a custom ``LANGUAGES`` setting, as explained in the
       previous bullet, it's OK to mark the languages as translation strings
@@ -529,10 +541,10 @@
 ``settings.LANGUAGE_CODE``, while with dynamic (middleware) translation, it's
 in ``request.LANGUAGE_CODE``.
 
-.. _settings file: http://www.djangoproject.com/documentation/settings/
-.. _middleware documentation: http://www.djangoproject.com/documentation/middleware/
-.. _session: http://www.djangoproject.com/documentation/sessions/
-.. _request object: http://www.djangoproject.com/documentation/request_response/#httprequest-objects
+.. _settings file: ../settings/
+.. _middleware documentation: ../middleware/
+.. _session: ../sessions/
+.. _request object: ../request_response/#httprequest-objects
 
 The ``set_language`` redirect view
 ==================================
@@ -598,7 +610,7 @@
     of the settings file to determine this, and a settings file doesn't exist
     if you're manually configuring your settings.)
 
-.. _settings documentation: http://www.djangoproject.com/documentation/settings/#using-settings-without-the-django-settings-module-environment-variable
+.. _settings documentation: ../settings/#using-settings-without-the-django-settings-module-environment-variable
 
 All message file repositories are structured the same way. They are:
 

Modified: vendor/django/current/docs/install.txt
===================================================================
--- vendor/django/current/docs/install.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/install.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -38,7 +38,7 @@
 .. _Apache: http://httpd.apache.org/
 .. _mod_python: http://www.modpython.org/
 .. _WSGI: http://www.python.org/peps/pep-0333.html
-.. _How to use Django with mod_python: http://www.djangoproject.com/documentation/modpython/
+.. _How to use Django with mod_python: ../modpython/
 .. _server-arrangements wiki page: http://code.djangoproject.com/wiki/ServerArrangements
 
 Get your database running
@@ -51,16 +51,20 @@
 Additionally, you'll need to make sure your Python database bindings are
 installed.
 
-* If you're using PostgreSQL, you'll need the psycopg_ package (version 1.1 --
-  not version 1.0 or version 2, which is still in beta). If you're on Windows,
-  check out the unofficial `compiled Windows version`_.
-* If you're using MySQL, you'll need MySQLdb_.
+* If you're using PostgreSQL, you'll need the psycopg_ package (version 2 is
+  recommended with ``postgresql_psycopg2`` backend, version 1.1 works also with the
+  ``postgresql``` backend). 
+  
+  If you're on Windows, check out the unofficial `compiled Windows version`_.
+  
+* If you're using MySQL, you'll need MySQLdb_, version 1.2.1p2 or higher.
+
 * If you're using SQLite, you'll need pysqlite_. Use version 2.0.3 or higher.
 
 .. _PostgreSQL: http://www.postgresql.org/
 .. _MySQL: http://www.mysql.com/
 .. _Django's ticket system: http://code.djangoproject.com/report/1
-.. _psycopg: http://initd.org/projects/psycopg1
+.. _psycopg: http://initd.org/tracker/psycopg
 .. _compiled Windows version: http://stickpeople.com/projects/python/win-psycopg/
 .. _MySQLdb: http://sourceforge.net/projects/mysql-python
 .. _SQLite: http://www.sqlite.org/
@@ -77,36 +81,63 @@
 Installing the official version
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-1. Download Django-0.95.tar.gz from our `download page`_.
-2. ``tar xzvf Django-0.95.tar.gz``
-3. ``cd Django-0.95``
-4. ``sudo python setup.py install``
+    1. Check the `distribution specific notes`_ to see if your
+       platform/distribution provides official Django packages/installers.
+       Distribution-provided packages will typically allow for automatic
+       installation of dependancies and easy upgrade paths.
 
+    2. Download Django-0.95.tar.gz from our `download page`_.
+
+    3. ``tar xzvf Django-0.95.tar.gz``
+
+    4. ``cd Django-0.95``
+
+    5. ``sudo python setup.py install``
+
 Note that the last command will automatically download and install setuptools_
 if you don't already have it installed. This requires a working Internet
+connection and may cause problems on Python 2.5. If you run into problems,
+try using our development version by following the instructions below. The
+development version no longer uses setuptools nor requires an Internet
 connection.
 
-This will install Django in your Python installation's ``site-packages``
+The command will install Django in your Python installation's ``site-packages``
 directory.
 
 .. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools
+.. _distribution specific notes: ../distributions/
 
 Installing the development version
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+If you'd like to be able to update your Django code occasionally with the
+latest bug fixes and improvements, follow these instructions:
+
 1. Make sure you have Subversion_ installed.
-2. ``svn co http://code.djangoproject.com/svn/django/trunk/ django_src``
-3. Symlink ``django_src/django`` so that ``django`` is within your Python
-   ``site-packages`` directory:
+2. Check out the Django code into your Python ``site-packages`` directory.
+   On Linux / Mac OSX / Unix, do this::
 
-   ``ln -s `pwd`/django_src/django /usr/lib/python2.3/site-packages/django``
+       svn co http://code.djangoproject.com/svn/django/trunk/ django_src
+       ln -s `pwd`/django_src/django /usr/lib/python2.3/site-packages/django
 
    (In the above line, change ``python2.3`` to match your current Python version.)
 
-You don't have to run ``python setup.py install``.
+   On Windows, do this::
 
-When you want to update your code, just run the command ``svn update`` from
-within the ``django_src`` directory.
+       svn co http://code.djangoproject.com/svn/django/trunk/django c:\Python24\lib\site-packages\django
 
+3. Copy the file ``django_src/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.
+
+You *don't* have to run ``python setup.py install``, because that command
+takes care of steps 2 and 3 for you.
+
+When you want to update your copy of the Django source code, just run the
+command ``svn update`` from within the ``django`` directory. When you do this,
+Subversion will automatically download any changes.
+
 .. _`download page`: http://www.djangoproject.com/download/
 .. _Subversion: http://subversion.tigris.org/

Modified: vendor/django/current/docs/legacy_databases.txt
===================================================================
--- vendor/django/current/docs/legacy_databases.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/legacy_databases.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -9,7 +9,7 @@
 This document assumes you know the Django basics, as covered in the
 `official tutorial`_.
 
-.. _official tutorial: http://www.djangoproject.com/documentation/tutorial1/
+.. _official tutorial: ../tutorial1/
 
 Give Django your database parameters
 ====================================
@@ -22,18 +22,16 @@
     * `DATABASE_ENGINE`_
     * `DATABASE_USER`_
     * `DATABASE_PASSWORD`_
-    * `DATABASE_NAME`_
     * `DATABASE_HOST`_
     * `DATABASE_PORT`_
 
-.. _settings file: http://www.djangoproject.com/documentation/settings/
-.. _DATABASE_NAME: http://www.djangoproject.com/documentation/settings/#database-name
-.. _DATABASE_ENGINE: http://www.djangoproject.com/documentation/settings/#database-engine
-.. _DATABASE_USER: http://www.djangoproject.com/documentation/settings/#database-user
-.. _DATABASE_PASSWORD: http://www.djangoproject.com/documentation/settings/#database-password
-.. _DATABASE_NAME: http://www.djangoproject.com/documentation/settings/#database-name
-.. _DATABASE_HOST: http://www.djangoproject.com/documentation/settings/#database-host
-.. _DATABASE_PORT: http://www.djangoproject.com/documentation/settings/#database-port
+.. _settings file: ../settings/
+.. _DATABASE_NAME: ../settings/#database-name
+.. _DATABASE_ENGINE: ../settings/#database-engine
+.. _DATABASE_USER: ../settings/#database-user
+.. _DATABASE_PASSWORD: ../settings/#database-password
+.. _DATABASE_HOST: ../settings/#database-host
+.. _DATABASE_PORT: ../settings/#database-port
 
 Auto-generate the models
 ========================
@@ -54,7 +52,7 @@
 the Python package that holds your app. Then add the app to your
 ``INSTALLED_APPS`` setting.
 
-.. _django-admin.py documentation: http://www.djangoproject.com/documentation/django_admin/
+.. _django-admin.py documentation: ../django_admin/
 
 Install the core Django tables
 ==============================

Modified: vendor/django/current/docs/middleware.txt
===================================================================
--- vendor/django/current/docs/middleware.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/middleware.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -47,7 +47,7 @@
 cached for as long as the ``CACHE_MIDDLEWARE_SECONDS`` setting defines. See
 the `cache documentation`_.
 
-.. _`cache documentation`: http://www.djangoproject.com/documentation/cache/#the-per-site-cache
+.. _`cache documentation`: ../cache/#the-per-site-cache
 
 django.middleware.common.CommonMiddleware
 -----------------------------------------
@@ -63,7 +63,7 @@
   last component in the path contains a period. So ``foo.com/bar`` is
   redirected to ``foo.com/bar/``, but ``foo.com/bar/file.txt`` is passed
   through unchanged.
-  
+
   If ``PREPEND_WWW`` is ``True``, URLs that lack a leading "www." will be
   redirected to the same URL with a leading "www."
 
@@ -101,12 +101,27 @@
 Also removes the content from any response to a HEAD request and sets the
 ``Date`` and ``Content-Length`` response-headers.
 
+django.middleware.http.SetRemoteAddrFromForwardedFor
+----------------------------------------------------
+
+Sets ``request.META['REMOTE_ADDR']`` based on
+``request.META['HTTP_X_FORWARDED_FOR']``, if the latter is set. This is useful
+if you're sitting behind a reverse proxy that causes each request's
+``REMOTE_ADDR`` to be set to ``127.0.0.1``.
+
+**Important note:** This does NOT validate ``HTTP_X_FORWARDED_FOR``. If you're
+not behind a reverse proxy that sets ``HTTP_X_FORWARDED_FOR`` automatically, do
+not use this middleware. Anybody can spoof the value of
+``HTTP_X_FORWARDED_FOR``, and because this sets ``REMOTE_ADDR`` based on
+``HTTP_X_FORWARDED_FOR``, that means anybody can "fake" their IP address. Only
+use this when you can absolutely trust the value of ``HTTP_X_FORWARDED_FOR``.
+
 django.contrib.sessions.middleware.SessionMiddleware
 ----------------------------------------------------
 
 Enables session support. See the `session documentation`_.
 
-.. _`session documentation`: http://www.djangoproject.com/documentation/sessions/
+.. _`session documentation`: ../sessions/
 
 django.contrib.auth.middleware.AuthenticationMiddleware
 -------------------------------------------------------
@@ -114,7 +129,7 @@
 Adds the ``user`` attribute, representing the currently-logged-in user, to
 every incoming ``HttpRequest`` object. See `Authentication in Web requests`_.
 
-.. _Authentication in Web requests: http://www.djangoproject.com/documentation/authentication/#authentication-in-web-requests
+.. _Authentication in Web requests: ../authentication/#authentication-in-web-requests
 
 django.middleware.transaction.TransactionMiddleware
 ---------------------------------------------------
@@ -130,7 +145,7 @@
 
 See the `transaction management documentation`_.
 
-.. _`transaction management documentation`: http://www.djangoproject.com/documentation/transactions/
+.. _`transaction management documentation`: ../transactions/
 
 Writing your own middleware
 ===========================

Modified: vendor/django/current/docs/model-api.txt
===================================================================
--- vendor/django/current/docs/model-api.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/model-api.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -94,7 +94,7 @@
        the way Django's query lookup syntax works. For example::
 
            class Example(models.Model):
-               foo__bar = models.IntegerField() 'foo__bar' has two underscores!
+               foo__bar = models.IntegerField() # 'foo__bar' has two underscores!
 
 These limitations can be worked around, though, because your field name doesn't
 necessarily have to match your database column name. See `db_column`_ below.
@@ -188,7 +188,8 @@
 ~~~~~~~~~~~~~~
 
 A ``CharField`` that checks that the value is a valid e-mail address.
-This doesn't accept ``maxlength``.
+This doesn't accept ``maxlength``; its ``maxlength`` is automatically set to
+75.
 
 ``FileField``
 ~~~~~~~~~~~~~
@@ -217,12 +218,27 @@
        subdirectory of ``MEDIA_ROOT`` it should upload files.
 
     3. All that will be stored in your database is a path to the file
-       (relative to ``MEDIA_ROOT``). You'll must likely want to use the
+       (relative to ``MEDIA_ROOT``). You'll most likely want to use the
        convenience ``get_<fieldname>_url`` function provided by Django. For
        example, if your ``ImageField`` is called ``mug_shot``, you can get
        the absolute URL to your image in a template with ``{{
        object.get_mug_shot_url }}``.
 
+For example, say your ``MEDIA_ROOT`` is set to ``'/home/media'``, and
+``upload_to`` is set to ``'photos/%Y/%m/%d'``. The ``'%Y/%m/%d'`` part of
+``upload_to`` is strftime formatting; ``'%Y'`` is the four-digit year,
+``'%m'`` is the two-digit month and ``'%d'`` is the two-digit day. If you
+upload a file on Jan. 15, 2007, it will be saved in the directory
+``/home/media/photos/2007/01/15``.
+
+Note that whenever you deal with uploaded files, you should pay close attention
+to where you're uploading them and what type of files they are, to avoid
+security holes. *Validate all uploaded files* so that you're sure the files are
+what you think they are. For example, if you blindly let somebody upload files,
+without validation, to a directory that's within your Web server's document
+root, then somebody could upload a CGI or PHP script and execute that script by
+visiting its URL on your site. Don't allow that.
+
 .. _`strftime formatting`: http://docs.python.org/lib/module-time.html#l2h-1941
 
 ``FilePathField``
@@ -346,9 +362,8 @@
 containing only letters, numbers, underscores or hyphens. They're generally
 used in URLs.
 
-In the Django development version, you can specify ``maxlength``. If
-``maxlength`` is not specified, Django will use a default length of 50. In
-previous Django versions, there's no way to override the length of 50.
+Like a CharField, you can specify ``maxlength``. If ``maxlength`` is
+not specified, Django will use a default length of 50.
 
 Implies ``db_index=True``.
 
@@ -482,6 +497,12 @@
     class Foo(models.Model):
         gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
 
+For each model field that has ``choices`` set, Django will add a method to
+retrieve the human-readable name for the field's current value. See
+`get_FOO_display`_ in the database API documentation.
+
+.. _get_FOO_display: ../db_api/#get-foo-display
+
 Finally, note that choices can be any iterable object -- not necessarily a
 list or tuple. This lets you construct choices dynamically. But if you find
 yourself hacking ``choices`` to be dynamic, you're probably better off using
@@ -528,7 +549,9 @@
 ``editable``
 ~~~~~~~~~~~~
 
-If ``False``, the field will not be editable in the admin. Default is  ``True``.
+If ``False``, the field will not be editable in the admin or via form
+processing using the object's ``AddManipulator`` or ``ChangeManipulator``
+classes. Default is ``True``.
 
 ``help_text``
 ~~~~~~~~~~~~~
@@ -671,8 +694,9 @@
     class Manufacturer(models.Model):
         # ...
 
-Note, however, that support for strings around model names in ``ForeignKey`` is
-quite new, and it can be buggy in some cases.
+Note, however, that you can only use strings to refer to models in the same
+models.py file -- you cannot use a string to reference a model in a different
+application, or to reference a model that has been imported from elsewhere.
 
 Behind the scenes, Django appends ``"_id"`` to the field name to create its
 database column name. In the above example, the database table for the ``Car``
@@ -794,7 +818,10 @@
 
 As with ``ForeignKey``, a relationship to self can be defined by using the
 string ``'self'`` instead of the model name, and you can refer to as-yet
-undefined models by using a string containing the model name.
+undefined models by using a string containing the model name. However, you
+can only use strings to refer to models in the same models.py file -- you
+cannot use a string to reference a model in a different application, or to
+reference a model that has been imported from elsewhere.
 
 It's suggested, but not required, that the name of a ``ManyToManyField``
 (``toppings`` in the example above) be a plural describing the set of related
@@ -853,6 +880,10 @@
                              relationship, allowing ``ManyToMany`` relationships to be
                              non-symmetrical.
 
+    ``db_table``             The name of the table to create for storing the many-to-many
+                             data. If this is not provided, Django will assume a default
+                             name based upon the names of the two tables being joined.
+
     =======================  ============================================================
 
 One-to-one relationships
@@ -1184,6 +1215,10 @@
 admin page in JavaScript or to provide "quick links" to fill in default values
 for certain fields.
 
+If you use relative URLs -- URLs that don't start with ``http://`` or ``/`` --
+then the admin site will automatically prefix these links with
+``settings.ADMIN_MEDIA_PREFIX``.
+
 ``list_display``
 ----------------
 
@@ -1203,10 +1238,13 @@
       of the related object.
 
     * ``ManyToManyField`` fields aren't supported, because that would entail
-        executing a separate SQL statement for each row in the table.
+      executing a separate SQL statement for each row in the table. If you
+      want to do this nonetheless, give your model a custom method, and add
+      that method's name to ``list_display``. (See below for more on custom
+      methods in ``list_display``.)
 
-    * If the field is a ``BooleanField``, Django will display a pretty "on" or
-      "off" icon instead of ``True`` or ``False``.
+    * If the field is a ``BooleanField`` or ``NullBooleanField``, Django will
+      display a pretty "on" or "off" icon instead of ``True`` or ``False``.
 
     * If the string given is a method of the model, Django will call it and
       display the output. This method should have a ``short_description``
@@ -1243,6 +1281,54 @@
                   return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
               colored_name.allow_tags = True
 
+    * If the string given is a method of the model that returns True or False
+      Django will display a pretty "on" or "off" icon if you give the method a
+      ``boolean`` attribute whose value is ``True``.
+
+      Here's a full example model::
+
+          class Person(models.Model):
+              first_name = models.CharField(maxlength=50)
+              birthday = models.DateField()
+
+              class Admin:
+                  list_display = ('name', 'born_in_fifties')
+
+              def born_in_fifties(self):
+                  return self.birthday.strftime('%Y')[:3] == 5
+              born_in_fifties.boolean = True
+
+
+    * The ``__str__()`` method is just as valid in ``list_display`` as any
+      other model method, so it's perfectly OK to do this::
+
+          list_display = ('__str__', 'some_other_field')
+
+    * Usually, elements of ``list_display`` that aren't actual database fields
+      can't be used in sorting (because Django does all the sorting at the
+      database level).
+      
+      However, if an element of ``list_display`` represents a certain database
+      field, you can indicate this fact by setting the ``admin_order_field``
+      attribute of the item.
+      
+      For example::
+      
+        class Person(models.Model):
+            first_name = models.CharField(maxlength=50)
+            color_code = models.CharField(maxlength=6)
+
+            class Admin:
+                list_display = ('first_name', 'colored_first_name')
+
+            def colored_first_name(self):
+                return '<span style="color: #%s;">%s</span>' % (self.color_code, self.first_name)
+            colored_first_name.allow_tags = True
+            colored_first_name.admin_order_field = 'first_name'
+    
+      The above will tell Django to order by the ``first_name`` field when
+      trying to sort by ``colored_first_name`` in the admin.
+
 ``list_display_links``
 ----------------------
 
@@ -1355,8 +1441,11 @@
 somebody submits a search query in that text box.
 
 These fields should be some kind of text field, such as ``CharField`` or
-``TextField``.
+``TextField``. You can also perform a related lookup on a ``ForeignKey`` with
+the lookup API "follow" notation::
 
+    search_fields = ['foreign_key__related_fieldname']
+
 When somebody does a search in the admin search box, Django splits the search
 query into words and returns all objects that contain each of the words, case
 insensitive, where each word must be in at least one of ``search_fields``. For
@@ -1367,6 +1456,41 @@
     WHERE (first_name ILIKE '%john%' OR last_name ILIKE '%john%')
     AND (first_name ILIKE '%lennon%' OR last_name ILIKE '%lennon%')
 
+For faster and/or more restrictive searches, prefix the field name
+with an operator:
+
+``^``
+    Matches the beginning of the field. For example, if ``search_fields`` is
+    set to ``['^first_name', '^last_name']`` and a user searches for
+    ``john lennon``, Django will do the equivalent of this SQL ``WHERE``
+    clause::
+
+        WHERE (first_name ILIKE 'john%' OR last_name ILIKE 'john%')
+        AND (first_name ILIKE 'lennon%' OR last_name ILIKE 'lennon%')
+
+    This query is more efficient than the normal ``'%john%'`` query, because
+    the database only needs to check the beginning of a column's data, rather
+    than seeking through the entire column's data. Plus, if the column has an
+    index on it, some databases may be able to use the index for this query,
+    even though it's a ``LIKE`` query.
+
+``=``
+    Matches exactly, case-insensitive. For example, if
+    ``search_fields`` is set to ``['=first_name', '=last_name']`` and
+    a user searches for ``john lennon``, Django will do the equivalent
+    of this SQL ``WHERE`` clause::
+
+        WHERE (first_name ILIKE 'john' OR last_name ILIKE 'john')
+        AND (first_name ILIKE 'lennon' OR last_name ILIKE 'lennon')
+
+    Note that the query input is split by spaces, so, following this example,
+    it's not currently not possible to search for all records in which
+    ``first_name`` is exactly ``'john winston'`` (containing a space).
+
+``@``
+    Performs a full-text match. This is like the default search method but uses
+    an index. Currently this is only available for MySQL.
+
 Managers
 ========
 
@@ -1626,12 +1750,28 @@
 
     <a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
 
-(Yes, we know ``get_absolute_url()`` couples URLs to models, which violates the
-DRY principle, because URLs are defined both in a URLconf and in the model.
-This is a rare case in which we've intentionally violated that principle for
-the sake of convenience. With that said, we're working on an even cleaner way
-of specifying URLs in a more DRY fashion.)
+The ``permalink`` decorator
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+The problem with the way we wrote ``get_absolute_url()`` above is that it
+slightly violates the DRY principle: the URL for this object is defined both
+in the URLConf file and in the model.
+
+You can further decouple your models from the URLconf using the ``permalink``
+decorator. This decorator is passed the view function and any parameters you
+would use for accessing this instance directly. Django then works out the
+correct full URL path using the URLconf. For example::
+
+    from django.db.models import permalink
+
+    def get_absolute_url(self):
+        return ('people.views.details', str(self.id))
+    get_absolute_url = permalink(get_absolute_url)
+
+In this way, you're tying the model's absolute URL to the view that is used
+to display it, without repeating the URL information anywhere. You can still
+use the ``get_absolute_url`` method in templates, as before.
+
 Executing custom SQL
 --------------------
 

Modified: vendor/django/current/docs/modpython.txt
===================================================================
--- vendor/django/current/docs/modpython.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/modpython.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -20,7 +20,7 @@
 .. _mod_perl: http://perl.apache.org/
 .. _prefork MPM: http://httpd.apache.org/docs/2.2/mod/prefork.html
 .. _worker MPM: http://httpd.apache.org/docs/2.2/mod/worker.html
-.. _How to use Django with FastCGI: http://www.djangoproject.com/documentation/fastcgi/
+.. _How to use Django with FastCGI: ../fastcgi/
 
 Basic configuration
 ===================
@@ -43,6 +43,11 @@
 Django mod_python handler." It passes the value of ``DJANGO_SETTINGS_MODULE``
 so mod_python knows which settings to use.
 
+Note that we're using the ``<Location>`` directive, not the ``<Directory>``
+directive. The latter is used for pointing at places on your filesystem,
+whereas ``<Location>`` points at places in the URL structure of a Web site.
+``<Directory>`` would be meaningless here.
+
 Also, if you've manually altered your ``PYTHONPATH`` to put your Django project
 on it, you'll need to tell mod_python::
 

Added: vendor/django/current/docs/newforms.txt
===================================================================
--- vendor/django/current/docs/newforms.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/newforms.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,875 @@
+====================
+The newforms library
+====================
+
+``django.newforms`` is Django's fantastic new form-handling library. It's a
+replacement for ``django.forms``, the old form/manipulator/validation
+framework. This document explains how to use this new library.
+
+Migration plan
+==============
+
+``django.newforms`` currently is only available in Django beginning
+with the 0.96 release.  the Django development version -- i.e., it's
+not available in the Django 0.95 release. For the next Django release,
+our plan is to do the following:
+
+    * As of revision [4208], we've copied the current ``django.forms`` to
+      ``django.oldforms``. This allows you to upgrade your code *now* rather
+      than waiting for the backwards-incompatible change and rushing to fix
+      your code after the fact. Just change your import statements like this::
+
+          from django import forms             # old
+          from django import oldforms as forms # new
+
+    * At an undecided future date, we will move the current ``django.newforms``
+      to ``django.forms``. This will be a backwards-incompatible change, and
+      anybody who is still using the old version of ``django.forms`` at that
+      time will need to change their import statements, as described in the
+      previous bullet.
+
+    * We will remove ``django.oldforms`` in the release *after* the next Django
+      release -- the release that comes after the release in which we're
+      creating the new ``django.forms``.
+
+With this in mind, we recommend you use the following import statement when
+using ``django.newforms``::
+
+    from django import newforms as forms
+
+This way, your code can refer to the ``forms`` module, and when
+``django.newforms`` is renamed to ``django.forms``, you'll only have to change
+your ``import`` statements.
+
+If you prefer "``import *``" syntax, you can do the following::
+
+    from django.newforms import *
+
+This will import all fields, widgets, form classes and other various utilities
+into your local namespace. Some people find this convenient; others find it
+too messy. The choice is yours.
+
+Overview
+========
+
+As with the ``django.forms`` ("manipulators") system before it,
+``django.newforms`` is intended to handle HTML form display, data processing
+(validation) and redisplay. It's what you use if you want to perform
+server-side validation for an HTML form.
+
+For example, if your Web site has a contact form that visitors can use to
+send you e-mail, you'd use this library to implement the display of the HTML
+form fields, along with the form validation. Any time you need to use an HTML
+``<form>``, you can use this library.
+
+The library deals with these concepts:
+
+    * **Widget** -- A class that corresponds to an HTML form widget, e.g.
+      ``<input type="text">`` or ``<textarea>``. This handles rendering of the
+      widget as HTML.
+
+    * **Field** -- A class that is responsible for doing validation, e.g.
+      an ``EmailField`` that makes sure its data is a valid e-mail address.
+
+    * **Form** -- A collection of fields that knows how to validate itself and
+      display itself as HTML.
+
+The library is decoupled from the other Django components, such as the database
+layer, views and templates. It relies only on Django settings, a couple of
+``django.utils`` helper functions and Django's internationalization hooks (but
+you're not required to be using internationalization features to use this
+library).
+
+Form objects
+============
+
+The primary way of using the ``newforms`` library is to create a form object.
+Do this by subclassing ``django.newforms.Form`` and specifying the form's
+fields, in a declarative style that you'll be familiar with if you've used
+Django database models. In this section, we'll iteratively develop a form
+object that you might use to implement "contact me" functionality on your
+personal Web site.
+
+Start with this basic ``Form`` subclass, which we'll call ``ContactForm``::
+
+    from django import newforms as forms
+
+    class ContactForm(forms.Form):
+        subject = forms.CharField(max_length=100)
+        message = forms.CharField()
+        sender = forms.EmailField()
+        cc_myself = forms.BooleanField()
+
+A form is composed of ``Field`` objects. In this case, our form has four
+fields: ``subject``, ``message``, ``sender`` and ``cc_myself``. We'll explain
+the different types of fields -- e.g., ``CharField`` and ``EmailField`` --
+shortly.
+
+Creating ``Form`` instances
+---------------------------
+
+A ``Form`` instance is either **bound** or **unbound** to a set of data.
+
+    * If it's **bound** to a set of data, it's capable of validating that data
+      and rendering the form as HTML with the data displayed in the HTML.
+
+    * If it's **unbound**, it cannot do validation (because there's no data to
+      validate!), but it can still render the blank form as HTML.
+
+To create an unbound ``Form`` instance, simply instantiate the class::
+
+    >>> f = ContactForm()
+
+To bind data to a form, pass the data as a dictionary as the first parameter to
+your ``Form`` class constructor::
+
+    >>> data = {'subject': 'hello',
+    ...         'message': 'Hi there',
+    ...         'sender': 'foo at example.com',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data)
+
+In this dictionary, the keys are the field names, which correspond to the
+attributes in your ``Form`` class. The values are the data you're trying
+to validate. These will usually be strings, but there's no requirement that
+they be strings; the type of data you pass depends on the ``Field``, as we'll
+see in a moment.
+
+If you need to distinguish between bound and unbound form instances at runtime,
+check the value of the form's ``is_bound`` attribute::
+
+    >>> f = ContactForm()
+    >>> f.is_bound
+    False
+    >>> f = ContactForm({'subject': 'hello'})
+    >>> f.is_bound
+    True
+
+Note that passing an empty dictionary creates a *bound* form with empty data::
+
+    >>> f = ContactForm({})
+    >>> f.is_bound
+    True
+
+If you have a bound ``Form`` instance and want to change the data somehow, or
+if you want to bind an unbound ``Form`` instance to some data, create another
+``Form`` instance. There is no way to change data in a ``Form`` instance. Once
+a ``Form`` instance has been created, you should consider its data immutable,
+whether it has data or not.
+
+Using forms to validate data
+----------------------------
+
+The primary task of a ``Form`` object is to validate data. With a bound
+``Form`` instance, call the ``is_valid()`` method to run validation and return
+a boolean designating whether the data was valid::
+
+    >>> data = {'subject': 'hello',
+    ...         'message': 'Hi there',
+    ...         'sender': 'foo at example.com',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data)
+    >>> f.is_valid()
+    True
+
+Let's try with some invalid data. In this case, ``subject`` is blank (an error,
+because all fields are required by default) and ``sender`` is not a valid
+e-mail address::
+
+    >>> data = {'subject': '',
+    ...         'message': 'Hi there',
+    ...         'sender': 'invalid e-mail address',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data)
+    >>> f.is_valid()
+    False
+
+Access the ``Form`` attribute ``errors`` to get a dictionary of error messages::
+
+    >>> f.errors
+    {'sender': [u'Enter a valid e-mail address.'], 'subject': [u'This field is required.']}
+
+In this dictionary, the keys are the field names, and the values are lists of
+Unicode strings representing the error messages. The error messages are stored
+in lists because a field can have multiple error messages.
+
+You can access ``errors`` without having to call ``is_valid()`` first. The
+form's data will be validated the first time either you call ``is_valid()`` or
+access ``errors``.
+
+Behavior of unbound forms
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It's meaningless to validate a form with no data, but, for the record, here's
+what happens with unbound forms::
+
+    >>> f = ContactForm()
+    >>> f.is_valid()
+    False
+    >>> f.errors
+    {}
+
+Accessing "clean" data
+----------------------
+
+Each ``Field`` in a ``Form`` class is responsible not only for validating data,
+but also for "cleaning" it -- normalizing it to a consistent format. This is a
+nice feature, because it allows data for a particular field to be input in
+a variety of ways, always resulting in consistent output.
+
+For example, ``DateField`` normalizes input into a Python ``datetime.date``
+object. Regardless of whether you pass it a string in the format
+``'1994-07-15'``, a ``datetime.date`` object or a number of other formats,
+``DateField`` will always normalize it to a ``datetime.date`` object as long as
+it's valid.
+
+Once you've created a ``Form`` instance with a set of data and validated it,
+you can access the clean data via the ``clean_data`` attribute of the ``Form``
+object::
+
+    >>> data = {'subject': 'hello',
+    ...         'message': 'Hi there',
+    ...         'sender': 'foo at example.com',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data)
+    >>> f.is_valid()
+    True
+    >>> f.clean_data
+    {'cc_myself': True, 'message': u'Hi there', 'sender': u'foo at example.com', 'subject': u'hello'}
+
+Note that any text-based field -- such as ``CharField`` or ``EmailField`` --
+always cleans the input into a Unicode string. We'll cover the encoding
+implications later in this document.
+
+If your data does *not* validate, your ``Form`` instance will not have a
+``clean_data`` attribute::
+
+    >>> data = {'subject': '',
+    ...         'message': 'Hi there',
+    ...         'sender': 'invalid e-mail address',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data)
+    >>> f.is_valid()
+    False
+    >>> f.clean_data
+    Traceback (most recent call last):
+    ...
+    AttributeError: 'ContactForm' object has no attribute 'clean_data'
+
+``clean_data`` will always *only* contain a key for fields defined in the
+``Form``, even if you pass extra data when you define the ``Form``. In this
+example, we pass a bunch of extra fields to the ``ContactForm`` constructor,
+but ``clean_data`` contains only the form's fields::
+
+    >>> data = {'subject': 'hello',
+    ...         'message': 'Hi there',
+    ...         'sender': 'foo at example.com',
+    ...         'cc_myself': True,
+    ...         'extra_field_1': 'foo',
+    ...         'extra_field_2': 'bar',
+    ...         'extra_field_3': 'baz'}
+    >>> f = ContactForm(data)
+    >>> f.is_valid()
+    True
+    >>> f.clean_data # Doesn't contain extra_field_1, etc.
+    {'cc_myself': True, 'message': u'Hi there', 'sender': u'foo at example.com', 'subject': u'hello'}
+
+Behavior of unbound forms
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It's meaningless to request "clean" data in a form with no data, but, for the
+record, here's what happens with unbound forms::
+
+    >>> f = ContactForm()
+    >>> f.clean_data
+    Traceback (most recent call last):
+    ...
+    AttributeError: 'ContactForm' object has no attribute 'clean_data'
+
+Outputting forms as HTML
+------------------------
+
+The second task of a ``Form`` object is to render itself as HTML. To do so,
+simply ``print`` it::
+
+    >>> f = ContactForm()
+    >>> print f
+    <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
+    <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>
+    <tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>
+    <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>
+
+If the form is bound to data, the HTML output will include that data
+appropriately. For example, if a field is represented by an
+``<input type="text">``, the data will be in the ``value`` attribute. If a
+field is represented by an ``<input type="checkbox">``, then that HTML will
+include ``checked="checked"`` if appropriate::
+
+    >>> data = {'subject': 'hello',
+    ...         'message': 'Hi there',
+    ...         'sender': 'foo at example.com',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data)
+    >>> print f
+    <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" /></td></tr>
+    <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" /></td></tr>
+    <tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" value="foo at example.com" /></td></tr>
+    <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked="checked" /></td></tr>
+
+This default output is a two-column HTML table, with a ``<tr>`` for each field.
+Notice the following:
+
+    * For flexibility, the output does *not* include the ``<table>`` and
+      ``</table>`` tags, nor does it include the ``<form>`` and ``</form>``
+      tags or an ``<input type="submit">`` tag. It's your job to do that.
+
+    * Each field type has a default HTML representation. ``CharField`` and
+      ``EmailField`` are represented by an ``<input type="text">``.
+      ``BooleanField`` is represented by an ``<input type="checkbox">``. Note
+      these are merely sensible defaults; you can specify which HTML to use for
+      a given field by using widgets, which we'll explain shortly.
+
+    * The HTML ``name`` for each tag is taken directly from its attribute name
+      in the ``ContactForm`` class.
+
+    * The text label for each field -- e.g. ``'Subject:'``, ``'Message:'`` and
+      ``'Cc myself:'`` is generated from the field name by converting all
+      underscores to spaces and upper-casing the first letter. Again, note
+      these are merely sensible defaults; you can also specify labels manually.
+
+    * Each text label is surrounded in an HTML ``<label>`` tag, which points
+      to the appropriate form field via its ``id``. Its ``id``, in turn, is
+      generated by prepending ``'id_'`` to the field name. The ``id``
+      attributes and ``<label>`` tags are included in the output by default, to
+      follow best practices, but you can change that behavior.
+
+Although ``<table>`` output is the default output style when you ``print`` a
+form, other output styles are available. Each style is available as a method on
+a form object, and each rendering method returns a Unicode object.
+
+``as_p()``
+~~~~~~~~~~
+
+``Form.as_p()`` renders the form as a series of ``<p>`` tags, with each ``<p>``
+containing one field::
+
+    >>> f = ContactForm()
+    >>> f.as_p()
+    u'<p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></p>\n<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>\n<p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></p>\n<p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>'
+    >>> print f.as_p()
+    <p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></p>
+    <p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>
+    <p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></p>
+    <p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>
+
+``as_ul()``
+~~~~~~~~~~~
+
+``Form.as_ul()`` renders the form as a series of ``<li>`` tags, with each
+``<li>`` containing one field. It does *not* include the ``<ul>`` or ``</ul>``,
+so that you can specify any HTML attributes on the ``<ul>`` for flexibility::
+
+    >>> f = ContactForm()
+    >>> f.as_ul()
+    u'<li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></li>\n<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>\n<li><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></li>\n<li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li>'
+    >>> print f.as_ul()
+    <li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></li>
+    <li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>
+    <li><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></li>
+    <li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li>
+
+``as_table()``
+~~~~~~~~~~~~~~
+
+Finally, ``Form.as_table()`` outputs the form as an HTML ``<table>``. This is
+exactly the same as ``print``. In fact, when you ``print`` a form object, it
+calls its ``as_table()`` method behind the scenes::
+
+    >>> f = ContactForm()
+    >>> f.as_table()
+    u'<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>\n<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>\n<tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>\n<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>'
+    >>> print f.as_table()
+    <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
+    <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>
+    <tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>
+    <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>
+
+Configuring HTML ``<label>`` tags
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+An HTML ``<label>`` tag designates which label text is associated with which
+form element. This small enhancement makes forms more usable and more accessible
+to assistive devices. It's always a good idea to use ``<label>`` tags.
+
+By default, the form rendering methods include HTML ``id`` attributes on the
+form elements and corresponding ``<label>`` tags around the labels. The ``id``
+attribute values are generated by prepending ``id_`` to the form field names.
+This behavior is configurable, though, if you want to change the ``id``
+convention or remove HTML ``id`` attributes and ``<label>`` tags entirely.
+
+Use the ``auto_id`` argument to the ``Form`` constructor to control the label
+and ``id`` behavior. This argument must be ``True``, ``False`` or a string.
+
+If ``auto_id`` is ``False``, then the form output will not include ``<label>``
+tags nor ``id`` attributes::
+
+    >>> f = ContactForm(auto_id=False)
+    >>> print f.as_table()
+    <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /></td></tr>
+    <tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
+    <tr><th>Sender:</th><td><input type="text" name="sender" /></td></tr>
+    <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
+    >>> print f.as_ul()
+    <li>Subject: <input type="text" name="subject" maxlength="100" /></li>
+    <li>Message: <input type="text" name="message" /></li>
+    <li>Sender: <input type="text" name="sender" /></li>
+    <li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
+    >>> print f.as_p()
+    <p>Subject: <input type="text" name="subject" maxlength="100" /></p>
+    <p>Message: <input type="text" name="message" /></p>
+    <p>Sender: <input type="text" name="sender" /></p>
+    <p>Cc myself: <input type="checkbox" name="cc_myself" /></p>
+
+If ``auto_id`` is set to ``True``, then the form output *will* include
+``<label>`` tags and will simply use the field name as its ``id`` for each form
+field::
+
+    >>> f = ContactForm(auto_id=True)
+    >>> print f.as_table()
+    <tr><th><label for="subject">Subject:</label></th><td><input id="subject" type="text" name="subject" maxlength="100" /></td></tr>
+    <tr><th><label for="message">Message:</label></th><td><input type="text" name="message" id="message" /></td></tr>
+    <tr><th><label for="sender">Sender:</label></th><td><input type="text" name="sender" id="sender" /></td></tr>
+    <tr><th><label for="cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="cc_myself" /></td></tr>
+    >>> print f.as_ul()
+    <li><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" /></li>
+    <li><label for="message">Message:</label> <input type="text" name="message" id="message" /></li>
+    <li><label for="sender">Sender:</label> <input type="text" name="sender" id="sender" /></li>
+    <li><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></li>
+    >>> print f.as_p()
+    <p><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" /></p>
+    <p><label for="message">Message:</label> <input type="text" name="message" id="message" /></p>
+    <p><label for="sender">Sender:</label> <input type="text" name="sender" id="sender" /></p>
+    <p><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></p>
+
+If ``auto_id`` is set to a string containing the format character ``'%s'``,
+then the form output will include ``<label>`` tags, and will generate ``id``
+attributes based on the format string. For example, for a format string
+``'field_%s'``, a field named ``subject`` will get the ``id``
+``'field_subject'``. Continuing our example::
+
+    >>> f = ContactForm(auto_id='id_for_%s')
+    >>> print f.as_table()
+    <tr><th><label for="id_for_subject">Subject:</label></th><td><input id="id_for_subject" type="text" name="subject" maxlength="100" /></td></tr>
+    <tr><th><label for="id_for_message">Message:</label></th><td><input type="text" name="message" id="id_for_message" /></td></tr>
+    <tr><th><label for="id_for_sender">Sender:</label></th><td><input type="text" name="sender" id="id_for_sender" /></td></tr>
+    <tr><th><label for="id_for_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></td></tr>
+    >>> print f.as_ul()
+    <li><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
+    <li><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" /></li>
+    <li><label for="id_for_sender">Sender:</label> <input type="text" name="sender" id="id_for_sender" /></li>
+    <li><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li>
+    >>> print f.as_p()
+    <p><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></p>
+    <p><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" /></p>
+    <p><label for="id_for_sender">Sender:</label> <input type="text" name="sender" id="id_for_sender" /></p>
+    <p><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></p>
+
+If ``auto_id`` is set to any other true value -- such as a string that doesn't
+include ``%s`` -- then the library will act as if ``auto_id`` is ``True``.
+
+By default, ``auto_id`` is set to the string ``'id_%s'``.
+
+Notes on field ordering
+~~~~~~~~~~~~~~~~~~~~~~~
+
+In the ``as_p()``, ``as_ul()`` and ``as_table()`` shortcuts, the fields are
+displayed in the order in which you define them in your form class. For
+example, in the ``ContactForm`` example, the fields are defined in the order
+``subject``, ``message``, ``sender``, ``cc_myself``. To reorder the HTML
+output, just change the order in which those fields are listed in the class.
+
+How errors are displayed
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you render a bound ``Form`` object, the act of rendering will automatically
+run the form's validation if it hasn't already happened, and the HTML output
+will include the validation errors as a ``<ul>`` near the field. The particular
+positioning of the error messages depends on the output method you're using::
+
+    >>> data = {'subject': '',
+    ...         'message': 'Hi there',
+    ...         'sender': 'invalid e-mail address',
+    ...         'cc_myself': True}
+    >>> f = ContactForm(data, auto_id=False)
+    >>> print f.as_table()
+    <tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" /></td></tr>
+    <tr><th>Message:</th><td><input type="text" name="message" value="Hi there" /></td></tr>
+    <tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul><input type="text" name="sender" value="invalid e-mail address" /></td></tr>
+    <tr><th>Cc myself:</th><td><input checked="checked" type="checkbox" name="cc_myself" /></td></tr>
+    >>> print f.as_ul()
+    <li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" /></li>
+    <li>Message: <input type="text" name="message" value="Hi there" /></li>
+    <li><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul>Sender: <input type="text" name="sender" value="invalid e-mail address" /></li>
+    <li>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></li>
+    >>> print f.as_p()
+    <p><ul class="errorlist"><li>This field is required.</li></ul></p>
+    <p>Subject: <input type="text" name="subject" maxlength="100" /></p>
+    <p>Message: <input type="text" name="message" value="Hi there" /></p>
+    <p><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul></p>
+    <p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p>
+    <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p>
+
+More granular output
+~~~~~~~~~~~~~~~~~~~~
+
+The ``as_p()``, ``as_ul()`` and ``as_table()`` methods are simply shortcuts for
+lazy developers -- they're not the only way a form object can be displayed.
+
+To display the HTML for a single field in your form, use dictionary lookup
+syntax using the field's name as the key, and print the resulting object::
+
+    >>> f = ContactForm()
+    >>> print f['subject']
+    <input id="id_subject" type="text" name="subject" maxlength="100" />
+    >>> print f['message']
+    <input type="text" name="message" id="id_message" />
+    >>> print f['sender']
+    <input type="text" name="sender" id="id_sender" />
+    >>> print f['cc_myself']
+    <input type="checkbox" name="cc_myself" id="id_cc_myself" />
+
+Call ``str()`` or ``unicode()`` on the field to get its rendered HTML as a
+string or Unicode object, respectively::
+
+    >>> str(f['subject'])
+    '<input id="id_subject" type="text" name="subject" maxlength="100" />'
+    >>> unicode(f['subject'])
+    u'<input id="id_subject" type="text" name="subject" maxlength="100" />'
+
+The field-specific output honors the form object's ``auto_id`` setting::
+
+    >>> f = ContactForm(auto_id=False)
+    >>> print f['message']
+    <input type="text" name="message" />
+    >>> f = ContactForm(auto_id='id_%s')
+    >>> print f['message']
+    <input type="text" name="message" id="id_message" />
+
+For a field's list of errors, access the field's ``errors`` attribute. This
+is a list-like object that is displayed as an HTML ``<ul>`` when printed::
+
+    >>> data = {'subject': 'hi', 'message': '', 'sender': '', 'cc_myself': ''}
+    >>> f = ContactForm(data, auto_id=False)
+    >>> print f['message']
+    <input type="text" name="message" />
+    >>> f['message'].errors
+    [u'This field is required.']
+    >>> print f['message'].errors
+    <ul class="errorlist"><li>This field is required.</li></ul>
+    >>> f['subject'].errors
+    []
+    >>> print f['subject'].errors
+
+    >>> str(f['subject'].errors)
+    ''
+
+Subclassing forms
+-----------------
+
+If you subclass a custom ``Form`` class, the resulting ``Form`` class will
+include all fields of the parent class(es), followed by the fields you define
+in the subclass.
+
+In this example, ``ContactFormWithPriority`` contains all the fields from
+``ContactForm``, plus an additional field, ``priority``. The ``ContactForm``
+fields are ordered first::
+
+    >>> class ContactFormWithPriority(ContactForm):
+    ...     priority = forms.CharField()
+    >>> f = ContactFormWithPriority(auto_id=False)
+    >>> print f.as_ul()
+    <li>Subject: <input type="text" name="subject" maxlength="100" /></li>
+    <li>Message: <input type="text" name="message" /></li>
+    <li>Sender: <input type="text" name="sender" /></li>
+    <li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
+    <li>Priority: <input type="text" name="priority" /></li>
+
+It's possible to subclass multiple forms, treating forms as "mix-ins." In this
+example, ``BeatleForm`` subclasses both ``PersonForm`` and ``InstrumentForm``
+(in that order), and its field list includes the fields from the parent
+classes::
+
+    >>> class PersonForm(Form):
+    ...     first_name = CharField()
+    ...     last_name = CharField()
+    >>> class InstrumentForm(Form):
+    ...     instrument = CharField()
+    >>> class BeatleForm(PersonForm, InstrumentForm):
+    ...     haircut_type = CharField()
+    >>> b = BeatleForm(auto_id=False)
+    >>> print b.as_ul()
+    <li>First name: <input type="text" name="first_name" /></li>
+    <li>Last name: <input type="text" name="last_name" /></li>
+    <li>Instrument: <input type="text" name="instrument" /></li>
+    <li>Haircut type: <input type="text" name="haircut_type" /></li>
+
+Fields
+======
+
+When you create a ``Form`` class, the most important part is defining the
+fields of the form. Each field has custom validation logic, along with a few
+other hooks.
+
+Although the primary way you'll use ``Field`` classes is in ``Form`` classes,
+you can also instantiate them and use them directly to get a better idea of
+how they work. Each ``Field`` instance has a ``clean()`` method, which takes
+a single argument and either raises a ``django.newforms.ValidationError``
+exception or returns the clean value::
+
+    >>> f = forms.EmailField()
+    >>> f.clean('foo at example.com')
+    u'foo at example.com'
+    >>> f.clean(u'foo at example.com')
+    u'foo at example.com'
+    >>> f.clean('invalid e-mail address')
+    Traceback (most recent call last):
+    ...
+    ValidationError: [u'Enter a valid e-mail address.']
+
+If you've used Django's old forms/validation framework, take care in noticing
+this ``ValidationError`` is different than the previous ``ValidationError``.
+This one lives at ``django.newforms.ValidationError`` rather than
+``django.core.validators.ValidationError``.
+
+Core field arguments
+--------------------
+
+Each ``Field`` class constructor takes at least these arguments. Some
+``Field`` classes take additional, field-specific arguments, but the following
+should *always* be available:
+
+``required``
+~~~~~~~~~~~~
+
+By default, each ``Field`` class assumes the value is required, so if you pass
+an empty value -- either ``None`` or the empty string (``""``) -- then
+``clean()`` will raise a ``ValidationError`` exception::
+
+    >>> f = forms.CharField()
+    >>> f.clean('foo')
+    u'foo'
+    >>> f.clean('')
+    Traceback (most recent call last):
+    ...
+    ValidationError: [u'This field is required.']
+    >>> f.clean(None)
+    Traceback (most recent call last):
+    ...
+    ValidationError: [u'This field is required.']
+    >>> f.clean(' ')
+    u' '
+    >>> f.clean(0)
+    u'0'
+    >>> f.clean(True)
+    u'True'
+    >>> f.clean(False)
+    u'False'
+
+To specify that a field is *not* required, pass ``required=False`` to the
+``Field`` constructor::
+
+    >>> f = forms.CharField(required=False)
+    >>> f.clean('foo')
+    u'foo'
+    >>> f.clean('')
+    u''
+    >>> f.clean(None)
+    u''
+    >>> f.clean(0)
+    u'0'
+    >>> f.clean(True)
+    u'True'
+    >>> f.clean(False)
+    u'False'
+
+If a ``Field`` has ``required=False`` and you pass ``clean()`` an empty value,
+then ``clean()`` will return a *normalized* empty value rather than raising
+``ValidationError``. For ``CharField``, this will be a Unicode empty string.
+For other ``Field`` classes, it might be ``None``. (This varies from field to
+field.)
+
+``label``
+~~~~~~~~~
+
+The ``label`` argument lets you specify the "human-friendly" label for this
+field. This is used when the ``Field`` is displayed in a ``Form``.
+
+As explained in _`Outputting forms as HTML` above, the default label for a
+``Field`` is generated from the field name by converting all underscores to
+spaces and upper-casing the first letter. Specify ``label`` if that default
+behavior doesn't result in an adequate label.
+
+Here's a full example ``Form`` that implements ``label`` for two of its fields.
+We've specified ``auto_id=False`` to simplify the output::
+
+    >>> class CommentForm(forms.Form):
+    ...     name = forms.CharField(label='Your name')
+    ...     url = forms.URLField(label='Your Web site', required=False)
+    ...     comment = forms.CharField()
+    >>> f = CommentForm(auto_id=False)
+    >>> print f
+    <tr><th>Your name:</th><td><input type="text" name="name" /></td></tr>
+    <tr><th>Your Web site:</th><td><input type="text" name="url" /></td></tr>
+    <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
+
+``initial``
+~~~~~~~~~~~
+
+The ``initial`` argument lets you specify the initial value to use when
+rendering this ``Field`` in an unbound ``Form``.
+
+The use-case for this is when you want to display an "empty" form in which a
+field is initialized to a particular value. For example::
+
+    >>> class CommentForm(forms.Form):
+    ...     name = forms.CharField(initial='Your name')
+    ...     url = forms.URLField(initial='http://')
+    ...     comment = forms.CharField()
+    >>> f = CommentForm(auto_id=False)
+    >>> print f
+    <tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
+    <tr><th>Url:</th><td><input type="text" name="url" value="http://" /></td></tr>
+    <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
+
+You may be thinking, why not just pass a dictionary of the initial values as
+data when displaying the form? Well, if you do that, you'll trigger validation,
+and the HTML output will include any validation errors::
+
+    >>> class CommentForm(forms.Form):
+    ...     name = forms.CharField()
+    ...     url = forms.URLField()
+    ...     comment = forms.CharField()
+    >>> default_data = {'name': 'Your name', 'url': 'http://'}
+    >>> f = CommentForm(default_data, auto_id=False)
+    >>> print f
+    <tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
+    <tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="text" name="url" value="http://" /></td></tr>
+    <tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" /></td></tr>
+
+This is why ``initial`` values are only displayed for unbound forms. For bound
+forms, the HTML output will use the bound data.
+
+Also note that ``initial`` values are *not* used as "fallback" data in
+validation if a particular field's value is not given. ``initial`` values are
+*only* intended for initial form display::
+
+    >>> class CommentForm(forms.Form):
+    ...     name = forms.CharField(initial='Your name')
+    ...     url = forms.URLField(initial='http://')
+    ...     comment = forms.CharField()
+    >>> data = {'name': '', 'url': '', 'comment': 'Foo'}
+    >>> f = CommentForm(data)
+    >>> f.is_valid()
+    False
+    # The form does *not* fall back to using the initial values.
+    >>> f.errors
+    {'url': [u'This field is required.'], 'name': [u'This field is required.']}
+
+``widget``
+~~~~~~~~~~
+
+The ``widget`` argument lets you specify a ``Widget`` class to use when
+rendering this ``Field``. See _`Widgets` below for more information.
+
+``help_text``
+~~~~~~~~~~~~~
+
+The ``help_text`` argument lets you specify descriptive text for this
+``Field``. If you provide ``help_text``, it will be displayed next to the
+``Field`` when the ``Field`` is rendered in a ``Form``.
+
+Here's a full example ``Form`` that implements ``help_text`` for two of its
+fields. We've specified ``auto_id=False`` to simplify the output::
+
+    >>> class HelpTextContactForm(forms.Form):
+    ...     subject = forms.CharField(max_length=100, help_text='100 characters max.')
+    ...     message = forms.CharField()
+    ...     sender = forms.EmailField(help_text='A valid e-mail address, please.')
+    ...     cc_myself = forms.BooleanField()
+    >>> f = HelpTextContactForm(auto_id=False)
+    >>> print f.as_table()
+    <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /><br />100 characters max.</td></tr>
+    <tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
+    <tr><th>Sender:</th><td><input type="text" name="sender" /><br />A valid e-mail address, please.</td></tr>
+    <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
+    >>> print f.as_ul()
+    <li>Subject: <input type="text" name="subject" maxlength="100" /> 100 characters max.</li>
+    <li>Message: <input type="text" name="message" /></li>
+    <li>Sender: <input type="text" name="sender" /> A valid e-mail address, please.</li>
+    <li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
+    >>> print f.as_p()
+    <p>Subject: <input type="text" name="subject" maxlength="100" /> 100 characters max.</p>
+    <p>Message: <input type="text" name="message" /></p>
+    <p>Sender: <input type="text" name="sender" /> A valid e-mail address, please.</p>
+    <p>Cc myself: <input type="checkbox" name="cc_myself" /></p>
+
+Dynamic initial values
+----------------------
+
+The ``initial`` argument to ``Field`` (explained above) lets you hard-code the
+initial value for a ``Field`` -- but what if you want to declare the initial
+value at runtime? For example, you might want to fill in a ``username`` field
+with the username of the current session.
+
+To accomplish this, use the ``initial`` argument to a ``Form``. This argument,
+if given, should be a dictionary mapping field names to initial values. Only
+include the fields for which you're specifying an initial value; it's not
+necessary to include every field in your form. For example::
+
+    >>> class CommentForm(forms.Form):
+    ...     name = forms.CharField()
+    ...     url = forms.URLField()
+    ...     comment = forms.CharField()
+    >>> f = CommentForm(initial={'name': 'your username'}, auto_id=False)
+    >>> print f
+    <tr><th>Name:</th><td><input type="text" name="name" value="your username" /></td></tr>
+    <tr><th>Url:</th><td><input type="text" name="url" /></td></tr>
+    <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
+    >>> f = CommentForm(initial={'name': 'another username'}, auto_id=False)
+    >>> print f
+    <tr><th>Name:</th><td><input type="text" name="name" value="another username" /></td></tr>
+    <tr><th>Url:</th><td><input type="text" name="url" /></td></tr>
+    <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
+
+Just like the ``initial`` parameter to ``Field``, these values are only
+displayed for unbound forms, and they're not used as fallback values if a
+particular value isn't provided.
+
+Finally, note that if a ``Field`` defines ``initial`` *and* you include
+``initial`` when instantiating the ``Form``, then the latter ``initial`` will
+have precedence. In this example, ``initial`` is provided both at the field
+level and at the form instance level, and the latter gets precedence::
+
+    >>> class CommentForm(forms.Form):
+    ...     name = forms.CharField(initial='class')
+    ...     url = forms.URLField()
+    ...     comment = forms.CharField()
+    >>> f = CommentForm(initial={'name': 'instance'}, auto_id=False)
+    >>> print f
+    <tr><th>Name:</th><td><input type="text" name="name" value="instance" /></td></tr>
+    <tr><th>Url:</th><td><input type="text" name="url" /></td></tr>
+    <tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
+
+More coming soon
+================
+
+That's all the documentation for now. For more, see the file
+http://code.djangoproject.com/browser/django/trunk/tests/regressiontests/forms/tests.py
+-- the unit tests for ``django.newforms``. This can give you a good idea of
+what's possible.
+
+If you're really itching to learn and use this library, please be patient.
+We're working hard on finishing both the code and documentation.
+
+Widgets
+=======

Modified: vendor/django/current/docs/outputting_csv.txt
===================================================================
--- vendor/django/current/docs/outputting_csv.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/outputting_csv.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -24,7 +24,7 @@
 
     For more information on the CSV library, see the `CSV library docs`_.
 
-    .. _Request and response objects: http://www.djangoproject.com/documentation/request_response/
+    .. _Request and response objects: ../request_response/
     .. _CSV library docs: http://www.python.org/doc/current/lib/module-csv.html
 
 Here's an example::
@@ -115,5 +115,5 @@
 there aren't any problems with quotes. If you can be certain your data doesn't
 have single or double quotes in it, you can remove the ``addslashes`` filters.
 
-.. _Django template system: http://www.djangoproject.com/documentation/templates/
-.. _addslashes template filter: http://www.djangoproject.com/documentation/templates/#addslashes
+.. _Django template system: ../templates/
+.. _addslashes template filter: ../templates/#addslashes

Modified: vendor/django/current/docs/outputting_pdf.txt
===================================================================
--- vendor/django/current/docs/outputting_pdf.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/outputting_pdf.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -29,7 +29,7 @@
 
 If that command doesn't raise any errors, the installation worked.
 
-.. _user guide: http://www.reportlab.org/rsrc/userguide.pdf
+.. _user guide: http://www.reportlab.com/docs/userguide.pdf
 
 Write your view
 ===============
@@ -43,7 +43,7 @@
     For more information on ``HttpResponse`` objects, see
     `Request and response objects`_.
 
-    .. _Request and response objects: http://www.djangoproject.com/documentation/request_response/
+    .. _Request and response objects: ../request_response/
 
 Here's a "Hello World" example::
 

Modified: vendor/django/current/docs/overview.txt
===================================================================
--- vendor/django/current/docs/overview.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/overview.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,7 +11,7 @@
 reference. Please see our more-detailed Django documentation_ when you're ready
 to start a project.
 
-.. _documentation: http://www.djangoproject.com/documentation/
+.. _documentation: ../
 
 Design your model
 =================
@@ -159,7 +159,7 @@
 Python callback functions. URLconfs also serve to decouple URLs from Python
 code.
 
-Here's what a URLconf might look like for the above ``Reporter``/``Article``
+Here's what a URLconf might look like for the ``Reporter``/``Article``
 example above::
 
     from django.conf.urls.defaults import *

Modified: vendor/django/current/docs/redirects.txt
===================================================================
--- vendor/django/current/docs/redirects.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/redirects.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -15,8 +15,8 @@
        to your MIDDLEWARE_CLASSES_ setting.
     3. Run the command ``manage.py syncdb``.
 
-.. _INSTALLED_APPS: http://www.djangoproject.com/documentation/settings/#installed-apps
-.. _MIDDLEWARE_CLASSES: http://www.djangoproject.com/documentation/settings/#middleware-classes
+.. _INSTALLED_APPS: ../settings/#installed-apps
+.. _MIDDLEWARE_CLASSES: ../settings/#middleware-classes
 
 How it works
 ============
@@ -46,8 +46,8 @@
 
 For more on middleware, read the `middleware docs`_.
 
-.. _SITE_ID: http://www.djangoproject.com/documentation/settings/#site-id
-.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
+.. _SITE_ID: ../settings/#site-id
+.. _middleware docs: ../middleware/
 
 How to add, change and delete redirects
 =======================================
@@ -63,9 +63,9 @@
 ------------------
 
 Redirects are represented by a standard `Django model`_, which lives in
-`django/contrib/redirects/models/redirects.py`_. You can access redirect
+`django/contrib/redirects/models.py`_. You can access redirect
 objects via the `Django database API`_.
 
-.. _Django model: http://www.djangoproject.com/documentation/model_api/
-.. _django/contrib/redirects/models/redirects.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/redirects/models/redirects.py
-.. _Django database API: http://www.djangoproject.com/documentation/db_api/
+.. _Django model: ../model_api/
+.. _django/contrib/redirects/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/redirects/models.py
+.. _Django database API: ../db_api/

Modified: vendor/django/current/docs/release_notes_0.95.txt
===================================================================
--- vendor/django/current/docs/release_notes_0.95.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/release_notes_0.95.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,9 +1,9 @@
-===================================
-Django version 0.95.1 release notes
-===================================
+=================================
+Django version 0.95 release notes
+=================================
 
 
-Welcome to the Django 0.95.1 release.
+Welcome to the Django 0.95 release.
 
 This represents a significant advance in Django development since the 0.91
 release in January 2006. The details of every change in this release would be
@@ -66,7 +66,11 @@
     * We've made it easier to add custom table-level functions to models,
       through a new "Manager" API.
 
-    * It's now possible to use Django without a database.
+    * It's now possible to use Django without a database. This simply means
+      that the framework no longer requires you to have a working database set
+      up just to serve dynamic pages. In other words, you can just use
+      URLconfs/views on their own. Previously, the framework required that a
+      database be configured, regardless of whether you actually used it.
 
     * It's now more explicit and natural to override save() and delete()
       methods on models, rather than needing to hook into the pre_save() and
@@ -85,33 +89,12 @@
 The number of changes required to port from 0.91-compatible code to the 0.95
 code base are significant in some cases. However, they are, for the most part,
 reasonably routine and only need to be done once. A list of the necessary
-changes is described in the 'Removing The Magic`_ wiki page. There is also an
+changes is described in the `Removing The Magic`_ wiki page. There is also an
 easy checklist_ for reference when undertaking the porting operation.
 
 .. _Removing The Magic: http://code.djangoproject.com/wiki/RemovingTheMagic
 .. _checklist: http://code.djangoproject.com/wiki/MagicRemovalCheatSheet1
 
-Changes since the 0.95 release
-==============================
-
-This release contains fixes for several bugs discovered after the
-initial release of Django 0.95; these include:
-
-    * A patch for a small security vulnerability in the script
-      Django's internationalization system uses to compile translation
-      files.
-
-    * A fix for a bug in Django's authentication middleware which
-      could cause apparent "caching" of a logged-in user.
-
-    * A patch which disables debugging mode in the flup FastCGI
-      package Django uses to launch its FastCGI server, which prevents
-      tracebacks from bubbling up during production use.
-
-Because these problems weren't discovered and fixed until after the
-0.95 release, it's recommended that you use this release rather than
-the original 0.95.
-
 Problem reports and getting help
 ================================
 
@@ -120,14 +103,14 @@
 document is especially recommended, as it contains a number of issues that
 come up time and again.
 
-For more personalized help, the `django-users` mailing list is a very active
+For more personalized help, the `django-users`_ mailing list is a very active
 list, with more than 2,000 subscribers who can help you solve any sort of
 Django problem. We recommend you search the archives first, though, because
 many common questions appear with some regularity, and any particular problem
 may already have been answered.
 
 Finally, for those who prefer the more immediate feedback offered by IRC,
-there's a #django channel or irc.freenode.net that is regularly populated by
+there's a #django channel on irc.freenode.net that is regularly populated by
 Django users and developers from around the world. Friendly people are usually
 available at any hour of the day -- to help, or just to chat.
 
@@ -139,5 +122,5 @@
 Thanks for using Django!
 
 The Django Team
-January 2007
+July 2006
 

Added: vendor/django/current/docs/release_notes_0.96.txt
===================================================================
--- vendor/django/current/docs/release_notes_0.96.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/release_notes_0.96.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,264 @@
+=================================
+Django version 0.96 release notes
+=================================
+
+Welcome to Django 0.96!
+
+The primary goal for 0.96 is a cleanup and stabilization of the features
+introduced in 0.95. There have been a few small `backwards-incompatible
+changes`_ since 0.95, but the upgrade process should be fairly simple
+and should not require major changes to existing applications.
+
+However, we're also releasing 0.96 now because we have a set of
+backwards-incompatible changes scheduled for the near future. Once
+completed, they will involve some code changes for application
+developers, so we recommend that you stick with Django 0.96 until the
+next official release; then you'll be able to upgrade in one step
+instead of needing to make incremental changes to keep up with the
+development version of Django.
+
+Backwards-incompatible changes
+==============================
+
+The following changes may require you to update your code when you switch from
+0.95 to 0.96:
+
+``MySQLdb`` version requirement
+-------------------------------
+
+Due to a bug in older versions of the ``MySQLdb`` Python module (which
+Django uses to connect to MySQL databases), Django's MySQL backend now
+requires version 1.2.1p2 or higher of `MySQLdb`, and will raise
+exceptions if you attempt to use an older version.
+
+If you're currently unable to upgrade your copy of ``MySQLdb`` to meet
+this requirement, a separate, backwards-compatible backend, called
+"mysql_old", has been added to Django. To use this backend, change
+the ``DATABASE_ENGINE`` setting in your Django settings file from
+this::
+
+    DATABASE_ENGINE = "mysql"
+
+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
+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.
+
+Also, note that some features, like the new ``DATABASE_OPTIONS``
+setting (see the `databases documentation`_ for details), are only
+available on the "mysql" backend, and will not be made available for
+"mysql_old".
+
+.. _databases documentation: ../databases/
+
+Database constraint names changed
+---------------------------------
+
+The format of the constraint names Django generates for foreign key
+references have changed slightly. These names are generally only used
+when it is not possible to put the reference directly on the affected
+column, so they is not always visible.
+
+The effect of this change is that running ``manage.py reset`` and
+similar commands against an existing database may generate SQL with
+the new form of constraint name, while the database itself contains
+constraints named in the old form; this will cause the database server
+to raise an error message about modifying non-existent constraints.
+
+If you need to work around this, there are two methods available:
+
+    1. Redirect the output of ``manage.py`` to a file, and edit the
+       generated SQL to use the correct constraint names before
+       executing it.
+
+    2. Examine the output of ``manage.py sqlall`` to see the new-style
+       constraint names, and use that as a guide to rename existing
+       constraints in your database.
+
+Name changes in ``manage.py``
+-----------------------------
+
+A few of the options to ``manage.py`` have changed with the addition of fixture
+support:
+
+    * There are new ``dumpdata`` and ``loaddata`` commands which, as
+      you might expect, will dump and load data to/from the
+      database. These commands can operate against any of Django's
+      supported serialization formats.
+
+    * The ``sqlinitialdata`` command has been renamed to ``sqlcustom`` to
+      emphasize that ``loaddata`` should be used for data (and ``sqlcustom`` for
+      other custom SQL -- views, stored procedures, etc.).
+      
+    * The vestigial ``install`` command has been removed. Use ``syncdb``.
+
+Backslash escaping changed
+--------------------------
+
+The Django database API now escapes backslashes given as query parameters. If
+you have any database API code that matches backslashes, and it was working before
+(despite the lack of escaping), you'll have to change your code to "unescape" the
+slashes one level.
+
+For example, this used to work::
+
+    # Find text containing a single backslash
+    MyModel.objects.filter(text__contains='\\\\')
+
+The above is now incorrect, and should be rewritten as::
+
+    # Find text containing a single backslash
+    MyModel.objects.filter(text__contains='\\')
+
+Removed ENABLE_PSYCO setting
+----------------------------
+
+The ``ENABLE_PSYCO`` setting no longer exists. If your settings file includes
+``ENABLE_PSYCO`` it will have no effect; to use Psyco_, we recommend
+writing a middleware class to activate it.
+
+.. _psyco: http://psyco.sourceforge.net/
+
+What's new in 0.96?
+===================
+
+This revision represents over a thousand source commits and over four hundred
+bug fixes, so we can't possibly catalog all the changes. Here, we describe the
+most notable changes in this release.
+
+New forms library
+-----------------
+
+``django.newforms`` is Django's new form-handling library. It's a
+replacement for ``django.forms``, the old form/manipulator/validation
+framework.  Both APIs are available in 0.96, but over the next two
+releases we plan to switch completely to the new forms system, and
+deprecate and remove the old system.
+
+There are three elements to this transition:
+
+    * We've copied the current ``django.forms`` to
+      ``django.oldforms``. This allows you to upgrade your code *now*
+      rather than waiting for the backwards-incompatible change and
+      rushing to fix your code after the fact.  Just change your
+      import statements like this::
+
+          from django import forms             # 0.95-style
+          from django import oldforms as forms # 0.96-style
+
+    * The next official release of Django will move the current
+      ``django.newforms`` to ``django.forms``. This will be a
+      backwards-incompatible change, and anyone still using the old
+      version of ``django.forms`` at that time will need to change
+      their import statements as described above.
+
+    * The next release after that will completely remove
+      ``django.oldforms``.
+
+Although the ``newforms`` library will continue to evolve, it's ready for use
+for most common cases. We recommend that anyone new to form handling skip the
+old forms system and start with the new.
+
+For more information about ``django.newforms``, read the `newforms
+documentation`_.
+
+.. _newforms documentation: ../newforms/
+
+URLconf improvements
+--------------------
+
+You can now use any callable as the callback in URLconfs (previously, only
+strings that referred to callables were allowed). This allows a much more
+natural use of URLconfs. For example, this URLconf::
+
+    from django.conf.urls.defaults import *
+    
+    urlpatterns = patterns('', 
+        ('^myview/$', 'mysite.myapp.views.myview')
+    )
+    
+can now be rewritten as::
+
+    from django.conf.urls.defaults import *
+    from mysite.myapp.views import myview
+    
+    urlpatterns = patterns('', 
+        ('^myview/$', myview)
+    )
+        
+One useful application of this can be seen when using decorators; this
+change allows you to apply decorators to views *in your
+URLconf*. Thus, you can make a generic view require login very
+easily::
+
+    from django.conf.urls.defaults import *
+    from django.contrib.auth.decorators import login_required
+    from django.views.generic.list_detail import object_list
+    from mysite.myapp.models import MyModel
+    
+    info = {
+        "queryset" : MyModel.objects.all(),
+    }
+    
+    urlpatterns = patterns('', 
+        ('^myview/$', login_required(object_list), info)
+    )
+
+Note that both syntaxes (strings and callables) are valid, and will continue to
+be valid for the foreseeable future.  
+
+The test framework
+------------------
+
+Django now includes a test framework so you can start transmuting fear into
+boredom (with apologies to Kent Beck). You can write tests based on doctest_
+or unittest_ and test your views with a simple test client.
+
+There is also new support for "fixtures" -- initial data, stored in any of the
+supported `serialization formats`_, that will be loaded into your database at the
+start of your tests. This makes testing with real data much easier.
+
+See `the testing documentation`_ for the full details.
+
+.. _doctest: http://docs.python.org/lib/module-doctest.html
+.. _unittest: http://docs.python.org/lib/module-unittest.html
+.. _the testing documentation: ../testing/
+.. _serialization formats: ../serialization/
+
+Improvements to the admin interface
+-----------------------------------
+
+A small change, but a very nice one: dedicated views for adding and
+updating users have been added to the admin interface, so you no
+longer need to worry about working with hashed passwords in the admin.
+
+Thanks
+======
+
+Since 0.95, a number of people have stepped forward and taken a major
+new role in Django's development. We'd like to thank these people for
+all their hard work:
+
+    * Russell Keith-Magee and Malcolm Tredinnick for their major code
+      contributions. This release wouldn't have been possible without them.
+      
+    * Our new release manager, James Bennett, for his work in getting out
+      0.95.1, 0.96, and (hopefully) future release.
+      
+    * Our ticket managers Chris Beaven (aka SmileyChris), Simon Greenhill,
+      Michael Radziej, and Gary Wilson. They agreed to take on the monumental
+      task of wrangling our tickets into nicely cataloged submission. Figuring
+      out what to work on is now about a million times easier; thanks again,
+      guys.
+            
+    * Everyone who submitted a bug report, patch or ticket comment. We can't
+      possibly thank everyone by name -- over 200 developers submitted patches
+      that went into 0.96 -- but everyone who's contributed to Django is listed
+      in AUTHORS_.
+      
+.. _AUTHORS: http://code.djangoproject.com/browser/django/trunk/AUTHORS
\ No newline at end of file

Modified: vendor/django/current/docs/request_response.txt
===================================================================
--- vendor/django/current/docs/request_response.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/request_response.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -117,14 +117,14 @@
     ``AuthenticationMiddleware`` activated. For more, see
     `Authentication in Web requests`_.
 
-    .. _Authentication in Web requests: http://www.djangoproject.com/documentation/authentication/#authentication-in-web-requests
+    .. _Authentication in Web requests: ../authentication/#authentication-in-web-requests
 
 ``session``
     A readable-and-writable, dictionary-like object that represents the current
     session. This is only available if your Django installation has session
     support activated. See the `session documentation`_ for full details.
 
-    .. _`session documentation`: http://www.djangoproject.com/documentation/sessions/
+    .. _`session documentation`: ../sessions/
 
 ``raw_post_data``
     The raw HTTP POST data. This is only useful for advanced processing. Use
@@ -149,7 +149,7 @@
    Returns the ``path``, plus an appended query string, if applicable.
 
    Example: ``"/music/bands/the_beatles/?print=true"``
-    
+
 ``is_secure()``
    Returns ``True`` if the request is secure; that is, if it was made with
    HTTPS.
@@ -341,9 +341,9 @@
 Methods
 -------
 
-``__init__(content='', mimetype=DEFAULT_MIME_TYPE)``
+``__init__(content='', mimetype=DEFAULT_CONTENT_TYPE)``
     Instantiates an ``HttpResponse`` object with the given page content (a
-    string) and MIME type. The ``DEFAULT_MIME_TYPE`` is ``'text/html'``.
+    string) and MIME type. The ``DEFAULT_CONTENT_TYPE`` is ``'text/html'``.
 
     ``content`` can be an iterator or a string. If it's an iterator, it should
     return strings, and those strings will be joined together to form the
@@ -380,10 +380,13 @@
 
     .. _`cookie Morsel`: http://www.python.org/doc/current/lib/morsel-objects.html
 
-``delete_cookie(key)``
+``delete_cookie(key, path='/', domain=None)``
     Deletes the cookie with the given key. Fails silently if the key doesn't
     exist.
 
+    Due to the way cookies work, ``path`` and ``domain`` should be the same
+    values you used in ``set_cookie()`` -- otherwise the cookie may not be deleted.
+
 ``content``
     Returns the content as a Python string, encoding it from a Unicode object
     if necessary. Note this is a property, not a method, so use ``r.content``
@@ -428,3 +431,118 @@
 
 ``HttpResponseServerError``
     Acts just like ``HttpResponse`` but uses a 500 status code.
+
+Returning errors
+================
+
+Returning HTTP error codes in Django is easy. We've already mentioned the
+``HttpResponseNotFound``, ``HttpResponseForbidden``,
+``HttpResponseServerError``, etc., subclasses; just return an instance of one
+of those subclasses instead of a normal ``HttpResponse`` in order to signify
+an error. For example::
+
+    def my_view(request):
+        # ...
+        if foo:
+            return HttpResponseNotFound('<h1>Page not found</h1>')
+        else:
+            return HttpResponse('<h1>Page was found</h1>')
+
+Because 404 errors are by far the most common HTTP error, there's an easier way
+to handle those errors.
+
+The Http404 exception
+---------------------
+
+When you return an error such as ``HttpResponseNotFound``, you're responsible
+for defining the HTML of the resulting error page::
+
+    return HttpResponseNotFound('<h1>Page not found</h1>')
+
+For convenience, and because it's a good idea to have a consistent 404 error page
+across your site, Django provides an ``Http404`` exception. If you raise
+``Http404`` at any point in a view function, Django will catch it and return the
+standard error page for your application, along with an HTTP error code 404.
+
+Example usage::
+
+    from django.http import Http404
+
+    def detail(request, poll_id):
+        try:
+            p = Poll.objects.get(pk=poll_id)
+        except Poll.DoesNotExist:
+            raise Http404
+        return render_to_response('polls/detail.html', {'poll': p})
+
+In order to use the ``Http404`` exception to its fullest, you should create a
+template that is displayed when a 404 error is raised. This template should be
+called ``404.html`` and located in the top level of your template tree.
+
+Customing error views
+---------------------
+
+The 404 (page not found) view
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When you raise an ``Http404`` exception, Django loads a special view devoted
+to handling 404 errors. By default, it's the view
+``django.views.defaults.page_not_found``, which loads and renders the template
+``404.html``.
+
+This means you need to define a ``404.html`` template in your root template
+directory. This template will be used for all 404 errors.
+
+This ``page_not_found`` view should suffice for 99% of Web applications, but if
+you want to override the 404 view, you can specify ``handler404`` in your
+URLconf, like so::
+
+    handler404 = 'mysite.views.my_custom_404_view'
+
+Behind the scenes, Django determines the 404 view by looking for ``handler404``.
+By default, URLconfs contain the following line::
+
+    from django.conf.urls.defaults import *
+
+That takes care of setting ``handler404`` in the current module. As you can see
+in ``django/conf/urls/defaults.py``, ``handler404`` is set to
+``'django.views.defaults.page_not_found'`` by default.
+
+Three things to note about 404 views:
+
+    * The 404 view is also called if Django doesn't find a match after checking
+      every regular expression in the URLconf.
+
+    * If you don't define your own 404 view -- and simply use the default,
+      which is recommended -- you still have one obligation: To create a
+      ``404.html`` template in the root of your template directory. The default
+      404 view will use that template for all 404 errors.
+
+    * If ``DEBUG`` is set to ``True`` (in your settings module) then your 404
+      view will never be used, and the traceback will be displayed instead.
+
+The 500 (server error) view
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Similarly, Django executes special-case behavior in the case of runtime errors
+in view code. If a view results in an exception, Django will, by default, call
+the view ``django.views.defaults.server_error``, which loads and renders the
+template ``500.html``.
+
+This means you need to define a ``500.html`` template in your root template
+directory. This template will be used for all server errors.
+
+This ``server_error`` view should suffice for 99% of Web applications, but if
+you want to override the view, you can specify ``handler500`` in your
+URLconf, like so::
+
+    handler500 = 'mysite.views.my_custom_error_view'
+
+Behind the scenes, Django determines the error view by looking for ``handler500``.
+By default, URLconfs contain the following line::
+
+    from django.conf.urls.defaults import *
+
+That takes care of setting ``handler500`` in the current module. As you can see
+in ``django/conf/urls/defaults.py``, ``handler500`` is set to
+``'django.views.defaults.server_error'`` by default.

Modified: vendor/django/current/docs/serialization.txt
===================================================================
--- vendor/django/current/docs/serialization.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/serialization.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,12 +3,12 @@
 ==========================
 
 .. note::
-    
+
     This API is currently under heavy development and may change --
     perhaps drastically -- in the future.
-    
+
     You have been warned.
-    
+
 Django's serialization framework provides a mechanism for "translating" Django
 objects into other formats. Usually these other formats will be text-based and
 used for sending Django objects over a wire, but it's possible for a
@@ -21,7 +21,7 @@
 
     from django.core import serializers
     data = serializers.serialize("xml", SomeModel.objects.all())
-    
+
 The arguments to the ``serialize`` function are the format to serialize the
 data to (see `Serialization formats`_) and a QuerySet_ to serialize.
 (Actually, the second argument can be any iterator that yields Django objects,
@@ -31,10 +31,11 @@
 
 You can also use a serializer object directly::
 
-    xml_serializer = serializers.get_serializer("xml")
+    XMLSerializer = serializers.get_serializer("xml")
+    xml_serializer = XMLSerializer()
     xml_serializer.serialize(queryset)
     data = xml_serializer.getvalue()
-    
+
 This is useful if you want to serialize data directly to a file-like object
 (which includes a HTTPResponse_)::
 
@@ -50,7 +51,7 @@
 
     for obj in serializers.deserialize("xml", data):
         do_something_with(obj)
-    
+
 As you can see, the ``deserialize`` function takes the same format argument as
 ``serialize``, a string or stream of data, and returns an iterator.
 
@@ -69,7 +70,7 @@
     for deserialized_object in serializers.deserialize("xml", data):
         if object_should_be_saved(deserialized_object):
             obj.save()
-            
+
 In other words, the usual use is to examine the deserialized objects to make
 sure that they are "appropriate" for saving before doing so.  Of course, if you trust your data source you could just save the object and move on.
 
@@ -89,13 +90,28 @@
                 bundled with Django).
 
     ``python``  Translates to and from "simple" Python objects (lists, dicts,
-                strings, etc.).  Not really all that useful on its own, but 
+                strings, etc.).  Not really all that useful on its own, but
                 used as a base for other serializers.
     ==========  ==============================================================
 
 .. _json: http://json.org/
 .. _simplejson: http://undefined.org/python/#simplejson
 
+Notes for specific serialization formats
+----------------------------------------
+
+json
+~~~~
+
+If you're using UTF-8 (or any other non-ASCII encoding) data with the JSON
+serializer, you must pass ``ensure_ascii=False`` as a parameter to the
+``serialize()`` call. Otherwise, the output won't be encoded correctly.
+
+For example::
+
+    json_serializer = serializers.get_serializer("json")
+    json_serializer.serialize(queryset, ensure_ascii=False, stream=response)
+
 Writing custom serializers
 ``````````````````````````
 

Modified: vendor/django/current/docs/sessions.txt
===================================================================
--- vendor/django/current/docs/sessions.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/sessions.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -27,7 +27,7 @@
 ``SessionMiddleware`` line from ``MIDDLEWARE_CLASSES`` and ``'django.contrib.sessions'``
 from your ``INSTALLED_APPS``. It'll save you a small bit of overhead.
 
-.. _middleware: http://www.djangoproject.com/documentation/middleware/
+.. _middleware: ../middleware/
 
 Using sessions in views
 =======================
@@ -141,7 +141,7 @@
 Here's a typical usage example::
 
     def login(request):
-        if request.POST:
+        if request.method == 'POST':
             if request.session.test_cookie_worked():
                 request.session.delete_test_cookie()
                 return HttpResponse("You're logged in.")
@@ -217,6 +217,23 @@
 her browser. Use this if you want people to have to log in every time they open
 a browser.
 
+Clearing the session table
+==========================
+
+Note that session data can accumulate in the ``django_session`` database table
+and Django does *not* provide automatic purging. Therefore, it's your job to
+purge expired sessions on a regular basis.
+
+To understand this problem, consider what happens when a user uses a session.
+When a user logs in, Django adds a row to the ``django_session`` database
+table. Django updates this row each time the session data changes. If the user
+logs out manually, Django deletes the row. But if the user does *not* log out,
+the row never gets deleted.
+
+Django provides a sample clean-up script in ``django/bin/daily_cleanup.py``.
+That script deletes any session in the session table whose ``expire_date`` is
+in the past -- but your application may have different requirements.
+
 Settings
 ========
 
@@ -245,6 +262,15 @@
 
 The name of the cookie to use for sessions. This can be whatever you want.
 
+SESSION_COOKIE_SECURE
+---------------------
+
+Default: ``False``
+
+Whether to use a secure cookie for the session cookie. If this is set to
+``True``, the cookie will be marked as "secure," which means browsers may
+ensure that the cookie is only sent under an HTTPS connection.
+
 SESSION_EXPIRE_AT_BROWSER_CLOSE
 -------------------------------
 
@@ -262,7 +288,7 @@
 (default), then the session data will only be saved if it has been modified --
 that is, if any of its dictionary values have been assigned or deleted.
 
-.. _Django settings: http://www.djangoproject.com/documentation/settings/
+.. _Django settings: ../settings/
 
 Technical details
 =================

Modified: vendor/django/current/docs/settings.txt
===================================================================
--- vendor/django/current/docs/settings.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/settings.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -59,7 +59,7 @@
 
     django-admin.py runserver --settings=mysite.settings
 
-.. _django-admin.py: http://www.djangoproject.com/documentation/django_admin/
+.. _django-admin.py: ../django_admin/
 
 On the server (mod_python)
 --------------------------
@@ -75,7 +75,7 @@
 
 Read the `Django mod_python documentation`_ for more information.
 
-.. _Django mod_python documentation: http://www.djangoproject.com/documentation/modpython/
+.. _Django mod_python documentation: ../modpython/
 
 Default settings
 ================
@@ -102,7 +102,7 @@
 
 For more, see the `diffsettings documentation`_.
 
-.. _diffsettings documentation: http://www.djangoproject.com/documentation/django_admin/#diffsettings
+.. _diffsettings documentation: ../django_admin/#diffsettings
 
 Using settings in Python code
 =============================
@@ -157,15 +157,18 @@
 
 Default: ``{}`` (Empty dictionary)
 
-A dictionary mapping ``"app_label.module_name"`` strings to functions that take
+A dictionary mapping ``"app_label.model_name"`` strings to functions that take
 a model object and return its URL. This is a way of overriding
 ``get_absolute_url()`` methods on a per-installation basis. Example::
 
     ABSOLUTE_URL_OVERRIDES = {
-        'blogs.blogs': lambda o: "/blogs/%s/" % o.slug,
-        'news.stories': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
+        'blogs.weblog': lambda o: "/blogs/%s/" % o.slug,
+        'news.story': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
     }
 
+Note that the model name used in this setting should be all lower-case, regardless
+of the case of the actual model class name.
+
 ADMIN_FOR
 ---------
 
@@ -197,6 +200,9 @@
 
     (('John', 'john at example.com'), ('Mary', 'mary at example.com'))
 
+Note that Django will e-mail *all* of these people whenever an error happens. See the
+section on `error reporting via e-mail`_ for more information.
+
 ALLOWED_INCLUDE_ROOTS
 ---------------------
 
@@ -236,10 +242,11 @@
 DATABASE_ENGINE
 ---------------
 
-Default: ``'postgresql'``
+Default: ``''`` (Empty string)
 
-Which database backend to use. Either ``'postgresql'``, ``'mysql'``,
-``'sqlite3'`` or ``'ado_mssql'``.
+Which database backend to use. Either ``'postgresql_psycopg2'``, 
+``'postgresql'``, ``'mysql'``,  ``'mysql_old'``, ``'sqlite3'`` or
+``'ado_mssql'``.
 
 DATABASE_HOST
 -------------
@@ -265,6 +272,14 @@
 The name of the database to use. For SQLite, it's the full path to the database
 file.
 
+DATABASE_OPTIONS
+----------------
+
+Default: ``{}`` (Empty dictionary)
+
+Extra parameters to use when connecting to the database. Consult backend
+module's document for available keywords.
+
 DATABASE_PASSWORD
 -----------------
 
@@ -298,7 +313,7 @@
 
 See also DATETIME_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT and MONTH_DAY_FORMAT.
 
-.. _allowed date format strings: http://www.djangoproject.com/documentation/templates/#now
+.. _allowed date format strings: ../templates/#now
 
 DATETIME_FORMAT
 ---------------
@@ -311,7 +326,7 @@
 
 See also DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT and MONTH_DAY_FORMAT.
 
-.. _allowed date format strings: http://www.djangoproject.com/documentation/templates/#now
+.. _allowed date format strings: ../templates/#now
 
 DEBUG
 -----
@@ -320,6 +335,16 @@
 
 A boolean that turns on/off debug mode.
 
+If you define custom settings, django/views/debug.py has a ``HIDDEN_SETTINGS``
+regular expression which will hide from the DEBUG view anything that contins
+``'SECRET``, ``PASSWORD``, or ``PROFANITIES'``. This allows untrusted users to
+be able to give backtraces without seeing sensitive (or offensive) settings.
+
+Still, note that there are always going to be sections of your debug output that
+are inapporpriate for public consumption. File paths, configuration options, and
+the like all give attackers extra information about your server. Never deploy a
+site with ``DEBUG`` turned on.
+
 DEFAULT_CHARSET
 ---------------
 
@@ -401,21 +426,23 @@
 or ``django.core.mail.mail_managers``. You'll probably want to include the
 trailing space.
 
-ENABLE_PSYCO
-------------
+FIXTURE_DIRS
+-------------
 
-Default: ``False``
+Default: ``()`` (Empty tuple)
 
-Whether to enable Psyco, which optimizes Python code. Requires Psyco_.
+List of locations of the fixture data files, in search order. Note that
+these paths should use Unix-style forward slashes, even on Windows. See 
+`Testing Django Applications`_.
 
-.. _Psyco: http://psyco.sourceforge.net/
+.. _Testing Django Applications: ../testing/
 
 IGNORABLE_404_ENDS
 ------------------
 
 Default: ``('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')``
 
-See also ``IGNORABLE_404_STARTS``.
+See also ``IGNORABLE_404_STARTS`` and ``Error reporting via e-mail``.
 
 IGNORABLE_404_STARTS
 --------------------
@@ -423,7 +450,8 @@
 Default: ``('/cgi-bin/', '/_vti_bin', '/_vti_inf')``
 
 A tuple of strings that specify beginnings of URLs that should be ignored by
-the 404 e-mailer. See ``SEND_BROKEN_LINK_EMAILS`` and ``IGNORABLE_404_ENDS``.
+the 404 e-mailer. See ``SEND_BROKEN_LINK_EMAILS``, ``IGNORABLE_404_ENDS`` and
+the section on `error reporting via e-mail`_.
 
 INSTALLED_APPS
 --------------
@@ -434,7 +462,7 @@
 installation. Each string should be a full Python path to a Python package that
 contains a Django application, as created by `django-admin.py startapp`_.
 
-.. _django-admin.py startapp: http://www.djangoproject.com/documentation/django_admin/#startapp-appname
+.. _django-admin.py startapp: ../django_admin/#startapp-appname
 
 INTERNAL_IPS
 ------------
@@ -465,7 +493,7 @@
 in standard language format. For example, U.S. English is ``"en-us"``. See the
 `internationalization docs`_.
 
-.. _internationalization docs: http://www.djangoproject.com/documentation/i18n/
+.. _internationalization docs: ../i18n/
 
 LANGUAGES
 ---------
@@ -473,25 +501,36 @@
 Default: A tuple of all available languages. Currently, this is::
 
     LANGUAGES = (
+        ('ar', _('Arabic')),
         ('bn', _('Bengali')),
         ('cs', _('Czech')),
         ('cy', _('Welsh')),
         ('da', _('Danish')),
         ('de', _('German')),
+        ('el', _('Greek')),
         ('en', _('English')),
         ('es', _('Spanish')),
+        ('es_AR', _('Argentinean Spanish')),
         ('fr', _('French')),
         ('gl', _('Galician')),
+        ('hu', _('Hungarian')),
+        ('he', _('Hebrew')),
         ('is', _('Icelandic')),
         ('it', _('Italian')),
+        ('ja', _('Japanese')),
+        ('nl', _('Dutch')),
         ('no', _('Norwegian')),
         ('pt-br', _('Brazilian')),
         ('ro', _('Romanian')),
         ('ru', _('Russian')),
         ('sk', _('Slovak')),
+        ('sl', _('Slovenian')),
         ('sr', _('Serbian')),
         ('sv', _('Swedish')),
+        ('ta', _('Tamil')),
+        ('uk', _('Ukrainian')),
         ('zh-cn', _('Simplified Chinese')),
+        ('zh-tw', _('Traditional Chinese')),
     )
 
 A tuple of two-tuples in the format (language code, language name). This
@@ -526,7 +565,7 @@
 MANAGERS
 --------
 
-Default: ``ADMINS`` (Whatever ``ADMINS`` is set to)
+Default: ``()`` (Empty tuple)
 
 A tuple in the same format as ``ADMINS`` that specifies who should get
 broken-link notifications when ``SEND_BROKEN_LINK_EMAILS=True``.
@@ -547,6 +586,11 @@
 URL that handles the media served from ``MEDIA_ROOT``.
 Example: ``"http://media.lawrence.com"``
 
+Note that this should have a trailing slash if it has a path component.
+
+Good: ``"http://www.example.com/static/"``
+Bad: ``"http://www.example.com/static"``
+
 MIDDLEWARE_CLASSES
 ------------------
 
@@ -585,6 +629,15 @@
 only used if ``CommonMiddleware`` is installed (see the `middleware docs`_).
 See also ``APPEND_SLASH``.
 
+PROFANITIES_LIST
+----------------
+
+A tuple of profanities, as strings, that will trigger a validation error when
+the ``hasNoProfanities`` validator is called.
+
+We don't list the default values here, because that would be profane. To see
+the default values, see the file ``django/conf/global_settings.py``.
+
 ROOT_URLCONF
 ------------
 
@@ -593,7 +646,7 @@
 A string representing the full Python import path to your root URLconf. For example:
 ``"mydjangoapps.urls"``. See `How Django processes a request`_.
 
-.. _How Django processes a request: http://www.djangoproject.com/documentation/url_dispatch/#how-django-processes-a-request
+.. _How Django processes a request: ../url_dispatch/#how-django-processes-a-request
 
 SECRET_KEY
 ----------
@@ -612,9 +665,20 @@
 Whether to send an e-mail to the ``MANAGERS`` each time somebody visits a
 Django-powered page that is 404ed with a non-empty referer (i.e., a broken
 link). This is only used if ``CommonMiddleware`` is installed (see the
-`middleware docs`_). See also ``IGNORABLE_404_STARTS`` and
-``IGNORABLE_404_ENDS``.
+`middleware docs`_). See also ``IGNORABLE_404_STARTS``,
+``IGNORABLE_404_ENDS`` and the section on `error reporting via e-mail`_
 
+SERIALIZATION_MODULES
+---------------------
+
+Default: Not defined.
+
+A dictionary of modules containing serializer definitions (provided as 
+strings), keyed by a string identifier for that serialization type. For 
+example, to define a YAML serializer, use::
+
+    SERIALIZATION_MODULES = { 'yaml' : 'path.to.yaml_serializer' }
+
 SERVER_EMAIL
 ------------
 
@@ -647,6 +711,16 @@
 The name of the cookie to use for sessions. This can be whatever you want.
 See the `session docs`_.
 
+SESSION_COOKIE_SECURE
+---------------------
+
+Default: ``False``
+
+Whether to use a secure cookie for the session cookie. If this is set to
+``True``, the cookie will be marked as "secure," which means browsers may
+ensure that the cookie is only sent under an HTTPS connection.
+See the `session docs`_.
+
 SESSION_EXPIRE_AT_BROWSER_CLOSE
 -------------------------------
 
@@ -673,7 +747,7 @@
 
 See the `site framework docs`_.
 
-.. _site framework docs: http://www.djangoproject.com/documentation/sites/
+.. _site framework docs: ../sites/
 
 TEMPLATE_CONTEXT_PROCESSORS
 ---------------------------
@@ -729,8 +803,28 @@
 Output, as a string, that the template system should use for invalid (e.g.
 misspelled) variables. See `How invalid variables are handled`_.
 
-.. _How invalid variables are handled: http://www.djangoproject.com/documentation/templates_python/#how-invalid-variables-are-handled
+.. _How invalid variables are handled: ../templates_python/#how-invalid-variables-are-handled
 
+TEST_RUNNER
+-----------
+
+Default: ``'django.test.simple.run_tests'``
+
+The name of the method to use for starting the test suite. See 
+`Testing Django Applications`_.
+
+.. _Testing Django Applications: ../testing/
+
+TEST_DATABASE_NAME
+------------------
+
+Default: ``None``
+
+The name of database to use when running the test suite. If a value of 
+``None`` is specified, the test database will use the name ``'test_' + settings.DATABASE_NAME``. See `Testing Django Applications`_.
+
+.. _Testing Django Applications: ../testing/
+
 TIME_FORMAT
 -----------
 
@@ -743,7 +837,7 @@
 See also DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT and
 MONTH_DAY_FORMAT.
 
-.. _allowed date format strings: http://www.djangoproject.com/documentation/templates/#now
+.. _allowed date format strings: ../templates/#now
 
 TIME_ZONE
 ---------
@@ -767,6 +861,21 @@
 environment variable, and it'll be up to you to ensure your processes are
 running in the correct environment.
 
+.. note::
+    Django cannot reliably use alternate time zones in a Windows environment.
+    If you're running Django on Windows, this variable must be set to match the
+    system timezone.
+
+URL_VALIDATOR_USER_AGENT
+------------------------
+
+Default: ``Django/<version> (http://www.djangoproject.com/)``
+
+The string to use as the ``User-Agent`` header when checking to see if URLs
+exist (see the ``verify_exists`` option on URLField_).
+
+.. _URLField: ../model_api/#urlfield
+
 USE_ETAGS
 ---------
 
@@ -803,11 +912,11 @@
 See `allowed date format strings`_. See also DATE_FORMAT, DATETIME_FORMAT,
 TIME_FORMAT and MONTH_DAY_FORMAT.
 
-.. _cache docs: http://www.djangoproject.com/documentation/cache/
-.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
-.. _session docs: http://www.djangoproject.com/documentation/sessions/
-.. _See available choices: http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
-.. _template documentation: http://www.djangoproject.com/documentation/templates_python/
+.. _cache docs: ../cache/
+.. _middleware docs: ../middleware/
+.. _session docs: ../sessions/
+.. _See available choices: http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
+.. _template documentation: ../templates_python/
 
 Creating your own settings
 ==========================
@@ -902,3 +1011,36 @@
 
 It boils down to this: Use exactly one of either ``configure()`` or
 ``DJANGO_SETTINGS_MODULE``. Not both, and not neither.
+
+Error reporting via e-mail
+==========================
+
+Server errors
+-------------
+
+When ``DEBUG`` is ``False``, Django will e-mail the users listed in the
+``ADMIN`` setting whenever your code raises an unhandled exception and results
+in an internal server error (HTTP status code 500). This gives the
+administrators immediate notification of any errors.
+
+To disable this behavior, just remove all entries from the ``ADMINS`` setting.
+
+404 errors
+----------
+
+When ``DEBUG`` is ``False`` and your ``MIDDLEWARE_CLASSES`` setting includes
+``CommonMiddleware``, Django will e-mail the users listed in the ``MANAGERS``
+setting whenever your code raises a 404 and the request has a referer.
+(It doesn't bother to e-mail for 404s that don't have a referer.)
+
+You can tell Django to stop reporting particular 404s by tweaking the
+``IGNORABLE_404_ENDS`` and ``IGNORABLE_404_STARTS`` settings. Both should be a
+tuple of strings. For example::
+
+    IGNORABLE_404_ENDS = ('.php', '.cgi')
+    IGNORABLE_404_STARTS = ('/phpmyadmin/')
+
+In this example, a 404 to any URL ending with ``.php`` or ``.cgi`` will *not*
+be reported. Neither will any URL starting with ``/phpmyadmin/``.
+
+To disable this behavior, just remove all entries from the ``MANAGERS`` setting.

Added: vendor/django/current/docs/sitemaps.txt
===================================================================
--- vendor/django/current/docs/sitemaps.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/sitemaps.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,321 @@
+=====================
+The sitemap framework
+=====================
+
+**New in Django development version**.
+
+Django comes with a high-level sitemap-generating framework that makes
+creating sitemap_ XML files easy.
+
+.. _sitemap: http://www.sitemaps.org/
+
+Overview
+========
+
+A sitemap is an XML file on your Web site that tells search-engine indexers how
+frequently your pages change and how "important" certain pages are in relation
+to other pages on your site. This information helps search engines index your
+site.
+
+The Django sitemap framework automates the creation of this XML file by letting
+you express this information in Python code.
+
+It works much like Django's `syndication framework`_. To create a sitemap, just
+write a ``Sitemap`` class and point to it in your URLconf_.
+
+.. _syndication framework: ../syndication/
+.. _URLconf: ../url_dispatch/
+
+Installation
+============
+
+To install the sitemap app, follow these steps:
+
+    1. Add ``'django.contrib.sitemaps'`` to your INSTALLED_APPS_ setting.
+    2. Make sure ``'django.template.loaders.app_directories.load_template_source'``
+       is in your TEMPLATE_LOADERS_ setting. It's in there by default, so
+       you'll only need to change this if you've changed that setting.
+    3. Make sure you've installed the `sites framework`_.
+
+(Note: The sitemap application doesn't install any database tables. The only
+reason it needs to go into ``INSTALLED_APPS`` is so that the
+``load_template_source`` template loader can find the default templates.)
+
+.. _INSTALLED_APPS: ../settings/#installed-apps
+.. _TEMPLATE_LOADERS: ../settings/#template-loaders
+.. _sites framework: ../sites/
+
+Initialization
+==============
+
+To activate sitemap generation on your Django site, add this line to your
+URLconf_:
+
+    (r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
+
+This tells Django to build a sitemap when a client accesses ``/sitemap.xml``.
+
+The name of the sitemap file is not important, but the location is. Search
+engines will only index links in your sitemap for the current URL level and
+below. For instance, if ``sitemap.xml`` lives in your root directory, it may
+reference any URL in your site. However, if your sitemap lives at
+``/content/sitemap.xml``, it may only reference URLs that begin with
+``/content/``.
+
+The sitemap view takes an extra, required argument: ``{'sitemaps': sitemaps}``.
+``sitemaps`` should be a dictionary that maps a short section label (e.g.,
+``blog`` or ``news``) to its ``Sitemap`` class (e.g., ``BlogSitemap`` or
+``NewsSitemap``). It may also map to an *instance* of a ``Sitemap`` class
+(e.g., ``BlogSitemap(some_var)``).
+
+.. _URLconf: ../url_dispatch/
+
+Sitemap classes
+===============
+
+A ``Sitemap`` class is a simple Python class that represents a "section" of
+entries in your sitemap. For example, one ``Sitemap`` class could represent all
+the entries of your weblog, while another could represent all of the events in
+your events calendar.
+
+In the simplest case, all these sections get lumped together into one
+``sitemap.xml``, but it's also possible to use the framework to generate a
+sitemap index that references individual sitemap files, one per section. (See
+`Creating a sitemap index`_ below.)
+
+``Sitemap`` classes must subclass ``django.contrib.sitemaps.Sitemap``. They can
+live anywhere in your codebase.
+
+A simple example
+================
+
+Let's assume you have a blog system, with an ``Entry`` model, and you want your
+sitemap to include all the links to your individual blog entries. Here's how
+your sitemap class might look::
+
+    from django.contrib.sitemaps import Sitemap
+    from mysite.blog.models import Entry
+
+    class BlogSitemap(Sitemap):
+        changefreq = "never"
+        priority = 0.5
+
+        def items(self):
+            return Entry.objects.filter(is_draft=False)
+
+        def lastmod(self, obj):
+            return obj.pub_date
+
+Note:
+
+    * ``changefreq`` and ``priority`` are class attributes corresponding to
+      ``<changefreq>`` and ``<priority>`` elements, respectively. They can be
+      made callable as functions, as ``lastmod`` was in the example.
+    * ``items()`` is simply a method that returns a list of objects. The objects
+      returned will get passed to any callable methods corresponding to a
+      sitemap property (``location``, ``lastmod``, ``changefreq``, and
+      ``priority``).
+    * ``lastmod`` should return a Python ``datetime`` object.
+    * There is no ``location`` method in this example, but you can provide it
+      in order to specify the URL for your object. By default, ``location()``
+      calls ``get_absolute_url()`` on each object and returns the result.
+
+Sitemap class reference
+=======================
+
+A ``Sitemap`` class can define the following methods/attributes:
+
+``items``
+---------
+
+**Required.** A method that returns a list of objects. The framework doesn't
+care what *type* of objects they are; all that matters is that these objects
+get passed to the ``location()``, ``lastmod()``, ``changefreq()`` and
+``priority()`` methods.
+
+``location``
+------------
+
+**Optional.** Either a method or attribute.
+
+If it's a method, it should return the absolute URL for a given object as
+returned by ``items()``.
+
+If it's an attribute, its value should be a string representing an absolute URL
+to use for *every* object returned by ``items()``.
+
+In both cases, "absolute URL" means a URL that doesn't include the protocol or
+domain. Examples:
+
+    * Good: ``'/foo/bar/'``
+    * Bad: ``'example.com/foo/bar/'``
+    * Bad: ``'http://example.com/foo/bar/'``
+
+If ``location`` isn't provided, the framework will call the
+``get_absolute_url()`` method on each object as returned by ``items()``.
+
+``lastmod``
+-----------
+
+**Optional.** Either a method or attribute.
+
+If it's a method, it should take one argument -- an object as returned by
+``items()`` -- and return that object's last-modified date/time, as a Python
+``datetime.datetime`` object.
+
+If it's an attribute, its value should be a Python ``datetime.datetime`` object
+representing the last-modified date/time for *every* object returned by
+``items()``.
+
+``changefreq``
+--------------
+
+**Optional.** Either a method or attribute.
+
+If it's a method, it should take one argument -- an object as returned by
+``items()`` -- and return that object's change frequency, as a Python string.
+
+If it's an attribute, its value should be a string representing the change
+frequency of *every* object returned by ``items()``.
+
+Possible values for ``changefreq``, whether you use a method or attribute, are:
+
+    * ``'always'``
+    * ``'hourly'``
+    * ``'daily'``
+    * ``'weekly'``
+    * ``'monthly'``
+    * ``'yearly'``
+    * ``'never'``
+
+``priority``
+------------
+
+**Optional.** Either a method or attribute.
+
+If it's a method, it should take one argument -- an object as returned by
+``items()`` -- and return that object's priority, as either a string or float.
+
+If it's an attribute, its value should be either a string or float representing
+the priority of *every* object returned by ``items()``.
+
+Example values for ``priority``: ``0.4``, ``1.0``. The default priority of a
+page is ``0.5``. See the `sitemaps.org documentation`_ for more.
+
+.. _sitemaps.org documentation: http://www.sitemaps.org/protocol.html#prioritydef
+
+Shortcuts
+=========
+
+The sitemap framework provides a couple convenience classes for common cases:
+
+``FlatPageSitemap``
+-------------------
+
+The ``django.contrib.sitemaps.FlatPageSitemap`` class looks at all flatpages_
+defined for the current ``SITE_ID`` (see the `sites documentation`_) and
+creates an entry in the sitemap. These entries include only the ``location``
+attribute -- not ``lastmod``, ``changefreq`` or ``priority``.
+
+.. _flatpages: ../flatpages/
+.. _sites documentation: ../sites/
+
+``GenericSitemap``
+------------------
+
+The ``GenericSitemap`` class works with any `generic views`_ you already have.
+To use it, create an instance, passing in the same ``info_dict`` you pass to
+the generic views. The only requirement is that the dictionary have a
+``queryset`` entry. It may also have a ``date_field`` entry that specifies a
+date field for objects retrieved from the ``queryset``. This will be used for
+the ``lastmod`` attribute in the generated sitemap. You may also pass
+``priority`` and ``changefreq`` keyword arguments to the ``GenericSitemap``
+constructor to specify these attributes for all URLs.
+
+.. _generic views: ../generic_views/
+
+Example
+-------
+
+Here's an example of a URLconf_ using both::
+
+    from django.conf.urls.defaults import *
+    from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
+    from mysite.blog.models import Entry
+
+    info_dict = {
+        'queryset': Entry.objects.all(),
+        'date_field': 'pub_date',
+    }
+
+    sitemaps = {
+        'flatpages': FlatPageSitemap,
+        'blog': GenericSitemap(info_dict, priority=0.6),
+    }
+
+    urlpatterns = patterns('',
+        # some generic view using info_dict
+        # ...
+
+        # the sitemap
+        (r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
+    )
+
+.. _URLconf: ../url_dispatch/
+
+Creating a sitemap index
+========================
+
+The sitemap framework also has the ability to create a sitemap index that
+references individual sitemap files, one per each section defined in your
+``sitemaps`` dictionary. The only differences in usage are:
+
+    * You use two views in your URLconf: ``django.contrib.sitemaps.views.index``
+      and ``django.contrib.sitemaps.views.sitemap``.
+    * The ``django.contrib.sitemaps.views.sitemap`` view should take a
+      ``section`` keyword argument.
+
+Here is what the relevant URLconf lines would look like for the example above::
+
+    (r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps})
+    (r'^sitemap-(?P<section>.+).xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
+
+This will automatically generate a ``sitemap.xml`` file that references
+both ``sitemap-flatpages.xml`` and ``sitemap-blog.xml``. The ``Sitemap``
+classes and the ``sitemaps`` dict don't change at all.
+
+Pinging Google
+==============
+
+You may want to "ping" Google when your sitemap changes, to let it know to
+reindex your site. The framework provides a function to do just that:
+``django.contrib.sitemaps.ping_google()``.
+
+``ping_google()`` takes an optional argument, ``sitemap_url``, which should be
+the absolute URL of your site's sitemap (e.g., ``'/sitemap.xml'``). If this
+argument isn't provided, ``ping_google()`` will attempt to figure out your
+sitemap by performing a reverse looking in your URLconf.
+
+``ping_google()`` raises the exception
+``django.contrib.sitemaps.SitemapNotFound`` if it cannot determine your sitemap
+URL.
+
+One useful way to call ``ping_google()`` is from a model's ``save()`` method::
+
+    from django.contrib.sitemaps import ping_google
+
+    class Entry(models.Model):
+        # ...
+        def save(self):
+            super(Entry, self).save()
+            try:
+                ping_google()
+            except Exception:
+                # Bare 'except' because we could get a variety
+                # of HTTP-related exceptions.
+                pass
+
+A more efficient solution, however, would be to call ``ping_google()`` from a
+cron script, or some other scheduled task. The function makes an HTTP request
+to Google's servers, so you may not want to introduce that network overhead
+each time you call ``save()``.

Modified: vendor/django/current/docs/sites.txt
===================================================================
--- vendor/django/current/docs/sites.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/sites.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -266,8 +266,19 @@
 If you attempt to use ``CurrentSiteManager`` and pass a field name that doesn't
 exist, Django will raise a ``ValueError``.
 
-.. _manager: http://www.djangoproject.com/documentation/model_api/#managers
+Finally, note that you'll probably want to keep a normal (non-site-specific)
+``Manager`` on your model, even if you use ``CurrentSiteManager``. As explained
+in the `manager documentation`_, if you define a manager manually, then Django
+won't create the automatic ``objects = models.Manager()`` manager for you.
+Also, note that certain parts of Django -- namely, the Django admin site and
+generic views -- use whichever manager is defined *first* in the model, so if
+you want your admin site to have access to all objects (not just site-specific
+ones), put ``objects = models.Manager()`` in your model, before you define
+``CurrentSiteManager``.
 
+.. _manager: ../model_api/#managers
+.. _manager documentation: ../model_api/#managers
+
 How Django uses the sites framework
 ===================================
 
@@ -305,7 +316,7 @@
     * The shortcut view (``django.views.defaults.shortcut``) uses the domain of
       the current ``Site`` object when calculating an object's URL.
 
-.. _redirects framework: http://www.djangoproject.com/documentation/redirects/
-.. _flatpages framework: http://www.djangoproject.com/documentation/flatpages/
-.. _syndication framework: http://www.djangoproject.com/documentation/syndication/
-.. _authentication framework: http://www.djangoproject.com/documentation/authentication/
+.. _redirects framework: ../redirects/
+.. _flatpages framework: ../flatpages/
+.. _syndication framework: ../syndication/
+.. _authentication framework: ../authentication/

Modified: vendor/django/current/docs/static_files.txt
===================================================================
--- vendor/django/current/docs/static_files.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/static_files.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -24,14 +24,14 @@
 For information on serving static files in an Apache production environment,
 see the `Django mod_python documentation`_.
 
-.. _Django mod_python documentation: http://www.djangoproject.com/documentation/modpython/#serving-media-files
+.. _Django mod_python documentation: ../modpython/#serving-media-files
 
 How to do it
 ============
 
 Just put this in your URLconf_::
 
-    (r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}),
+    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}),
 
 ...where ``site_media`` is the URL where your media will be rooted, and
 ``/path/to/media`` is the filesystem root for your media.
@@ -49,7 +49,7 @@
     * The file ``/path/bar.jpg`` will not be accessible, because it doesn't
       fall under the document root.
 
-.. _URLconf: http://www.djangoproject.com/documentation/url_dispatch/
+.. _URLconf: ../url_dispatch/
 
 Directory listings
 ==================
@@ -60,7 +60,7 @@
 
 Example::
 
-    (r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': '/path/to/media', 'show_indexes': True}),
+    (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media', 'show_indexes': True}),
 
 You can customize the index view by creating a template called
 ``static/directory_index``. That template gets two objects in its context:
@@ -122,4 +122,4 @@
 Of course, the catch here is that you'll have to remember to set ``DEBUG=False``
 in your production settings file. But you should be doing that anyway.
 
-.. _DEBUG setting: http://www.djangoproject.com/documentation/settings/#debug
+.. _DEBUG setting: ../settings/#debug

Modified: vendor/django/current/docs/syndication_feeds.txt
===================================================================
--- vendor/django/current/docs/syndication_feeds.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/syndication_feeds.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -26,7 +26,7 @@
 
 To create a feed, just write a ``Feed`` class and point to it in your URLconf_.
 
-.. _URLconf: http://www.djangoproject.com/documentation/url_dispatch/
+.. _URLconf: ../url_dispatch/
 
 Initialization
 --------------
@@ -72,8 +72,8 @@
 
 Once that's set up, you just need to define the ``Feed`` classes themselves.
 
-.. _URLconf: http://www.djangoproject.com/documentation/url_dispatch/
-.. _settings file: http://www.djangoproject.com/documentation/settings/
+.. _URLconf: ../url_dispatch/
+.. _settings file: ../settings/
 
 Feed classes
 ------------
@@ -95,7 +95,7 @@
     from django.contrib.syndication.feeds import Feed
     from chicagocrime.models import NewsItem
 
-    class SiteNewsFeed(Feed):
+    class LatestEntries(Feed):
         title = "Chicagocrime.org site news"
         link = "/sitenews/"
         description = "Updates on changes and additions to chicagocrime.org."
@@ -120,8 +120,8 @@
 put into those elements.
 
     * To specify the contents of ``<title>`` and ``<description>``, create
-      `Django templates`_ called ``feeds/sitenews_title.html`` and
-      ``feeds/sitenews_description.html``, where ``sitenews`` is the ``slug``
+      `Django templates`_ called ``feeds/latest_title.html`` and
+      ``feeds/latest_description.html``, where ``latest`` is the ``slug``
       specified in the URLconf for the given feed. Note the ``.html`` extension
       is required. The RSS system renders that template for each item, passing
       it two template context variables:
@@ -145,9 +145,19 @@
       Both ``get_absolute_url()`` and ``item_link()`` should return the item's
       URL as a normal Python string.
 
+    * For the LatestEntries example above, we could have very simple feed templates:
+
+          * latest_title.html::
+
+             {{ obj.title }}
+
+          * latest_description.html::
+
+             {{ obj.description }}
+
 .. _chicagocrime.org: http://www.chicagocrime.org/
-.. _object-relational mapper: http://www.djangoproject.com/documentation/db_api/
-.. _Django templates: http://www.djangoproject.com/documentation/templates/
+.. _object-relational mapper: ../db_api/
+.. _Django templates: ../templates/
 
 A complex example
 -----------------
@@ -267,7 +277,7 @@
 appropriate ``<language>`` tag (RSS 2.0) or ``xml:lang`` attribute (Atom). This
 comes directly from your `LANGUAGE_CODE setting`_.
 
-.. _LANGUAGE_CODE setting: http://www.djangoproject.com/documentation/settings/#language-code
+.. _LANGUAGE_CODE setting: ../settings/#language-code
 
 URLs
 ----
@@ -282,7 +292,7 @@
 location. The syndication framework populates this automatically, using the
 domain of the current site according to the SITE_ID setting.
 
-.. _SITE_ID setting: http://www.djangoproject.com/documentation/settings/#site-id
+.. _SITE_ID setting: ../settings/#site-id
 
 Publishing Atom and RSS feeds in tandem
 ---------------------------------------
@@ -468,6 +478,22 @@
 
         categories = ("python", "django") # Hard-coded list of categories.
 
+        # COPYRIGHT NOTICE -- One of the following three is optional. The
+        # framework looks for them in this order.
+
+        def copyright(self, obj):
+            """
+            Takes the object returned by get_object() and returns the feed's
+            copyright notice as a normal Python string.
+            """
+
+        def copyright(self):
+            """
+            Returns the feed's copyright notice as a normal Python string.
+            """
+
+        copyright = 'Copyright (c) 2007, Sally Smith' # Hard-coded copyright notice.
+
         # ITEMS -- One of the following three is required. The framework looks
         # for them in this order.
 
@@ -649,7 +675,24 @@
 
         item_categories = ("python", "django") # Hard-coded categories.
 
+        # ITEM COPYRIGHT NOTICE (only applicable to Atom feeds) -- One of the
+        # following three is optional. The framework looks for them in this
+        # order.
 
+        def item_copyright(self, obj):
+            """
+            Takes an item, as returned by items(), and returns the item's
+            copyright notice as a normal Python string.
+            """
+
+        def item_copyright(self):
+            """
+            Returns the copyright notice for every item in the feed.
+            """
+
+        item_copyright = 'Copyright (c) 2007, Sally Smith' # Hard-coded copyright notice.
+
+
 The low-level framework
 =======================
 
@@ -707,7 +750,7 @@
     ...     title=u"My Weblog",
     ...     link=u"http://www.example.com/",
     ...     description=u"In which I write about what I ate today.",
-    ...     language=u"en"),
+    ...     language=u"en")
     >>> f.add_item(title=u"Hot dog today",
     ...     link=u"http://www.example.com/entries/1/",
     ...     description=u"<p>Today I had a Vienna Beef hot dog. It was pink, plump and perfect.</p>")

Modified: vendor/django/current/docs/templates.txt
===================================================================
--- vendor/django/current/docs/templates.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/templates.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -109,6 +109,19 @@
 below describes all the built-in tags. You can create your own tags, if you
 know how to write Python code.
 
+Comments
+========
+
+To comment-out part of a template, use the comment syntax: ``{# #}``.
+
+For example, this template would render as ``'hello'``::
+
+    {# greeting #}hello
+
+A comment can contain any template code, invalid or not. For example::
+
+    {# {% if foo %}bar{% else %} #}
+
 Template inheritance
 ====================
 
@@ -141,6 +154,7 @@
             {% block content %}{% endblock %}
         </div>
     </body>
+    </html>
 
 This template, which we'll call ``base.html``, defines a simple HTML skeleton
 document that you might use for a simple two-column page. It's the job of
@@ -196,6 +210,7 @@
             <p>This is my second entry.</p>
         </div>
     </body>
+    </html>
 
 Note that since the child template didn't define the ``sidebar`` block, the
 value from the parent template is used instead. Content within a ``{% block %}``
@@ -236,6 +251,16 @@
       if you want to add to the contents of a parent block instead of
       completely overriding it.
 
+    * For extra readability, you can optionally give a *name* to your
+      ``{% endblock %}`` tag. For example::
+
+          {% block content %}
+          ...
+          {% endblock content %}
+
+      In larger templates, this technique helps you see which ``{% block %}``
+      tags are being closed.
+
 Finally, note that you can't define multiple ``{% block %}`` tags with the same
 name in the same template. This limitation exists because a block tag works in
 "both" directions. That is, a block tag doesn't just provide a hole to fill --
@@ -363,7 +388,7 @@
 
 Signal that this template extends a parent template.
 
-This tag can be used in two ways: 
+This tag can be used in two ways:
 
    * ``{% extends "base.html" %}`` (with quotes) uses the literal value
      ``"base.html"`` as the name of the parent template to extend.
@@ -456,7 +481,7 @@
 In the above, if ``athlete_list`` is not empty, the number of athletes will be
 displayed by the ``{{ athlete_list|length }}`` variable.
 
-As you can see, the ``if`` tag can take an option ``{% else %}`` clause that
+As you can see, the ``if`` tag can take an optional ``{% else %}`` clause that
 will be displayed if the test fails.
 
 ``if`` tags may use ``and``, ``or`` or ``not`` to test a number of variables or
@@ -508,17 +533,30 @@
 
 Check if a value has changed from the last iteration of a loop.
 
-The ``ifchanged`` block tag is used within a loop. It checks its own rendered
-contents against its previous state and only displays its content if the value
-has changed::
+The 'ifchanged' block tag is used within a loop. It has two possible uses.
 
-    <h1>Archive for {{ year }}</h1>
+1. Checks its own rendered contents against its previous state and only
+   displays the content if it has changed. For example, this displays a list of
+   days, only displaying the month if it changes::
 
-    {% for day in days %}
-    {% ifchanged %}<h3>{{ day|date:"F" }}</h3>{% endifchanged %}
-    <a href="{{ day|date:"M/d"|lower }}/">{{ day|date:"j" }}</a>
-    {% endfor %}
+        <h1>Archive for {{ year }}</h1>
 
+        {% for date in days %}
+            {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
+            <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
+        {% endfor %}
+
+2. If given a variable, check whether that variable has changed. For
+   example, the following shows the date every time it changes, but
+   only shows the hour if both the hour and the date has changed::
+
+        {% for date in days %}
+            {% ifchanged date.date %} {{ date.date }} {% endifchanged %}
+            {% ifchanged date.hour date.date %}
+                {{ date.hour }}
+            {% endifchanged %}
+        {% endfor %}
+
 ifequal
 ~~~~~~~
 
@@ -538,6 +576,11 @@
         ...
     {% endifequal %}
 
+It is only possible to compare an argument to template variables or strings.
+You cannot check for equality with Python objects such as ``True`` or
+``False``.  If you need to test if something is true or false, use the ``if``
+tag instead.
+
 ifnotequal
 ~~~~~~~~~~
 
@@ -600,6 +643,7 @@
                       output, because this includes periods
                       to match Associated Press style.)
     A                 ``'AM'`` or ``'PM'``.                     ``'AM'``
+    b                 Month, textual, 3 letters, lowercase.     ``'jan'``
     B                 Not implemented.
     d                 Day of the month, 2 digits with           ``'01'`` to ``'31'``
                       leading zeros.
@@ -757,7 +801,7 @@
 
 See also: ``{% include %}``.
 
-.. _ALLOWED_INCLUDE_ROOTS: http://www.djangoproject.com/documentation/settings/#allowed-include-roots
+.. _ALLOWED_INCLUDE_ROOTS: ../settings/#allowed-include-roots
 
 templatetag
 ~~~~~~~~~~~
@@ -778,8 +822,42 @@
     ``closevariable``   ``}}``
     ``openbrace``       ``{``
     ``closebrace``      ``}``
+    ``opencomment``     ``{#``
+    ``closecomment``    ``#}``
     ==================  =======
 
+url
+~~~
+
+**Note that the syntax for this tag may change in the future, as we make it more robust.**
+
+Returns an absolute URL (i.e., a URL without the domain name) matching a given
+view function and optional parameters. This is a way to output links without
+violating the DRY principle by having to hard-code URLs in your templates::
+
+    {% url path.to.some_view arg1,arg2,name1=value1 %}
+
+The first argument is a path to a view function in the format
+``package.package.module.function``. Additional arguments are optional and
+should be comma-separated values that will be used as positional and keyword
+arguments in the URL. All arguments required by the URLconf should be present.
+
+For example, suppose you have a view, ``app_name.client``, whose URLconf takes
+a client ID. The URLconf line might look like this::
+
+    ('^client/(\d+)/$', 'app_name.client')
+
+If this app's URLconf is included into the project's URLconf under a path
+such as this::
+
+    ('^clients/', include('project_name.app_name.urls'))
+
+...then, in a template, you can create a link to this view like this::
+
+    {% url app_name.client client.id %}
+
+The template tag will output the string ``/clients/client/123/``.
+
 widthratio
 ~~~~~~~~~~
 
@@ -885,13 +963,29 @@
 floatformat
 ~~~~~~~~~~~
 
-Rounds a floating-point number to one decimal place -- but only if there's a
-decimal part to be displayed. For example:
+When used without an argument, rounds a floating-point number to one decimal
+place -- but only if there's a decimal part to be displayed. For example:
 
     * ``36.123`` gets converted to ``36.1``
     * ``36.15`` gets converted to ``36.2``
     * ``36`` gets converted to ``36``
 
+If used with a numeric integer argument, ``floatformat`` rounds a number to that 
+many decimal places.  For example:
+
+    * ``36.1234`` with floatformat:3 gets converted to ``36.123``
+    * ``36`` with floatformat:4 gets converted to ``36.0000``
+
+If the argument passed to ``floatformat`` is negative, it will round a number to
+that many decimal places -- but only if there's a decimal part to be displayed.
+For example:
+
+    * ``36.1234`` with floatformat:-3 gets converted to ``36.123``
+    * ``36`` with floatformat:-4 gets converted to ``36``
+
+Using ``floatformat`` with no argument is equivalent to using ``floatformat`` with 
+an argument of ``-1``.
+
 get_digit
 ~~~~~~~~~
 
@@ -961,13 +1055,13 @@
 pluralize
 ~~~~~~~~~
 
-Returns a plural suffix if the value is not 1. By default, this suffix is ``'s'``. 
+Returns a plural suffix if the value is not 1. By default, this suffix is ``'s'``.
 
 Example::
 
     You have {{ num_messages }} message{{ num_messages|pluralize }}.
 
-For words that require a suffix other than ``'s'``, you can provide an alternate 
+For words that require a suffix other than ``'s'``, you can provide an alternate
 suffix as a parameter to the filter.
 
 Example::
@@ -1049,7 +1143,7 @@
 Takes an optional argument that is a variable containing the date to use as
 the comparison point (without the argument, the comparison point is *now*).
 For example, if ``blog_date`` is a date instance representing midnight on 1
-June 2006, and ``comment_date`` is a date instanace for 08:00 on 1 June 2006,
+June 2006, and ``comment_date`` is a date instance for 08:00 on 1 June 2006,
 then ``{{ comment_date|timesince:blog_date }}`` would return "8 hours".
 
 timeuntil
@@ -1076,6 +1170,16 @@
 
 **Argument:** Number of words to truncate after
 
+truncatewords_html
+~~~~~~~~~~~~~~~~~~
+
+Similar to ``truncatewords``, except that it is aware of HTML tags. Any tags
+that are opened in the string and not closed before the truncation point, are
+closed immediately after the truncation.
+
+This is less efficient than ``truncatewords``, so should only be used when it
+is being passed HTML text.
+
 unordered_list
 ~~~~~~~~~~~~~~
 
@@ -1161,7 +1265,7 @@
 A set of Django template filters useful for adding a "human touch" to data. See
 the `humanize documentation`_.
 
-.. _humanize documentation: http://www.djangoproject.com/documentation/add_ons/#humanize
+.. _humanize documentation: ../add_ons/#humanize
 
 django.contrib.markup
 ---------------------

Modified: vendor/django/current/docs/templates_python.txt
===================================================================
--- vendor/django/current/docs/templates_python.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/templates_python.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -11,7 +11,7 @@
 application -- i.e., without the rest of the framework -- make sure to read
 the `configuration`_ section later in this document.
 
-.. _`The Django template language: For template authors`: http://www.djangoproject.com/documentation/templates/
+.. _`The Django template language: For template authors`: ../templates/
 
 Basics
 ======
@@ -198,10 +198,35 @@
 How invalid variables are handled
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-If a variable doesn't exist, the template system inserts the value of the
-``TEMPLATE_STRING_IF_INVALID`` setting, which is set to ``''`` (the empty
-string) by default.
+Generally, if a variable doesn't exist, the template system inserts the
+value of the ``TEMPLATE_STRING_IF_INVALID`` setting, which is set to ``''``
+(the empty string) by default.
 
+Filters that are applied to an invalid variable will only be applied if
+``TEMPLATE_STRING_IF_INVALID`` is set to ``''`` (the empty string). If
+``TEMPLATE_STRING_IF_INVALID`` is set to any other value, variable
+filters will be ignored.
+
+This behavior is slightly different for the ``if``, ``for`` and ``regroup``
+template tags. If an invalid variable is provided to one of these template
+tags, the variable will be interpreted as ``None``. Filters are always
+applied to invalid variables within these template tags.
+
+.. admonition:: For debug purposes only!
+
+    While ``TEMPLATE_STRING_IF_INVALID`` can be a useful debugging tool, 
+    it is a bad idea to turn it on as a 'development default'. 
+    
+    Many templates, including those in the Admin site, rely upon the 
+    silence of the template system when a non-existent variable is 
+    encountered. If you assign a value other than ``''`` to
+    ``TEMPLATE_STRING_IF_INVALID``, you will experience rendering 
+    problems with these templates and sites.
+    
+    Generally, ``TEMPLATE_STRING_IF_INVALID`` should only be enabled 
+    in order to debug a specific template problem, then cleared 
+    once debugging is complete.
+        
 Playing with Context objects
 ----------------------------
 
@@ -259,9 +284,10 @@
 The second difference is that it automatically populates the context with a few
 variables, according to your `TEMPLATE_CONTEXT_PROCESSORS setting`_.
 
-The ``TEMPLATE_CONTEXT_PROCESSORS`` setting is a tuple of callables that take a
-request object as their argument and return a dictionary of items to be merged
-into the context. By default, ``TEMPLATE_CONTEXT_PROCESSORS`` is set to::
+The ``TEMPLATE_CONTEXT_PROCESSORS`` setting is a tuple of callables -- called
+**context processors** -- that take a request object as their argument and
+return a dictionary of items to be merged into the context. By default,
+``TEMPLATE_CONTEXT_PROCESSORS`` is set to::
 
     ("django.core.context_processors.auth",
     "django.core.context_processors.debug",
@@ -285,10 +311,24 @@
             'foo': 'bar',
         }, [ip_address_processor])
 
+Note::
+    If you're using Django's ``render_to_response()`` shortcut to populate a
+    template with the contents of a dictionary, your template will be passed a
+    ``Context`` instance by default (not a ``RequestContext``). To use a
+    ``RequestContext`` in your template rendering, pass an optional third
+    argument to ``render_to_response()``: a ``RequestContext``
+    instance. Your code might look like this::
+
+        def some_view(request):
+            # ...
+            return render_to_response('my_template.html',
+                                      my_data_dictionary,
+                                      context_instance=RequestContext(request))
+
 Here's what each of the default processors does:
 
-.. _HttpRequest object: http://www.djangoproject.com/documentation/request_response/#httprequest-objects
-.. _TEMPLATE_CONTEXT_PROCESSORS setting: http://www.djangoproject.com/documentation/settings/#template-context-processors
+.. _HttpRequest object: ../request_response/#httprequest-objects
+.. _TEMPLATE_CONTEXT_PROCESSORS setting: ../settings/#template-context-processors
 
 django.core.context_processors.auth
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -299,15 +339,24 @@
     * ``user`` -- An ``auth.User`` instance representing the currently
       logged-in user (or an ``AnonymousUser`` instance, if the client isn't
       logged in). See the `user authentication docs`.
-    * ``messages`` -- A list of ``auth.Message`` objects for the currently
-      logged-in user.
-    * ``perms`` -- An instance of ``django.core.context_processors.PermWrapper``,
-      representing the permissions that the currently logged-in user has. See
-      the `permissions docs`_.
 
-.. _user authentication docs: http://www.djangoproject.com/documentation/authentication/#users
-.. _permissions docs: http://www.djangoproject.com/documentation/authentication/#permissions
+    * ``messages`` -- A list of messages (as strings) for the currently
+      logged-in user. Behind the scenes, this calls
+      ``request.user.get_and_delete_messages()`` for every request. That method
+      collects the user's messages and deletes them from the database.
 
+      Note that messages are set with ``user.add_message()``. See the
+      `message docs`_ for more.
+
+    * ``perms`` -- An instance of
+      ``django.core.context_processors.PermWrapper``, representing the
+      permissions that the currently logged-in user has. See the `permissions
+      docs`_.
+
+.. _user authentication docs: ../authentication/#users
+.. _message docs: ../authentication/#messages
+.. _permissions docs: ../authentication/#permissions
+
 django.core.context_processors.debug
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -334,9 +383,9 @@
 
 See the `internationalization docs`_ for more.
 
-.. _LANGUAGES setting: http://www.djangoproject.com/documentation/settings/#languages
-.. _LANGUAGE_CODE setting: http://www.djangoproject.com/documentation/settings/#language-code
-.. _internationalization docs: http://www.djangoproject.com/documentation/i18n/
+.. _LANGUAGES setting: ../settings/#languages
+.. _LANGUAGE_CODE setting: ../settings/#language-code
+.. _internationalization docs: ../i18n/
 
 django.core.context_processors.request
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -346,6 +395,18 @@
 `HttpRequest object`_. Note that this processor is not enabled by default;
 you'll have to activate it.
 
+Writing your own context processors
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A context processor has a very simple interface: It's just a Python function
+that takes one argument, an ``HttpRequest`` object, and returns a dictionary
+that gets added to the template context. Each context processor *must* return
+a dictionary.
+
+Custom context processors can live anywhere in your code base. All Django cares
+about is that your custom context processors are pointed-to by your
+``TEMPLATE_CONTEXT_PROCESSORS`` setting.
+
 Loading templates
 -----------------
 
@@ -593,6 +654,18 @@
 If you leave off the ``name`` argument, as in the second example above, Django
 will use the function's name as the filter name.
 
+Template filters which expect strings
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you are writing a template filter which only expects a string as the first
+argument, you should use the included decorator ``stringfilter`` which will convert
+an object to it's string value before being passed to your function::
+
+    from django import template
+
+    @template.stringfilter
+    def lower(value):
+    	return value.lower()
+
 Writing custom template tags
 ----------------------------
 
@@ -740,20 +813,84 @@
 If you leave off the ``name`` argument, as in the second example above, Django
 will use the function's name as the tag name.
 
+Passing template variables to the tag
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Although you can pass any number of arguments to a template tag using
+``token.split_contents()``, the arguments are all unpacked as
+string literals. A little more work is required in order to dynamic content (a
+template variable) to a template tag as an argument.
+
+While the previous examples have formatted the current time into a string and
+returned the string, suppose you wanted to pass in a ``DateTimeField`` from an
+object and have the template tag format that date-time::
+
+    <p>This post was last updated at {% format_time blog_entry.date_updated "%Y-%m-%d %I:%M %p" %}.</p>
+
+Initially, ``token.split_contents()`` will return three values:
+
+    1. The tag name ``format_time``.
+    2. The string "blog_entry.date_updated" (without the surrounding quotes).
+    3. The formatting string "%Y-%m-%d %I:%M %p". The return value from
+       ``split_contents()`` will include the leading and trailing quotes for
+       string literals like this.
+
+Now your tag should begin to look like this::
+
+    from django import template
+    def do_format_time(parser, token):
+        try:
+            # split_contents() knows not to split quoted strings.
+            tag_name, date_to_be_formatted, format_string = token.split_contents()
+        except ValueError:
+            raise template.TemplateSyntaxError, "%r tag requires exactly two arguments" % token.contents[0]
+        if not (format_string[0] == format_string[-1] and format_string[0] in ('"', "'")):
+            raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
+        return FormatTimeNode(date_to_be_formatted, format_string[1:-1])
+
+You also have to change the renderer to retrieve the actual contents of the
+``date_updated`` property of the ``blog_entry`` object.  This can be
+accomplished by using the ``resolve_variable()`` function in
+``django.template``. You pass ``resolve_variable()`` the variable name and the
+current context, available in the ``render`` method::
+
+    from django import template
+    from django.template import resolve_variable
+    import datetime
+    class FormatTimeNode(template.Node):
+        def __init__(self, date_to_be_formatted, format_string):
+            self.date_to_be_formatted = date_to_be_formatted
+            self.format_string = format_string
+        
+        def render(self, context):
+            try:
+                actual_date = resolve_variable(self.date_to_be_formatted, context)
+                return actual_date.strftime(self.format_string)
+            except VariableDoesNotExist:
+                return ''
+
+``resolve_variable`` will try to resolve ``blog_entry.date_updated`` and then
+format it accordingly.
+
+.. note::
+    The ``resolve_variable()`` function will throw a ``VariableDoesNotExist``
+    exception if it cannot resolve the string passed to it in the current
+    context of the page.
+
 Shortcut for simple tags
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
-Many template tags take a single argument -- a string or a template variable
-reference -- and return a string after doing some processing based solely on
+Many template tags take a number of arguments -- strings or a template variables
+-- and return a string after doing some processing based solely on
 the input argument and some external information. For example, the
 ``current_time`` tag we wrote above is of this variety: we give it a format
 string, it returns the time as a string.
 
 To ease the creation of the types of tags, Django provides a helper function,
 ``simple_tag``. This function, which is a method of
-``django.template.Library``, takes a function that accepts one argument, wraps
-it in a ``render`` function and the other necessary bits mentioned above and
-registers it with the template system.
+``django.template.Library``, takes a function that accepts any number of
+arguments, wraps it in a ``render`` function and the other necessary bits
+mentioned above and registers it with the template system.
 
 Our earlier ``current_time`` function could thus be written like this::
 
@@ -769,18 +906,23 @@
         ...
 
 A couple of things to note about the ``simple_tag`` helper function:
-    * Only the (single) argument is passed into our function.
     * Checking for the required number of arguments, etc, has already been
       done by the time our function is called, so we don't need to do that.
     * The quotes around the argument (if any) have already been stripped away,
       so we just receive a plain string.
+    * If the argument was a template variable, our function is passed the
+      current value of the variable, not the variable itself.
 
+When your template tag does not need access to the current context, writing a
+function to work with the input values and using the ``simple_tag`` helper is
+the easiest way to create a new tag.
+
 Inclusion tags
 ~~~~~~~~~~~~~~
 
 Another common type of template tag is the type that displays some data by
 rendering *another* template. For example, Django's admin interface uses custom
-template tags to display the buttons along the botton of the "add/change" form
+template tags to display the buttons along the bottom of the "add/change" form
 pages. Those buttons always look the same, but the link targets change depending
 on the object being edited -- so they're a perfect case for using a small
 template that is filled with details from the current object. (In the admin's
@@ -878,7 +1020,7 @@
 the tag is passed the context object, as in this example. That's the only
 difference between this case and the previous ``inclusion_tag`` example.
 
-.. _tutorials: http://www.djangoproject.com/documentation/tutorial1/#creating-models
+.. _tutorials: ../tutorial1/#creating-models
 
 Setting a variable in the context
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1026,7 +1168,7 @@
 .. note::
 
     This section is only of interest to people trying to use the template
-    system as an output component in another application. If you are using the
+    system as an output component in another application. If you're using the
     template system as part of a Django application, nothing here applies to
     you.
 
@@ -1043,11 +1185,11 @@
 pieces of the templating system and then, *before* you call any of the
 templating functions, call ``django.conf.settings.configure()`` with any
 settings you wish to specify. You might want to consider setting at least
-``TEMPLATE_DIRS`` (if you are going to use template loaders),
+``TEMPLATE_DIRS`` (if you're going to use template loaders),
 ``DEFAULT_CHARSET`` (although the default of ``utf-8`` is probably fine) and
 ``TEMPLATE_DEBUG``. All available settings are described in the
 `settings documentation`_, and any setting starting with *TEMPLATE_*
 is of obvious interest.
 
-.. _settings file: http://www.djangoproject.com/documentation/settings/#using-settings-without-the-django-settings-module-environment-variable
-.. _settings documentation: http://www.djangoproject.com/documentation/settings/
+.. _settings file: ../settings/#using-settings-without-the-django-settings-module-environment-variable
+.. _settings documentation: ../settings/

Added: vendor/django/current/docs/testing.txt
===================================================================
--- vendor/django/current/docs/testing.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/testing.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,550 @@
+===========================
+Testing Django applications
+===========================
+
+Automated testing is an extremely useful weapon in the bug-killing arsenal
+of the modern developer. When initially writing code, a test suite can be
+used to validate that code behaves as expected. When refactoring or
+modifying code, tests serve as a guide to ensure that behavior hasn't
+changed unexpectedly as a result of the refactor.
+
+Testing a web application is a complex task, as there are many
+components of a web application that must be validated and tested. To
+help you test your application, Django provides a test execution
+framework, and range of utilities that can be used to simulate and
+inspect various facets of a web application.
+
+    This testing framework is currently under development, and may change
+    slightly before the next official Django release.
+
+    (That's *no* excuse not to write tests, though!)
+
+Writing tests
+=============
+
+Tests in Django come in two forms: doctests and unit tests.
+
+Writing doctests
+----------------
+
+Doctests use Python's standard doctest_ module, which searches for tests in
+your docstrings. Django's test runner looks for doctests in your ``models.py``
+file, and executes any that it finds. Django will also search for a file
+called ``tests.py`` in the application directory (i.e., the directory that
+holds ``models.py``). If a ``tests.py`` is found, it will also be searched
+for doctests.
+
+.. admonition:: What's a **docstring**?
+
+    A good explanation of docstrings (and some guidlines for using them
+    effectively) can be found in :PEP:`257`:
+
+        A docstring is a string literal that occurs as the first statement in
+        a module, function, class, or method definition.  Such a docstring
+        becomes the ``__doc__`` special attribute of that object.
+
+    Since tests often make great documentation, doctest lets you put your
+    tests directly in your docstrings.
+
+You can put doctest strings on any object in your ``models.py``, but it's
+common practice to put application-level doctests in the module docstring, and
+model-level doctests in the docstring for each model.
+
+For example::
+
+    from django.db import model
+
+    class Animal(models.Model):
+        """
+        An animal that knows how to make noise
+
+        # Create some animals
+        >>> lion = Animal.objects.create(name="lion", sound="roar")
+        >>> cat = Animal.objects.create(name="cat", sound="meow")
+
+        # Make 'em speak
+        >>> lion.speak()
+        'The lion says "roar"'
+        >>> cat.speak()
+        'The cat says "meow"'
+        """
+
+        name = models.CharField(maxlength=20)
+        sound = models.CharField(maxlength=20)
+
+        def speak(self):
+            return 'The %s says "%s"' % (self.name, self.sound)
+
+When you `run your tests`_, the test utility will find this docstring, notice
+that portions of it look like an interactive Python session, and execute those
+lines while checking that the results match.
+
+For more details about how doctest works, see the `standard library
+documentation for doctest`_
+
+.. _doctest: http://docs.python.org/lib/module-doctest.html
+.. _standard library documentation for doctest: doctest_
+
+Writing unittests
+-----------------
+
+Like doctests, Django's unit tests use a standard library module: unittest_.
+As with doctests, Django's test runner looks for any unit test cases defined
+in ``models.py``, or in a ``tests.py`` file stored in the application
+directory.
+
+An equivalent unittest test case for the above example would look like::
+
+    import unittest
+    from myapp.models import Animal
+
+    class AnimalTestCase(unittest.TestCase):
+
+        def setUp(self):
+            self.lion = Animal.objects.create(name="lion", sound="roar")
+            self.cat = Animal.objects.create(name="cat", sound="meow")
+
+        def testSpeaking(self):
+            self.assertEquals(self.lion.speak(), 'The lion says "roar"')
+            self.assertEquals(self.cat.speak(), 'The cat says "meow"')
+
+When you `run your tests`_, the test utility will find all the test cases
+(that is, subclasses of ``unittest.TestCase``) in ``models.py`` and
+``tests.py``, automatically build a test suite out of those test cases,
+and run that suite.
+
+For more details about ``unittest``, see the `standard library unittest
+documentation`_.
+
+.. _unittest: http://docs.python.org/lib/module-unittest.html
+.. _standard library unittest documentation: unittest_
+.. _run your tests: `Running tests`_
+
+Which should I use?
+-------------------
+
+Choosing a test framework is often contentious, so Django simply supports
+both of the standard Python test frameworks. Choosing one is up to each
+developer's personal tastes; each is supported equally. Since each test
+system has different benefits, the best approach is probably to use both
+together, picking the test system to match the type of tests you need to
+write.
+
+For developers new to testing, however, this choice can seem
+confusing, so here are a few key differences to help you decide whether
+doctests or unit tests are right for you.
+
+If you've been using Python for a while, ``doctest`` will probably feel more
+"pythonic". It's designed to make writing tests as easy as possible, so
+there's no overhead of writing classes or methods; you simply put tests in
+docstrings. This gives the added advantage of given your modules automatic
+documentation -- well-written doctests can kill both the documentation and the
+testing bird with a single stone.
+
+For developers just getting started with testing, using doctests will probably
+get you started faster.
+
+The ``unittest`` framework will probably feel very familiar to developers
+coming from Java.  Since ``unittest`` is inspired by Java's JUnit, if
+you've used testing frameworks in other languages that similarly were
+inspired by JUnit, ``unittest`` should also feel pretty familiar.
+
+Since ``unittest`` is organized around classes and methods, if you need
+to write a bunch of tests that all share similar code, you can easily use
+subclass to abstract common tasks; this makes test code shorter and cleaner.
+There's also support for explicit setup and/or cleanup routines, which give
+you a high level of control over the environment your test cases run in.
+
+Again, remember that you can use both systems side-by-side (even in the same
+app). In the end, most projects will eventually end up using both; each shines
+in different circumstances.
+
+Testing Tools
+=============
+
+To assist in testing various features of your application, Django provides
+tools that can be used to establish tests and test conditions.
+
+* `Test Client`_
+* Fixtures_
+
+Test Client
+-----------
+
+The Test Client is a simple dummy browser. It allows you to simulate
+GET and POST requests on a URL, and observe the response that is received.
+This allows you to test that the correct view is executed for a given URL,
+and that the view constructs the correct response.
+
+As the response is generated, the Test Client gathers details on the
+Template and Context objects that were used to generate the response. These
+Templates and Contexts are then provided as part of the response, and can be
+used as test conditions.
+
+.. admonition:: Test Client vs Browser Automation?
+
+    The Test Client is not intended as a replacement for Twill_, Selenium_,
+    or other browser automation frameworks - it is intended to allow
+    testing of the contexts and templates produced by a view,
+    rather than the HTML rendered to the end-user.
+
+    A comprehensive test suite should use a combination of both: Test Client
+    tests to establish that the correct view is being called and that
+    the view is collecting the correct context data, and Browser Automation
+    tests to check that user interface behaves as expected.
+
+.. _Twill: http://twill.idyll.org/
+.. _Selenium: http://www.openqa.org/selenium/
+
+Making requests
+~~~~~~~~~~~~~~~
+
+Creating an instance of ``Client`` (``django.test.client.Client``) requires
+no arguments at time of construction. Once constructed, the following methods
+can be invoked on the ``Client`` instance.
+
+``get(path, data={})``
+    Make a GET request on the provided ``path``. The key-value pairs in the
+    data dictionary will be used to create a GET data payload. For example::
+
+        c = Client()
+        c.get('/customers/details/', {'name':'fred', 'age':7})
+
+    will result in the evaluation of a GET request equivalent to::
+
+        http://yoursite.com/customers/details/?name=fred&age=7
+
+``post(path, data={}, content_type=MULTIPART_CONTENT)``
+    Make a POST request on the provided ``path``. If you provide a content type
+    (e.g., ``text/xml`` for an XML payload), the contents of ``data`` will be 
+    sent as-is in the POST request, using the content type in the HTTP 
+    ``Content-Type`` header.
+    
+    If you do not provide a value for ``content_type``, the values in 
+    ``data`` will be transmitted with a content type of ``multipart/form-data``.
+    The key-value pairs in the data dictionary will be encoded as a multipart
+    message and used to create the POST data payload.
+    
+    To submit multiple values for a given key (for example, to specify 
+    the selections for a multiple selection list), provide the values as a 
+    list or tuple for the required key. For example, a data dictionary of
+    ``{'choices': ('a','b','d')}`` would submit three selected rows for the
+    field named ``choices``.
+    
+    Submitting files is a special case. To POST a file, you need only
+    provide the file field name as a key, and a file handle to the file you wish to
+    upload as a value. The Test Client will populate the two POST fields (i.e.,
+    ``field`` and ``field_file``) required by Django's FileField. For example::
+
+        c = Client()
+        f = open('wishlist.doc')
+        c.post('/customers/wishes/', {'name':'fred', 'attachment':f})
+        f.close()
+
+    will result in the evaluation of a POST request on ``/customers/wishes/``,
+    with a POST dictionary that contains `name`, `attachment` (containing the
+    file name), and `attachment_file` (containing the file data). Note that you
+    need to manually close the file after it has been provided to the POST.
+
+``login(path, username, password)``
+    In a production site, it is likely that some views will be protected with
+    the @login_required decorator provided by ``django.contrib.auth``. Interacting
+    with a URL that has been login protected is a slightly complex operation,
+    so the Test Client provides a simple method to automate the login process. A
+    call to ``login()`` stimulates the series of GET and POST calls required
+    to log a user into a @login_required protected view.
+
+    If login is possible, the final return value of ``login()`` is the response
+    that is generated by issuing a GET request on the protected URL. If login
+    is not possible, ``login()`` returns False.
+
+    Note that since the test suite will be executed using the test database,
+    which contains no users by default. As a result, logins for your production
+    site will not work. You will need to create users as part of the test suite
+    to be able to test logins to your application.
+
+Testing Responses
+~~~~~~~~~~~~~~~~~
+
+The ``get()``, ``post()`` and ``login()`` methods all return a Response
+object. This Response object has the following properties that can be used
+for testing purposes:
+
+    ===============  ==========================================================
+    Property         Description
+    ===============  ==========================================================
+    ``status_code``  The HTTP status of the response. See RFC2616_ for a
+                     full list of HTTP status codes.
+
+    ``content``      The body of the response. The is the final page
+                     content as rendered by the view, or any error message
+                     (such as the URL for a 302 redirect).
+
+    ``template``     The Template instance that was used to render the final
+                     content. Testing ``template.name`` can be particularly
+                     useful; if the template was loaded from a file,
+                     ``template.name`` will be the file name that was loaded.
+
+                     If multiple templates were rendered, (e.g., if one
+                     template includes another template),``template`` will
+                     be a list of Template objects, in the order in which
+                     they were rendered.
+
+    ``context``      The Context that was used to render the template that
+                     produced the response content.
+
+                     As with ``template``, if multiple templates were rendered
+                     ``context`` will be a list of Context objects, stored in
+                     the order in which they were rendered.
+    ===============  ==========================================================
+
+.. _RFC2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
+
+Exceptions
+~~~~~~~~~~
+
+If you point the Test Client at a view that raises an exception, that exception
+will be visible in the test case. You can then use a standard ``try...catch``
+block, or ``unittest.TestCase.assertRaises()`` to test for exceptions.
+
+The only exceptions that are not visible in a Test Case are ``Http404``,
+``PermissionDenied`` and ``SystemExit``. Django catches these exceptions
+internally and converts them into the appropriate HTTP responses codes.
+
+Persistent state
+~~~~~~~~~~~~~~~~
+
+The Test Client is stateful; if a cookie is returned as part of a response,
+that cookie is provided as part of the next request issued by that Client
+instance. Expiry policies for these cookies are not followed; if you want
+a cookie to expire, either delete it manually or create a new Client
+instance (which will effectively delete all cookies).
+
+There are two properties of the Test Client which are used to store persistent
+state information. If necessary, these properties can be interrogated as
+part of a test condition.
+
+    ===============  ==========================================================
+    Property         Description
+    ===============  ==========================================================
+    ``cookies``      A Python ``SimpleCookie`` object, containing the current
+                     values of all the client cookies.
+
+    ``session``      A dictionary-like object containing session information.
+                     See the `session documentation`_ for full details.
+    ===============  ==========================================================
+
+.. _`session documentation`: ../sessions/
+
+Example
+~~~~~~~
+
+The following is a simple unit test using the Test Client::
+
+    import unittest
+    from django.test.client import Client
+
+    class SimpleTest(unittest.TestCase):
+        def setUp(self):
+            # Every test needs a client
+            self.client = Client()
+        def test_details(self):
+            # Issue a GET request
+            response = self.client.get('/customer/details/')
+
+            # Check that the respose is 200 OK
+            self.failUnlessEqual(response.status_code, 200)
+            # Check that the rendered context contains 5 customers
+            self.failUnlessEqual(len(response.context['customers']), 5)
+
+Fixtures
+--------
+
+A test case for a database-backed website isn't much use if there isn't any
+data in the database. To make it easy to put test data into the database,
+Django provides a fixtures framework.
+
+A *Fixture* is a collection of files that contain the serialized contents of
+the database. Each fixture has a unique name; however, the files that
+comprise the fixture can be distributed over multiple directories, in
+multiple applications.
+
+.. note::
+    If you have synchronized a Django project, you have already experienced 
+    the use of one fixture -- the ``initial_data`` fixture. Every time you
+    synchronize the database, Django installs the ``initial_data`` fixture.
+    This provides a mechanism to populate a new database with any initial
+    data (such as a default set of categories). Fixtures with other names
+    can be installed manually using ``django-admin.py loaddata``. 
+    
+
+However, for the purposes of unit testing, each test must be able to 
+guarantee the contents of the database at the start of each and every
+test. To do this, Django provides a TestCase baseclass that can integrate
+with fixtures.
+
+Moving from a normal unittest TestCase to a Django TestCase is easy - just
+change the base class of your test, and define a list of fixtures
+to be used. For example, the test case from `Writing unittests`_ would 
+look like::
+
+    from django.test import TestCase
+    from myapp.models import Animal
+
+    class AnimalTestCase(TestCase):
+        fixtures = ['mammals.json', 'birds']
+        
+        def setUp(self):
+            # test definitions as before
+
+At the start of each test case, before ``setUp()`` is run, Django will
+flush the database, returning the database the state it was in directly 
+after ``syncdb`` was called. Then, all the named fixtures are installed. 
+In this example, any JSON fixture called ``mammals``, and any fixture
+named ``birds`` will be installed. See the documentation on 
+`loading fixtures`_ for more details on defining and installing fixtures.
+
+.. _`loading fixtures`: ../django_admin/#loaddata-fixture-fixture
+
+This flush/load procedure is repeated for each test in the test case, so you 
+can be certain that the outcome of a test will not be affected by 
+another test, or the order of test execution.
+
+Running tests
+=============
+
+Run your tests using your project's ``manage.py`` utility::
+
+    $ ./manage.py test
+
+If you only want to run tests for a particular application, add the
+application name to the command line. For example, if your
+``INSTALLED_APPS`` contains ``myproject.polls`` and ``myproject.animals``,
+but you only want to run the animals unit tests, run::
+
+    $ ./manage.py test animals
+
+When you run your tests, you'll see a bunch of text flow by as the test
+database is created and models are initialized. This test database is
+created from scratch every time you run your tests.
+
+By default, the test database gets its name by prepending ``test_`` to
+the database name specified by the ``DATABASE_NAME`` setting; all other
+database settings will the same as they would be for the project normally.
+If you wish to use a name other than the default for the test database,
+you can use the ``TEST_DATABASE_NAME`` setting to provide a name.
+
+Once the test database has been established, Django will run your tests.
+If everything goes well, at the end you'll see::
+
+    ----------------------------------------------------------------------
+    Ran 22 tests in 0.221s
+
+    OK
+
+If there are test failures, however, you'll see full details about what tests
+failed::
+
+    ======================================================================
+    FAIL: Doctest: ellington.core.throttle.models
+    ----------------------------------------------------------------------
+    Traceback (most recent call last):
+      File "/dev/django/test/doctest.py", line 2153, in runTest
+        raise self.failureException(self.format_failure(new.getvalue()))
+    AssertionError: Failed doctest test for myapp.models
+      File "/dev/myapp/models.py", line 0, in models
+
+    ----------------------------------------------------------------------
+    File "/dev/myapp/models.py", line 14, in myapp.models
+    Failed example:
+        throttle.check("actor A", "action one", limit=2, hours=1)
+    Expected:
+        True
+    Got:
+        False
+
+    ----------------------------------------------------------------------
+    Ran 2 tests in 0.048s
+
+    FAILED (failures=1)
+
+The return code for the script will indicate the number of tests that failed.
+
+Regardless of whether the tests pass or fail, the test database is destroyed when
+all the tests have been executed. 
+
+Using a different testing framework
+===================================
+
+Doctest and Unittest are not the only Python testing frameworks. While
+Django doesn't provide explicit support these alternative frameworks,
+it does provide a mechanism to allow you to invoke tests constructed for
+an alternative framework as if they were normal Django tests.
+
+When you run ``./manage.py test``, Django looks at the ``TEST_RUNNER``
+setting to determine what to do. By default, ``TEST_RUNNER`` points to 
+``django.test.simple.run_tests``. This method defines the default Django
+testing behavior. This behavior involves:
+
+#. Performing global pre-test setup
+#. Creating the test database
+#. Running ``syncdb`` to install models and initial data into the test database
+#. Looking for Unit Tests and Doctests in ``models.py`` and ``tests.py`` file for each installed application
+#. Running the Unit Tests and Doctests that are found
+#. Destroying the test database
+#. Performing global post-test teardown
+
+If you define your own test runner method and point ``TEST_RUNNER``
+at that method, Django will execute your test runner whenever you run
+``./manage.py test``. In this way, it is possible to use any test
+framework that can be executed from Python code.
+
+Defining a test runner
+----------------------
+By convention, a test runner should be called ``run_tests``; however, you
+can call it anything you want. The only requirement is that it accept two
+arguments:
+
+``run_tests(module_list, verbosity=1)``
+    The module list is the list of Python modules that contain the models to be
+    tested. This is the same format returned by ``django.db.models.get_apps()``
+
+    Verbosity determines the amount of notification and debug information that
+    will be printed to the console; `0` is no output, `1` is normal output,
+    and `2` is verbose output.
+    
+    This method should return the number of tests that failed.
+
+Testing utilities
+-----------------
+
+To assist in the creation of your own test runner, Django provides
+a number of utility methods in the ``django.test.utils`` module.
+
+``setup_test_environment()``
+    Performs any global pre-test setup, such as the installing the
+    instrumentation of the template rendering system.
+
+``teardown_test_environment()``
+    Performs any global post-test teardown, such as removing the instrumentation
+    of the template rendering system.
+
+``create_test_db(verbosity=1, autoclobber=False)``
+    Creates a new test database, and run ``syncdb`` against it.
+
+    ``verbosity`` has the same behavior as in the test runner.
+
+    ``Autoclobber`` describes the behavior that will occur if a database with
+    the same name as the test database is discovered. If ``autoclobber`` is False,
+    the user will be asked to approve destroying the existing database. ``sys.exit``
+    is called if the user does not approve. If autoclobber is ``True``, the database
+    will be destroyed without consulting the user.
+
+    ``create_test_db()`` has the side effect of modifying
+    ``settings.DATABASE_NAME`` to match the name of the test database.
+
+``destroy_test_db(old_database_name, verbosity=1)``
+    Destroys the database with the name ``settings.DATABASE_NAME`` matching,
+    and restores the value of ``settings.DATABASE_NAME`` to the provided name.
+
+    ``verbosity`` has the same behavior as in the test runner.

Modified: vendor/django/current/docs/tutorial01.txt
===================================================================
--- vendor/django/current/docs/tutorial01.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/tutorial01.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,8 +17,17 @@
 ``import django``. If that command runs successfully, with no errors, Django is
 installed.
 
-.. _`Django installed`: http://www.djangoproject.com/documentation/install/
+.. _`Django installed`: ../install/
 
+.. admonition:: Where to get help:
+
+    If you're having trouble going through this tutorial, please post a message
+    to `django-users`_ or drop by `#django`_ on ``irc.freenode.net`` and we'll 
+    try to help.
+
+.. _django-users: http://groups.google.com/group/django-users 
+.. _#django: irc://irc.freenode.net/django
+
 Creating a project
 ==================
 
@@ -32,6 +41,13 @@
 code, then run the command ``django-admin.py startproject mysite``. This
 will create a ``mysite`` directory in your current directory.
 
+.. note::
+    
+    You'll need to avoid naming projects after built-in Python or Django
+    components. In particular, this means you should avoid using names like
+    ``django`` (which will conflict with Django itself) or ``site`` (which
+    conflicts with a built-in Python package).
+
 (``django-admin.py`` should be on your system path if you installed Django via
 ``python setup.py``. If it's not on your path, you can find it in
 ``site-packages/django/bin``, where ``site-packages`` is a directory within
@@ -108,7 +124,7 @@
 
     Full docs for the development server are at `django-admin documentation`_.
 
-.. _django-admin documentation: http://www.djangoproject.com/documentation/django_admin/
+.. _django-admin documentation: ../django_admin/
 
 Database setup
 --------------
@@ -378,7 +394,7 @@
 Read the `django-admin.py documentation`_ for full information on what the
 ``manage.py`` utility can do.
 
-.. _django-admin.py documentation: http://www.djangoproject.com/documentation/django_admin/
+.. _django-admin.py documentation: ../django_admin/
 
 Playing with the API
 ====================
@@ -555,5 +571,5 @@
 When you're comfortable with the API, read `part 2 of this tutorial`_ to get
 Django's automatic admin working.
 
-.. _Database API reference: http://www.djangoproject.com/documentation/db_api/
-.. _part 2 of this tutorial: http://www.djangoproject.com/documentation/tutorial2/
+.. _Database API reference: ../db_api/
+.. _part 2 of this tutorial: ../tutorial2/

Modified: vendor/django/current/docs/tutorial02.txt
===================================================================
--- vendor/django/current/docs/tutorial02.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/tutorial02.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -5,7 +5,7 @@
 This tutorial begins where `Tutorial 1`_ left off. We're continuing the Web-poll
 application and will focus on Django's automatically-generated admin site.
 
-.. _Tutorial 1: http://www.djangoproject.com/documentation/tutorial1/
+.. _Tutorial 1: ../tutorial1/
 
 .. admonition:: Philosophy
 
@@ -64,7 +64,7 @@
 By default, you should see two types of editable content: groups and users.
 These are core features Django ships with by default.
 
-.. _"I can't log in" questions: http://www.djangoproject.com/documentation/faq/#the-admin-site
+.. _"I can't log in" questions: ../faq/#the-admin-site
 
 Make the poll app modifiable in the admin
 =========================================
@@ -377,16 +377,16 @@
 Django where our templates live::
 
     TEMPLATE_DIRS = (
-        "/home/mytemplates", # Change this to your own directory.
+        "/home/my_username/mytemplates", # Change this to your own directory.
     )
 
 Now copy the template ``admin/base_site.html`` from within the default Django
 admin template directory (``django/contrib/admin/templates``) into an ``admin``
 subdirectory of whichever directory you're using in ``TEMPLATE_DIRS``. For
-example, if your ``TEMPLATE_DIRS`` includes ``"/home/mytemplates"``, as above,
-then copy ``django/contrib/admin/templates/admin/base_site.html`` to
-``/home/mytemplates/admin/base_site.html``. Don't forget that ``admin``
-subdirectory.
+example, if your ``TEMPLATE_DIRS`` includes ``"/home/my_username/mytemplates"``,
+as above, then copy ``django/contrib/admin/templates/admin/base_site.html`` to
+``/home/my_username/mytemplates/admin/base_site.html``. Don't forget that
+``admin`` subdirectory.
 
 Then, just edit the file and replace the generic Django text with your own
 site's name and URL as you see fit.
@@ -402,7 +402,7 @@
 package, for use as a fallback. See the `loader types documentation`_ for full
 information.
 
-.. _loader types documentation: http://www.djangoproject.com/documentation/templates_python/#loader-types
+.. _loader types documentation: ../templates_python/#loader-types
 
 Customize the admin index page
 ==============================
@@ -433,5 +433,5 @@
 When you're comfortable with the admin site, read `part 3 of this tutorial`_ to
 start working on public poll views.
 
-.. _Django admin CSS guide: http://www.djangoproject.com/documentation/admin_css/
-.. _part 3 of this tutorial: http://www.djangoproject.com/documentation/tutorial3/
+.. _Django admin CSS guide: ../admin_css/
+.. _part 3 of this tutorial: ../tutorial3/

Modified: vendor/django/current/docs/tutorial03.txt
===================================================================
--- vendor/django/current/docs/tutorial03.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/tutorial03.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -5,7 +5,7 @@
 This tutorial begins where `Tutorial 2`_ left off. We're continuing the Web-poll
 application and will focus on creating the public interface -- "views."
 
-.. _Tutorial 2: http://www.djangoproject.com/documentation/tutorial2/
+.. _Tutorial 2: ../tutorial2/
 
 Philosophy
 ==========
@@ -91,7 +91,7 @@
 The ``poll_id='23'`` part comes from ``(?P<poll_id>\d+)``. Using parenthesis around a
 pattern "captures" the text matched by that pattern and sends it as an argument
 to the view function; the ``?P<poll_id>`` defines the name that will be used to
-identify the matched pattern; and ``\d+`` is a regular experession to match a sequence of
+identify the matched pattern; and ``\d+`` is a regular expression to match a sequence of
 digits (i.e., a number).
 
 Because the URL patterns are regular expressions, there really is no limit on
@@ -117,8 +117,8 @@
 
 .. _Wikipedia's entry: http://en.wikipedia.org/wiki/Regular_expression
 .. _Python documentation: http://www.python.org/doc/current/lib/module-re.html
-.. _request and response documentation: http://www.djangoproject.com/documentation/request_response/
-.. _URLconf documentation: http://www.djangoproject.com/documentation/url_dispatch/
+.. _request and response documentation: ../request_response/
+.. _URLconf documentation: ../url_dispatch/
 
 Write your first view
 =====================
@@ -257,11 +257,10 @@
     from mysite.polls.models import Poll
 
     def index(request):
-        latest_poll_list = Poll.objects.all().order_by('-pub_date')
+        latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
         return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list})
 
-Note that we no longer need to import ``loader``, ``Context`` or
-``HttpResponse``.
+Note that once we've done this in all these views, we no longer need to import ``loader``, ``Context`` and ``HttpResponse``.
 
 The ``render_to_response()`` function takes a template name as its first
 argument and a dictionary as its optional second argument. It returns an
@@ -300,7 +299,7 @@
 
 The ``get_object_or_404()`` function takes a Django model module as its first
 argument and an arbitrary number of keyword arguments, which it passes to the
-module's ``get_object()`` function. It raises ``Http404`` if the object doesn't
+module's ``get()`` function. It raises ``Http404`` if the object doesn't
 exist.
 
 .. admonition:: Philosophy
@@ -377,7 +376,7 @@
 
 See the `template guide`_ for full details on how templates work.
 
-.. _template guide: http://www.djangoproject.com/documentation/templates/
+.. _template guide: ../templates/
 
 Simplifying the URLconfs
 ========================
@@ -464,4 +463,4 @@
 When you're comfortable with writing views, read `part 4 of this tutorial`_ to
 learn about simple form processing and generic views.
 
-.. _part 4 of this tutorial: http://www.djangoproject.com/documentation/tutorial4/
+.. _part 4 of this tutorial: ../tutorial4/

Modified: vendor/django/current/docs/tutorial04.txt
===================================================================
--- vendor/django/current/docs/tutorial04.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/tutorial04.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -120,7 +120,7 @@
 results page that gets updated each time you vote. If you submit the form
 without having chosen a choice, you should see the error message.
 
-.. _request and response documentation: http://www.djangoproject.com/documentation/request_response/
+.. _request and response documentation: ../request_response/
 
 Use generic views: Less code is better
 ======================================
@@ -192,13 +192,13 @@
       ``object_id`` for the generic views.
 
 By default, the ``object_detail`` generic view uses a template called
-``<app name>/<module name>_detail.html``. In our case, it'll use the template
+``<app name>/<model name>_detail.html``. In our case, it'll use the template
 ``"polls/poll_detail.html"``. Thus, rename your ``polls/detail.html`` template to
 ``polls/poll_detail.html``, and change the ``render_to_response()`` line in
 ``vote()``.
 
 Similarly, the ``object_list`` generic view uses a template called
-``<app name>/<module name>_list.html``. Thus, rename ``polls/index.html`` to
+``<app name>/<model name>_list.html``. Thus, rename ``polls/index.html`` to
 ``polls/poll_list.html``.
 
 Because we have more than one entry in the URLconf that uses ``object_detail``
@@ -206,8 +206,23 @@
 ``template_name='polls/results.html'``. Otherwise, both views would use the same
 template. Note that we use ``dict()`` to return an altered dictionary in place.
 
+.. note:: ``all()`` is lazy
+
+    It might look a little frightening to see ``Poll.objects.all()`` being used
+    in a detail view which only needs one ``Poll`` object, but don't worry;
+    ``Poll.objects.all()`` is actually a special object called a ``QuerySet``,
+    which is "lazy" and doesn't hit your database until it absolutely has to. By
+    the time the database query happens, the ``object_detail`` generic view will
+    have narrowed its scope down to a single object, so the eventual query will
+    only select one row from the database. 
+    
+    If you'd like to know more about how that works, The Django database API
+    documentation `explains the lazy nature of QuerySet objects`_.
+
+.. _explains the lazy nature of QuerySet objects: ../db_api/#querysets-are-lazy
+
 In previous parts of the tutorial, the templates have been provided with a context
-that contains the ``poll` and ``latest_poll_list`` context variables. However,
+that contains the ``poll`` and ``latest_poll_list`` context variables. However,
 the generic views provide the variables ``object`` and ``object_list`` as context.
 Therefore, you need to change your templates to match the new context variables.
 Go through your templates, and modify any reference to ``latest_poll_list`` to
@@ -226,7 +241,7 @@
 
 For full details on generic views, see the `generic views documentation`_.
 
-.. _generic views documentation: http://www.djangoproject.com/documentation/generic_views/
+.. _generic views documentation: ../generic_views/
 
 Coming soon
 ===========
@@ -241,4 +256,4 @@
     * Advanced admin features: Permissions
     * Advanced admin features: Custom JavaScript
 
-.. _Tutorial 3: http://www.djangoproject.com/documentation/tutorial3/
+.. _Tutorial 3: ../tutorial3/

Modified: vendor/django/current/docs/url_dispatch.txt
===================================================================
--- vendor/django/current/docs/url_dispatch.txt	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/docs/url_dispatch.txt	2007-07-19 22:25:20 UTC (rev 7717)
@@ -45,8 +45,8 @@
        `request object`_ as its first argument and any values captured in the
        regex as remaining arguments.
 
-.. _settings file: http://www.djangoproject.com/documentation/settings/
-.. _request object: http://www.djangoproject.com/documentation/request_response/#httprequest-objects
+.. _settings file: ../settings/
+.. _request object: ../request_response/#httprequest-objects
 
 Example
 =======
@@ -263,12 +263,12 @@
     from django.conf.urls.defaults import *
 
     urlpatterns = patterns('',
-        (r'^articles/(\d{4})/$', 'myproject.news.views.year_archive'),
-        (r'^articles/(\d{4})/(\d{2})/$', 'myproject.news.views.month_archive'),
-        (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'myproject.news.views.article_detail'),
+        (r'^articles/(\d{4})/$', 'mysite.news.views.year_archive'),
+        (r'^articles/(\d{4})/(\d{2})/$', 'mysite.news.views.month_archive'),
+        (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'mysite.news.views.article_detail'),
     )
 
-In this example, each view has a common prefix -- ``'myproject.news.views'``.
+In this example, each view has a common prefix -- ``'mysite.news.views'``.
 Instead of typing that out for each entry in ``urlpatterns``, you can use the
 first argument to the ``patterns()`` function to specify a prefix to apply to
 each view function.
@@ -277,7 +277,7 @@
 
     from django.conf.urls.defaults import *
 
-    urlpatterns = patterns('myproject.news.views',
+    urlpatterns = patterns('mysite.news.views',
         (r'^articles/(\d{4})/$', 'year_archive'),
         (r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
         (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
@@ -286,7 +286,7 @@
 Note that you don't put a trailing dot (``"."``) in the prefix. Django puts
 that in automatically.
 
-.. _Django overview: http://www.djangoproject.com/documentation/overview/
+.. _Django overview: ../overview/
 
 Multiple view prefixes
 ----------------------
@@ -387,5 +387,95 @@
 This technique is used in `generic views`_ and in the `syndication framework`_
 to pass metadata and options to views.
 
-.. _generic views: http://www.djangoproject.com/documentation/generic_views/
-.. _syndication framework: http://www.djangoproject.com/documentation/syndication/
+.. _generic views: ../generic_views/
+.. _syndication framework: ../syndication/
+
+.. admonition:: Dealing with conflicts
+
+    It's possible to have a URL pattern which captures named keyword arguments,
+    and also passes arguments with the same names in its dictionary of extra
+    arguments. When this happens, the arguments in the dictionary will be used
+    instead of the arguments captured in the URL.
+
+Passing extra options to ``include()``
+--------------------------------------
+
+Similarly, you can pass extra options to ``include()``. When you pass extra
+options to ``include()``, *each* line in the included URLconf will be passed
+the extra options.
+
+For example, these two URLconf sets are functionally identical:
+
+Set one::
+
+    # main.py
+    urlpatterns = patterns('',
+        (r'^blog/', include('inner'), {'blogid': 3}),
+    )
+
+    # inner.py
+    urlpatterns = patterns('',
+        (r'^archive/$', 'mysite.views.archive'),
+        (r'^about/$', 'mysite.views.about'),
+    )
+
+Set two::
+
+    # main.py
+    urlpatterns = patterns('',
+        (r'^blog/', include('inner')),
+    )
+
+    # inner.py
+    urlpatterns = patterns('',
+        (r'^archive/$', 'mysite.views.archive', {'blogid': 3}),
+        (r'^about/$', 'mysite.views.about', {'blogid': 3}),
+    )
+
+Note that extra options will *always* be passed to *every* line in the included
+URLconf, regardless of whether the line's view actually accepts those options
+as valid. For this reason, this technique is only useful if you're certain that
+every view in the the included URLconf accepts the extra options you're passing.
+
+Passing callable objects instead of strings
+===========================================
+
+Some developers find it more natural to pass the actual Python function object
+rather than a string containing the path to its module. This alternative is
+supported -- you can pass any callable object as the view.
+
+For example, given this URLconf in "string" notation::
+
+    urlpatterns = patterns('',
+        (r'^archive/$', 'mysite.views.archive'),
+        (r'^about/$', 'mysite.views.about'),
+        (r'^contact/$', 'mysite.views.contact'),
+    )
+
+You can accomplish the same thing by passing objects rather than strings. Just
+be sure to import the objects::
+
+    from mysite.views import archive, about, contact
+
+    urlpatterns = patterns('',
+        (r'^archive/$', archive),
+        (r'^about/$', about),
+        (r'^contact/$', contact),
+    )
+
+The following example is functionally identical. It's just a bit more compact
+because it imports the module that contains the views, rather than importing
+each view individually::
+
+    from mysite import views
+
+    urlpatterns = patterns('',
+        (r'^archive/$', views.archive),
+        (r'^about/$', views.about),
+        (r'^contact/$', views.contact),
+    )
+
+The style you use is up to you.
+
+Note that if you use this technique -- passing objects rather than strings --
+the view prefix (as explained in "The view prefix" above) will have no effect.

Modified: vendor/django/current/extras/django_bash_completion
===================================================================
--- vendor/django/current/extras/django_bash_completion	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/extras/django_bash_completion	2007-07-19 22:25:20 UTC (rev 7717)
@@ -31,6 +31,9 @@
 #
 # To uninstall, just remove the line from your .bash_profile and .bashrc.
 
+# Enable extended pattern matching operators.
+shopt -s extglob
+
 _django_completion()
 {
     local cur prev opts actions action_shell_opts action_runfcgi_opts
@@ -58,8 +61,13 @@
           ||
           # python manage.py, /some/path/python manage.py (if manage.py exists)
           ( ${COMP_CWORD} -eq 2 &&
-            ( $( basename ${COMP_WORDS[0]} ) == python ) &&
+            ( $( basename ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
             ( $( basename ${COMP_WORDS[1]} ) == manage.py) &&
+            ( -r ${COMP_WORDS[1]} ) ) 
+          ||
+          ( ${COMP_CWORD} -eq 2 &&
+            ( $( basename ${COMP_WORDS[0]} ) == python?([1-9]\.[0-9]) ) &&
+            ( $( basename ${COMP_WORDS[1]} ) == django-admin.py) &&
             ( -r ${COMP_WORDS[1]} ) ) ]] ; then
 
         case ${cur} in
@@ -79,10 +87,28 @@
             adminindex|install|reset| \
             sql|sqlall|sqlclear|sqlindexes| \
             sqlinitialdata|sqlreset|sqlsequencereset)
-            # App completion isn't yet implemented, but here's where that
-            # would go.
-            # COMPREPLY=( $(compgen -W "auth core" -- ${cur}) )
-            COMPREPLY=()
+            # App completion
+            settings=""
+            # If settings.py in the PWD, use that
+            if [ -e settings.py ] ; then
+                settings="$PWD/settings.py"
+            else
+                # Use the ENV variable if it is set
+                if [ $DJANGO_SETTINGS_MODULE ] ; then
+                    settings=$DJANGO_SETTINGS_MODULE
+                fi
+            fi
+            # Couldn't find settings so return nothing
+            if [ -z $settings ] ; then
+                COMPREPLY=()
+            # Otherwise inspect settings.py file
+            else
+                apps=`sed -n "/INSTALLED_APPS = (/,/)/p" $settings | \
+                      grep -v "django.contrib" | 
+                      sed -n "s/^[ ]*'\(.*\.\)*\(.*\)'.*$/\2 /pg" | \
+                      tr -d "\n"`
+                COMPREPLY=( $(compgen -W "${apps}" -- ${cur}) )
+            fi
             return 0
             ;;
 
@@ -117,3 +143,17 @@
 }
 
 complete -F _django_completion django-admin.py manage.py
+
+# Support for multiple interpreters.
+unset pythons
+if command -v whereis &>/dev/null; then
+    python_interpreters=$(whereis python | cut -d " " -f 2-) 
+    for python in $python_interpreters; do
+        pythons="${pythons} $(basename $python)"
+    done
+    pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
+else
+    pythons=python    
+fi
+
+complete -F _django_completion -o default $pythons

Added: vendor/django/current/scripts/rpm-install.sh
===================================================================
--- vendor/django/current/scripts/rpm-install.sh	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/scripts/rpm-install.sh	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,19 @@
+#! /bin/sh
+#
+# this file is *inserted* into the install section of the generated
+# spec file
+#
+
+# this is, what dist.py normally does
+python setup.py install --root=${RPM_BUILD_ROOT} --record="INSTALLED_FILES"
+
+for i in `cat INSTALLED_FILES`; do
+  if [ -f ${RPM_BUILD_ROOT}/$i ]; then
+    echo $i >>FILES
+  fi
+  if [ -d ${RPM_BUILD_ROOT}/$i ]; then
+    echo %dir $i >>DIRS
+  fi
+done
+
+cat DIRS FILES >INSTALLED_FILES

Added: vendor/django/current/setup.cfg
===================================================================
--- vendor/django/current/setup.cfg	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/setup.cfg	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,4 @@
+[bdist_rpm]
+doc_files = docs/*.txt
+install-script = scripts/rpm-install.sh
+

Modified: vendor/django/current/setup.py
===================================================================
--- vendor/django/current/setup.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/setup.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,61 +1,48 @@
-import ez_setup # From http://peak.telecommunity.com/DevCenter/setuptools
-ez_setup.use_setuptools()
+from distutils.core import setup
+from distutils.command.install import INSTALL_SCHEMES
+import os
+import sys
 
-from setuptools import setup, find_packages
+# Tell distutils to put the data_files in platform-specific installation
+# locations. See here for an explanation:
+# http://groups.google.com/group/comp.lang.python/browse_thread/thread/35ec7b2fed36eaec/2105ee4d9e8042cb
+for scheme in INSTALL_SCHEMES.values():
+    scheme['data'] = scheme['purelib']
 
+# Compile the list of packages available, because distutils doesn't have
+# an easy way to do this.
+packages, data_files = [], []
+root_dir = os.path.dirname(__file__)
+len_root_dir = len(root_dir)
+django_dir = os.path.join(root_dir, 'django')
+
+for dirpath, dirnames, filenames in os.walk(django_dir):
+    # Ignore dirnames that start with '.'
+    for i, dirname in enumerate(dirnames):
+        if dirname.startswith('.'): del dirnames[i]
+    if '__init__.py' in filenames:
+        package = dirpath[len_root_dir:].lstrip('/').replace('/', '.')
+        packages.append(package)
+    else:
+        data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
+
+# Small hack for working with bdist_wininst.
+# See http://mail.python.org/pipermail/distutils-sig/2004-August/004134.html
+if len(sys.argv) > 1 and sys.argv[1] == 'bdist_wininst':
+    for file_info in data_files:
+        file_info[0] = '/PURELIB/%s' % file_info[0]
+
+# Dynamically calculate the version based on django.VERSION.
+version = "%d.%d-%s" % (__import__('django').VERSION)
+
 setup(
     name = "Django",
-    version = "0.95.1",
+    version = version,
     url = 'http://www.djangoproject.com/',
     author = 'Lawrence Journal-World',
     author_email = 'holovaty at gmail.com',
     description = 'A high-level Python Web framework that encourages rapid development and clean, pragmatic design.',
-    license = 'BSD',
-    packages = find_packages(exclude=['examples', 'examples.*']),
-    package_data = {
-        '': ['*.TXT'],
-        'django.conf': ['locale/ar/LC_MESSAGES/*',
-                        'locale/bn/LC_MESSAGES/*',
-                        'locale/cs/LC_MESSAGES/*',
-                        'locale/cy/LC_MESSAGES/*',
-                        'locale/da/LC_MESSAGES/*',
-                        'locale/de/LC_MESSAGES/*',
-                        'locale/el/LC_MESSAGES/*',
-                        'locale/en/LC_MESSAGES/*',
-                        'locale/es/LC_MESSAGES/*',
-                        'locale/es_AR/LC_MESSAGES/*',
-                        'locale/fr/LC_MESSAGES/*',
-                        'locale/gl/LC_MESSAGES/*',
-                        'locale/hu/LC_MESSAGES/*',
-                        'locale/he/LC_MESSAGES/*',
-                        'locale/is/LC_MESSAGES/*',
-                        'locale/it/LC_MESSAGES/*',
-                        'locale/ja/LC_MESSAGES/*',
-                        'locale/nl/LC_MESSAGES/*',
-                        'locale/no/LC_MESSAGES/*',
-                        'locale/pl/LC_MESSAGES/*',
-                        'locale/pt_BR/LC_MESSAGES/*',
-                        'locale/ro/LC_MESSAGES/*',
-                        'locale/ru/LC_MESSAGES/*',
-                        'locale/sk/LC_MESSAGES/*',
-                        'locale/sl/LC_MESSAGES/*',
-                        'locale/sr/LC_MESSAGES/*',
-                        'locale/sv/LC_MESSAGES/*',
-                        'locale/ta/LC_MESSAGES/*',
-                        'locale/uk/LC_MESSAGES/*',
-                        'locale/zh_CN/LC_MESSAGES/*',
-                        'locale/zh_TW/LC_MESSAGES/*'],
-        'django.contrib.admin': ['templates/admin/*.html',
-                                 'templates/admin_doc/*.html',
-                                 'templates/registration/*.html',
-                                 'templates/widget/*.html',
-                                 'media/css/*.css',
-                                 'media/img/admin/*.gif',
-                                 'media/img/admin/*.png',
-                                 'media/js/*.js',
-                                 'media/js/admin/*js'],
-        'django.contrib.comments': ['templates/comments/*.html'],
-    },
+    packages = packages,
+    data_files = data_files,
     scripts = ['django/bin/django-admin.py'],
-    zip_safe = False,
 )

Modified: vendor/django/current/tests/modeltests/basic/models.py
===================================================================
--- vendor/django/current/tests/modeltests/basic/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/basic/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -10,11 +10,13 @@
     headline = models.CharField(maxlength=100, default='Default headline')
     pub_date = models.DateTimeField()
 
+    class Meta:
+        ordering = ('pub_date','headline')
+
     def __str__(self):
         return self.headline
 
-API_TESTS = """
-
+__test__ = {'API_TESTS': """
 # No articles are in the system yet.
 >>> Article.objects.all()
 []
@@ -87,6 +89,10 @@
 >>> Article.objects.get(pk=1)
 <Article: Area woman programs in Python>
 
+# pk can be used as a shortcut for the primary key name in any query
+>>> Article.objects.filter(pk__in=[1])
+[<Article: Area woman programs in Python>]
+
 # Model instances of the same type and same ID are considered equal.
 >>> a = Article.objects.get(pk=1)
 >>> b = Article.objects.get(pk=1)
@@ -242,7 +248,7 @@
 
 # Slices (without step) are lazy:
 >>> Article.objects.all()[0:5].filter()
-[<Article: Area woman programs in Python>, <Article: Second article>, <Article: Third article>, <Article: Fourth article>, <Article: Article 6>]
+[<Article: Area woman programs in Python>, <Article: Second article>, <Article: Third article>, <Article: Article 6>, <Article: Default headline>]
 
 # Slicing again works:
 >>> Article.objects.all()[0:5][0:2]
@@ -250,17 +256,17 @@
 >>> Article.objects.all()[0:5][:2]
 [<Article: Area woman programs in Python>, <Article: Second article>]
 >>> Article.objects.all()[0:5][4:]
-[<Article: Article 6>]
+[<Article: Default headline>]
 >>> Article.objects.all()[0:5][5:]
 []
 
 # Some more tests!
 >>> Article.objects.all()[2:][0:2]
-[<Article: Third article>, <Article: Fourth article>]
+[<Article: Third article>, <Article: Article 6>]
 >>> Article.objects.all()[2:][:2]
-[<Article: Third article>, <Article: Fourth article>]
+[<Article: Third article>, <Article: Article 6>]
 >>> Article.objects.all()[2:][2:3]
-[<Article: Article 6>]
+[<Article: Default headline>]
 
 # Note that you can't use 'offset' without 'limit' (on some dbs), so this doesn't work:
 >>> Article.objects.all()[2:]
@@ -309,19 +315,18 @@
 
 # Bulk delete test: How many objects before and after the delete?
 >>> Article.objects.all()
-[<Article: Area woman programs in Python>, <Article: Second article>, <Article: Third article>, <Article: Fourth article>, <Article: Article 6>, <Article: Default headline>, <Article: Article 7>, <Article: Updated article 8>]
+[<Article: Area woman programs in Python>, <Article: Second article>, <Article: Third article>, <Article: Article 6>, <Article: Default headline>, <Article: Fourth article>, <Article: Article 7>, <Article: Updated article 8>]
 >>> Article.objects.filter(id__lte=4).delete()
 >>> Article.objects.all()
 [<Article: Article 6>, <Article: Default headline>, <Article: Article 7>, <Article: Updated article 8>]
+"""}
 
-"""
-
 from django.conf import settings
 
 building_docs = getattr(settings, 'BUILDING_DOCS', False)
 
 if building_docs or settings.DATABASE_ENGINE == 'postgresql':
-    API_TESTS += """
+    __test__['API_TESTS'] += """
 # In PostgreSQL, microsecond-level precision is available.
 >>> a9 = Article(headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180))
 >>> a9.save()
@@ -330,7 +335,7 @@
 """
 
 if building_docs or settings.DATABASE_ENGINE == 'mysql':
-    API_TESTS += """
+    __test__['API_TESTS'] += """
 # In MySQL, microsecond-level precision isn't available. You'll lose
 # microsecond-level precision once the data is saved.
 >>> a9 = Article(headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180))
@@ -339,7 +344,7 @@
 datetime.datetime(2005, 7, 31, 12, 30, 45)
 """
 
-API_TESTS += """
+__test__['API_TESTS'] += """
 
 # You can manually specify the primary key when creating a new object.
 >>> a101 = Article(id=101, headline='Article 101', pub_date=datetime(2005, 7, 31, 12, 30, 45))
@@ -352,4 +357,11 @@
 >>> a10 = Article.objects.create(headline="Article 10", pub_date=datetime(2005, 7, 31, 12, 30, 45))
 >>> Article.objects.get(headline="Article 10")
 <Article: Article 10>
+
+# Edge-case test: A year lookup should retrieve all objects in the given
+year, including Jan. 1 and Dec. 31.
+>>> a11 = Article.objects.create(headline='Article 11', pub_date=datetime(2008, 1, 1))
+>>> a12 = Article.objects.create(headline='Article 12', pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999))
+>>> Article.objects.filter(pub_date__year=2008)
+[<Article: Article 11>, <Article: Article 12>]
 """

Modified: vendor/django/current/tests/modeltests/choices/models.py
===================================================================
--- vendor/django/current/tests/modeltests/choices/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/choices/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -23,7 +23,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> a = Person(name='Adrian', gender='M')
 >>> a.save()
 >>> s = Person(name='Sara', gender='F')
@@ -36,4 +36,4 @@
 'Male'
 >>> s.get_gender_display()
 'Female'
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/custom_columns/models.py
===================================================================
--- vendor/django/current/tests/modeltests/custom_columns/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/custom_columns/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,53 +1,105 @@
 """
-17. Custom column names
+17. Custom column/table names
 
 If your database column name is different than your model attribute, use the
 ``db_column`` parameter. Note that you'll use the field's name, not its column
 name, in API usage.
+
+If your database table name is different than your model name, use the
+``db_table`` Meta attribute. This has no effect on the API used to 
+query the database.
+
+If you need to use a table name for a many-to-many relationship that differs 
+from the default generated name, use the ``db_table`` parameter on the 
+ManyToMany field. This has no effect on the API for querying the database.
+
 """
 
 from django.db import models
 
-class Person(models.Model):
+class Author(models.Model):
     first_name = models.CharField(maxlength=30, db_column='firstname')
     last_name = models.CharField(maxlength=30, db_column='last')
 
     def __str__(self):
         return '%s %s' % (self.first_name, self.last_name)
 
-API_TESTS = """
-# Create a Person.
->>> p = Person(first_name='John', last_name='Smith')
->>> p.save()
+    class Meta:
+        db_table = 'my_author_table'
+        ordering = ('last_name','first_name')
 
->>> p.id
+class Article(models.Model):
+    headline = models.CharField(maxlength=100)
+    authors = models.ManyToManyField(Author, db_table='my_m2m_table')
+
+    def __str__(self):
+        return self.headline
+
+    class Meta:
+        ordering = ('headline',)
+        
+__test__ = {'API_TESTS':"""
+# Create a Author.
+>>> a = Author(first_name='John', last_name='Smith')
+>>> a.save()
+
+>>> a.id
 1
 
->>> Person.objects.all()
-[<Person: John Smith>]
+# Create another author
+>>> a2 = Author(first_name='Peter', last_name='Jones')
+>>> a2.save()
 
->>> Person.objects.filter(first_name__exact='John')
-[<Person: John Smith>]
+# Create an article
+>>> art = Article(headline='Django lets you build web apps easily')
+>>> art.save()
+>>> art.authors = [a, a2]
 
->>> Person.objects.get(first_name__exact='John')
-<Person: John Smith>
+# Although the table and column names on Author have been set to 
+# custom values, nothing about using the Author model has changed...
 
->>> Person.objects.filter(firstname__exact='John')
+# Query the available authors
+>>> Author.objects.all()
+[<Author: Peter Jones>, <Author: John Smith>]
+
+>>> Author.objects.filter(first_name__exact='John')
+[<Author: John Smith>]
+
+>>> Author.objects.get(first_name__exact='John')
+<Author: John Smith>
+
+>>> Author.objects.filter(firstname__exact='John')
 Traceback (most recent call last):
     ...
 TypeError: Cannot resolve keyword 'firstname' into field
 
->>> p = Person.objects.get(last_name__exact='Smith')
->>> p.first_name
+>>> a = Author.objects.get(last_name__exact='Smith')
+>>> a.first_name
 'John'
->>> p.last_name
+>>> a.last_name
 'Smith'
->>> p.firstname
+>>> a.firstname
 Traceback (most recent call last):
     ...
-AttributeError: 'Person' object has no attribute 'firstname'
->>> p.last
+AttributeError: 'Author' object has no attribute 'firstname'
+>>> a.last
 Traceback (most recent call last):
     ...
-AttributeError: 'Person' object has no attribute 'last'
-"""
+AttributeError: 'Author' object has no attribute 'last'
+
+# Although the Article table uses a custom m2m table, 
+# nothing about using the m2m relationship has changed...
+
+# Get all the authors for an article
+>>> art.authors.all()
+[<Author: Peter Jones>, <Author: John Smith>]
+
+# Get the articles for an author
+>>> a.article_set.all()
+[<Article: Django lets you build web apps easily>]
+
+# Query the authors across the m2m relation
+>>> art.authors.filter(last_name='Jones')
+[<Author: Peter Jones>]
+
+"""}

Modified: vendor/django/current/tests/modeltests/custom_managers/models.py
===================================================================
--- vendor/django/current/tests/modeltests/custom_managers/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/custom_managers/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -58,7 +58,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> p1 = Person(first_name='Bugs', last_name='Bunny', fun=True)
 >>> p1.save()
 >>> p2 = Person(first_name='Droopy', last_name='Dog', fun=False)
@@ -104,4 +104,4 @@
 # to the first manager defined in the class. In this case, it's "cars".
 >>> Car._default_manager.order_by('name')
 [<Car: Corvette>, <Car: Neon>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/custom_methods/models.py
===================================================================
--- vendor/django/current/tests/modeltests/custom_methods/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/custom_methods/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -36,7 +36,7 @@
         # positional arguments to Article().
         return [self.__class__(*row) for row in cursor.fetchall()]
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a couple of Articles.
 >>> from datetime import date
 >>> a = Article(id=None, headline='Area man programs in Python', pub_date=date(2005, 7, 27))
@@ -55,4 +55,4 @@
 [<Article: Area man programs in Python>]
 >>> b.articles_from_same_day_2()
 [<Article: Area man programs in Python>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/custom_pk/models.py
===================================================================
--- vendor/django/current/tests/modeltests/custom_pk/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/custom_pk/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -27,7 +27,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> dan = Employee(employee_code='ABC123', first_name='Dan', last_name='Jones')
 >>> dan.save()
 >>> Employee.objects.all()
@@ -51,6 +51,10 @@
 >>> Employee.objects.get(employee_code__exact='ABC123')
 <Employee: Dan Jones>
 
+# pk can be used as a substitute for the primary key.
+>>> Employee.objects.filter(pk__in=['ABC123','XYZ456'])
+[<Employee: Fran Bones>, <Employee: Dan Jones>]
+
 # Fran got married and changed her last name.
 >>> fran = Employee.objects.get(pk='XYZ456')
 >>> fran.last_name = 'Jones'
@@ -88,4 +92,4 @@
 >>> Business.objects.filter(employees__first_name__startswith='Fran')
 [<Business: Sears>]
 
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/empty/models.py
===================================================================
--- vendor/django/current/tests/modeltests/empty/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/empty/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-Empty model tests
+39. Empty model tests
 
 These test that things behave sensibly for the rare corner-case of a model with
 no fields.
@@ -10,7 +10,7 @@
 class Empty(models.Model):
     pass
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> m = Empty()
 >>> m.id
 >>> m.save()
@@ -20,5 +20,7 @@
 2
 >>> m.id is not None
 True
+>>> existing = Empty(m.id)
+>>> existing.save()
 
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/field_defaults/models.py
===================================================================
--- vendor/django/current/tests/modeltests/field_defaults/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/field_defaults/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-31. Callable defaults
+32. Callable defaults
 
 You can pass callable objects as the ``default`` parameter to a field. When
 the object is created without an explicit value passed in, Django will call
@@ -19,7 +19,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> from datetime import datetime
 
 # No articles are in the system yet.
@@ -48,4 +48,4 @@
 >>> d = now - a.pub_date
 >>> d.seconds < 5
 True
-"""
+"""}

Added: vendor/django/current/tests/modeltests/fixtures/__init__.py
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2 @@
+
+

Added: vendor/django/current/tests/modeltests/fixtures/fixtures/fixture1.json
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/fixtures/fixture1.json	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/fixtures/fixture1.json	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,18 @@
+[
+    {
+        "pk": "2", 
+        "model": "fixtures.article", 
+        "fields": {
+            "headline": "Poker has no place on ESPN", 
+            "pub_date": "2006-06-16 12:00:00"
+        }
+    }, 
+    {
+        "pk": "3", 
+        "model": "fixtures.article", 
+        "fields": {
+            "headline": "Time to reform copyright", 
+            "pub_date": "2006-06-16 13:00:00"
+        }
+    }
+]
\ No newline at end of file

Added: vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.json
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.json	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.json	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,18 @@
+[
+    {
+        "pk": "3", 
+        "model": "fixtures.article", 
+        "fields": {
+            "headline": "Copyright is fine the way it is", 
+            "pub_date": "2006-06-16 14:00:00"
+        }
+    }, 
+    {
+        "pk": "4", 
+        "model": "fixtures.article", 
+        "fields": {
+            "headline": "Django conquers world!", 
+            "pub_date": "2006-06-16 15:00:00"
+        }
+    }
+]
\ No newline at end of file

Added: vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.xml
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.xml	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/fixtures/fixture2.xml	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<django-objects version="1.0">
+    <object pk="2" model="fixtures.article">
+        <field type="CharField" name="headline">Poker on TV is great!</field>
+        <field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field>
+    </object>
+    <object pk="5" model="fixtures.article">
+        <field type="CharField" name="headline">XML identified as leading cause of cancer</field>
+        <field type="DateTimeField" name="pub_date">2006-06-16 16:00:00</field>
+    </object>
+</django-objects>
\ No newline at end of file

Added: vendor/django/current/tests/modeltests/fixtures/fixtures/fixture3.xml
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/fixtures/fixture3.xml	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/fixtures/fixture3.xml	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<django-objects version="1.0">
+    <object pk="2" model="fixtures.article">
+        <field type="CharField" name="headline">Poker on TV is great!</field>
+        <field type="DateTimeField" name="pub_date">2006-06-16 11:00:00</field>
+    </object>
+    <object pk="5" model="fixtures.article">
+        <field type="CharField" name="headline">XML identified as leading cause of cancer</field>
+        <field type="DateTimeField" name="pub_date">2006-06-16 16:00:00</field>
+    </object>
+</django-objects>
\ No newline at end of file

Added: vendor/django/current/tests/modeltests/fixtures/fixtures/initial_data.json
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/fixtures/initial_data.json	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/fixtures/initial_data.json	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,10 @@
+[
+    {
+        "pk": "1", 
+        "model": "fixtures.article", 
+        "fields": {
+            "headline": "Python program becomes self aware", 
+            "pub_date": "2006-06-16 11:00:00"
+        }
+    }
+]
\ No newline at end of file

Added: vendor/django/current/tests/modeltests/fixtures/models.py
===================================================================
--- vendor/django/current/tests/modeltests/fixtures/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/fixtures/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,88 @@
+"""
+37. Fixtures.
+
+Fixtures are a way of loading data into the database in bulk. Fixure data 
+can be stored in any serializable format (including JSON and XML). Fixtures 
+are identified by name, and are stored in either a directory named 'fixtures'
+in the application directory, on in one of the directories named in the 
+FIXTURE_DIRS setting.
+"""
+
+from django.db import models
+
+class Article(models.Model):
+    headline = models.CharField(maxlength=100, default='Default headline')
+    pub_date = models.DateTimeField()
+
+    def __str__(self):
+        return self.headline
+        
+    class Meta:
+        ordering = ('-pub_date', 'headline')
+        
+__test__ = {'API_TESTS': """
+>>> from django.core import management
+>>> from django.db.models import get_app
+
+# Reset the database representation of this app. 
+# This will return the database to a clean initial state.
+>>> management.flush(verbosity=0, interactive=False)
+
+# Syncdb introduces 1 initial data object from initial_data.json.
+>>> Article.objects.all()
+[<Article: Python program becomes self aware>]
+
+# Load fixture 1. Single JSON file, with two objects.
+>>> management.load_data(['fixture1.json'], verbosity=0)
+>>> Article.objects.all()
+[<Article: Time to reform copyright>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>]
+
+# Load fixture 2. JSON file imported by default. Overwrites some existing objects
+>>> management.load_data(['fixture2.json'], verbosity=0)
+>>> Article.objects.all()
+[<Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>]
+
+# Load fixture 3, XML format. 
+>>> management.load_data(['fixture3.xml'], verbosity=0)
+>>> Article.objects.all()
+[<Article: XML identified as leading cause of cancer>, <Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker on TV is great!>, <Article: Python program becomes self aware>]
+
+# Load a fixture that doesn't exist
+>>> management.load_data(['unknown.json'], verbosity=0)
+
+# object list is unaffected
+>>> Article.objects.all()
+[<Article: XML identified as leading cause of cancer>, <Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker on TV is great!>, <Article: Python program becomes self aware>]
+
+# Reset the database representation of this app. This will delete all data.
+>>> management.flush(verbosity=0, interactive=False)
+>>> Article.objects.all()
+[<Article: Python program becomes self aware>]
+
+# Load fixture 1 again, using format discovery
+>>> management.load_data(['fixture1'], verbosity=0)
+>>> Article.objects.all()
+[<Article: Time to reform copyright>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>]
+
+# Try to load fixture 2 using format discovery; this will fail
+# because there are two fixture2's in the fixtures directory 
+>>> management.load_data(['fixture2'], verbosity=0) # doctest: +ELLIPSIS
+Multiple fixtures named 'fixture2' in '...fixtures'. Aborting.
+
+>>> Article.objects.all()
+[<Article: Time to reform copyright>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>]
+
+# Dump the current contents of the database as a JSON fixture
+>>> print management.dump_data(['fixtures'], format='json')
+[{"pk": "3", "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": "2", "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": "1", "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]
+"""}
+
+from django.test import TestCase
+
+class SampleTestCase(TestCase):
+    fixtures = ['fixture1.json', 'fixture2.json']
+        
+    def testClassFixtures(self):
+        "Check that test case has installed 4 fixture objects"
+        self.assertEqual(Article.objects.count(), 4)
+        self.assertEquals(str(Article.objects.all()), "[<Article: Django conquers world!>, <Article: Copyright is fine the way it is>, <Article: Poker has no place on ESPN>, <Article: Python program becomes self aware>]")

Modified: vendor/django/current/tests/modeltests/generic_relations/models.py
===================================================================
--- vendor/django/current/tests/modeltests/generic_relations/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/generic_relations/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-33. Generic relations
+34. Generic relations
 
 Generic relations let an object have a foreign key to any object through a
 content-type/object-id field. A generic foreign key can point to any object,
@@ -53,7 +53,7 @@
     def __str__(self):
         return self.name
         
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create the world in 7 lines of code...
 >>> lion = Animal(common_name="Lion", latin_name="Panthera leo")
 >>> platypus = Animal(common_name="Platypus", latin_name="Ornithorhynchus anatinus")
@@ -65,14 +65,14 @@
 
 # Objects with declared GenericRelations can be tagged directly -- the API
 # mimics the many-to-many API.
+>>> bacon.tags.create(tag="fatty")
+<TaggedItem: fatty>
+>>> bacon.tags.create(tag="salty")
+<TaggedItem: salty>
 >>> lion.tags.create(tag="yellow")
 <TaggedItem: yellow>
 >>> lion.tags.create(tag="hairy")
 <TaggedItem: hairy>
->>> bacon.tags.create(tag="fatty")
-<TaggedItem: fatty>
->>> bacon.tags.create(tag="salty")
-<TaggedItem: salty>
 
 >>> lion.tags.all()
 [<TaggedItem: hairy>, <TaggedItem: yellow>]
@@ -105,4 +105,30 @@
 [<TaggedItem: shiny>]
 >>> TaggedItem.objects.filter(content_type__pk=ctype.id, object_id=quartz.id)
 [<TaggedItem: clearish>]
-"""
+
+# If you delete an object with an explicit Generic relation, the related
+# objects are deleted when the source object is deleted.
+# Original list of tags:
+>>> [(t.tag, t.content_type, t.object_id) for t in TaggedItem.objects.all()]
+[('clearish', <ContentType: mineral>, 1), ('fatty', <ContentType: vegetable>, 2), ('hairy', <ContentType: animal>, 1), ('salty', <ContentType: vegetable>, 2), ('shiny', <ContentType: animal>, 2), ('yellow', <ContentType: animal>, 1)]
+
+>>> lion.delete()
+>>> [(t.tag, t.content_type, t.object_id) for t in TaggedItem.objects.all()]
+[('clearish', <ContentType: mineral>, 1), ('fatty', <ContentType: vegetable>, 2), ('salty', <ContentType: vegetable>, 2), ('shiny', <ContentType: animal>, 2)]
+
+# If Generic Relation is not explicitly defined, any related objects 
+# remain after deletion of the source object.
+>>> quartz.delete()
+>>> [(t.tag, t.content_type, t.object_id) for t in TaggedItem.objects.all()]
+[('clearish', <ContentType: mineral>, 1), ('fatty', <ContentType: vegetable>, 2), ('salty', <ContentType: vegetable>, 2), ('shiny', <ContentType: animal>, 2)]
+
+# If you delete a tag, the objects using the tag are unaffected 
+# (other than losing a tag)
+>>> tag = TaggedItem.objects.get(id=1)
+>>> tag.delete()
+>>> bacon.tags.all()
+[<TaggedItem: salty>]
+>>> [(t.tag, t.content_type, t.object_id) for t in TaggedItem.objects.all()]
+[('clearish', <ContentType: mineral>, 1), ('salty', <ContentType: vegetable>, 2), ('shiny', <ContentType: animal>, 2)]
+
+"""}

Modified: vendor/django/current/tests/modeltests/get_latest/models.py
===================================================================
--- vendor/django/current/tests/modeltests/get_latest/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/get_latest/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -3,9 +3,9 @@
 
 Models can have a ``get_latest_by`` attribute, which should be set to the name
 of a DateField or DateTimeField. If ``get_latest_by`` exists, the model's
-module will get a ``get_latest()`` function, which will return the latest
-object in the database according to that field. "Latest" means "having the
-date farthest into the future."
+manager will get a ``latest()`` method, which will return the latest object in
+the database according to that field. "Latest" means "having the date farthest
+into the future."
 """
 
 from django.db import models
@@ -29,8 +29,8 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
-# Because no Articles exist yet, get_latest() raises ArticleDoesNotExist.
+__test__ = {'API_TESTS':"""
+# Because no Articles exist yet, latest() raises ArticleDoesNotExist.
 >>> Article.objects.latest()
 Traceback (most recent call last):
     ...
@@ -76,4 +76,4 @@
 
 >>> Person.objects.latest('birthday')
 <Person: Stephanie>
-"""
+"""}

Added: vendor/django/current/tests/modeltests/get_object_or_404/__init__.py
===================================================================

Added: vendor/django/current/tests/modeltests/get_object_or_404/models.py
===================================================================
--- vendor/django/current/tests/modeltests/get_object_or_404/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/get_object_or_404/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,86 @@
+"""
+35. DB-API Shortcuts
+
+get_object_or_404 is a shortcut function to be used in view functions for
+performing a get() lookup and raising a Http404 exception if a DoesNotExist
+exception was rasied during the get() call.
+
+get_list_or_404 is a shortcut function to be used in view functions for
+performing a filter() lookup and raising a Http404 exception if a DoesNotExist
+exception was rasied during the filter() call.
+"""
+
+from django.db import models
+from django.http import Http404
+from django.shortcuts import get_object_or_404, get_list_or_404
+
+class Author(models.Model):
+    name = models.CharField(maxlength=50)
+    
+    def __str__(self):
+        return self.name
+
+class ArticleManager(models.Manager):
+    def get_query_set(self):
+        return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir')
+
+class Article(models.Model):
+    authors = models.ManyToManyField(Author)
+    title = models.CharField(maxlength=50)
+    objects = models.Manager()
+    by_a_sir = ArticleManager()
+    
+    def __str__(self):
+        return self.title
+
+__test__ = {'API_TESTS':"""
+# Create some Authors.
+>>> a = Author.objects.create(name="Brave Sir Robin")
+>>> a.save()
+>>> a2 = Author.objects.create(name="Patsy")
+>>> a2.save()
+
+# No Articles yet, so we should get a Http404 error.
+>>> get_object_or_404(Article, title="Foo")
+Traceback (most recent call last):
+...
+Http404: No Article matches the given query.
+
+# Create an Article.
+>>> article = Article.objects.create(title="Run away!")
+>>> article.authors = [a, a2]
+>>> article.save()
+
+# get_object_or_404 can be passed a Model to query.
+>>> get_object_or_404(Article, title__contains="Run")
+<Article: Run away!>
+
+# We can also use the the Article manager through an Author object.
+>>> get_object_or_404(a.article_set, title__contains="Run")
+<Article: Run away!>
+
+# No articles containing "Camelot".  This should raise a Http404 error.
+>>> get_object_or_404(a.article_set, title__contains="Camelot")
+Traceback (most recent call last):
+...
+Http404: No Article matches the given query.
+
+# Custom managers can be used too.
+>>> get_object_or_404(Article.by_a_sir, title="Run away!")
+<Article: Run away!>
+
+# get_list_or_404 can be used to get lists of objects
+>>> get_list_or_404(a.article_set, title__icontains='Run')
+[<Article: Run away!>]
+
+# Http404 is returned if the list is empty
+>>> get_list_or_404(a.article_set, title__icontains='Shrubbery')
+Traceback (most recent call last):
+...
+Http404: No Article matches the given query.
+
+# Custom managers can be used too.
+>>> get_list_or_404(Article.by_a_sir, title__icontains="Run")
+[<Article: Run away!>]
+
+"""}

Modified: vendor/django/current/tests/modeltests/get_or_create/models.py
===================================================================
--- vendor/django/current/tests/modeltests/get_or_create/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/get_or_create/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-32. get_or_create()
+33. get_or_create()
 
 get_or_create() does what it says: it tries to look up an object with the given
 parameters. If an object isn't found, it creates one with the given parameters.
@@ -15,7 +15,7 @@
     def __str__(self):
         return '%s %s' % (self.first_name, self.last_name)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Acting as a divine being, create an Person.
 >>> from datetime import date
 >>> p = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
@@ -49,4 +49,4 @@
 False
 >>> Person.objects.count()
 2
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/invalid_models/models.py
===================================================================
--- vendor/django/current/tests/modeltests/invalid_models/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/invalid_models/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -68,17 +68,36 @@
     foreign_1 = models.ForeignKey("SelfClashForeign", related_name='id')
     foreign_2 = models.ForeignKey("SelfClashForeign", related_name='src_safe')
 
+class ValidM2M(models.Model):
+    src_safe = models.CharField(maxlength=10)
+    validm2m = models.CharField(maxlength=10)
+
+    # M2M fields are symmetrical by default. Symmetrical M2M fields
+    # on self don't require a related accessor, so many potential
+    # clashes are avoided.
+    validm2m_set = models.ManyToManyField("ValidM2M")
+    
+    m2m_1 = models.ManyToManyField("ValidM2M", related_name='id')
+    m2m_2 = models.ManyToManyField("ValidM2M", related_name='src_safe')
+
+    m2m_3 = models.ManyToManyField('self')
+    m2m_4 = models.ManyToManyField('self')
+
 class SelfClashM2M(models.Model):
     src_safe = models.CharField(maxlength=10)
     selfclashm2m = models.CharField(maxlength=10)
 
-    selfclashm2m_set = models.ManyToManyField("SelfClashM2M")
-    m2m_1 = models.ManyToManyField("SelfClashM2M", related_name='id')
-    m2m_2 = models.ManyToManyField("SelfClashM2M", related_name='src_safe')
+    # Non-symmetrical M2M fields _do_ have related accessors, so 
+    # there is potential for clashes.
+    selfclashm2m_set = models.ManyToManyField("SelfClashM2M", symmetrical=False)
+    
+    m2m_1 = models.ManyToManyField("SelfClashM2M", related_name='id', symmetrical=False)
+    m2m_2 = models.ManyToManyField("SelfClashM2M", related_name='src_safe', symmetrical=False)
 
+    m2m_3 = models.ManyToManyField('self', symmetrical=False)
+    m2m_4 = models.ManyToManyField('self', symmetrical=False)
 
-
-error_log = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute.
+model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute.
 invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places" attribute.
 invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute.
 invalid_models.fielderrors: "filefield": FileFields require an "upload_to" attribute.
@@ -147,9 +166,17 @@
 invalid_models.selfclashforeign: Reverse query name for field 'foreign_2' clashes with field 'SelfClashForeign.src_safe'. Add a related_name argument to the definition for 'foreign_2'.
 invalid_models.selfclashm2m: Accessor for m2m field 'selfclashm2m_set' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'selfclashm2m_set'.
 invalid_models.selfclashm2m: Reverse query name for m2m field 'selfclashm2m_set' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'selfclashm2m_set'.
+invalid_models.selfclashm2m: Accessor for m2m field 'selfclashm2m_set' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'selfclashm2m_set'.
 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_1' clashes with field 'SelfClashM2M.id'. Add a related_name argument to the definition for 'm2m_1'.
 invalid_models.selfclashm2m: Accessor for m2m field 'm2m_2' clashes with field 'SelfClashM2M.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_1' clashes with field 'SelfClashM2M.id'. Add a related_name argument to the definition for 'm2m_1'.
 invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_2' clashes with field 'SelfClashM2M.src_safe'. Add a related_name argument to the definition for 'm2m_2'.
+invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
+invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
+invalid_models.selfclashm2m: Accessor for m2m field 'm2m_3' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_3'.
+invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
+invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
+invalid_models.selfclashm2m: Accessor for m2m field 'm2m_4' clashes with related m2m field 'SelfClashM2M.selfclashm2m_set'. Add a related_name argument to the definition for 'm2m_4'.
+invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_3' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_3'.
+invalid_models.selfclashm2m: Reverse query name for m2m field 'm2m_4' clashes with field 'SelfClashM2M.selfclashm2m'. Add a related_name argument to the definition for 'm2m_4'.
 """
-

Modified: vendor/django/current/tests/modeltests/lookup/models.py
===================================================================
--- vendor/django/current/tests/modeltests/lookup/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/lookup/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -15,7 +15,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':r"""
 # Create a couple of Articles.
 >>> from datetime import datetime
 >>> a1 = Article(headline='Article 1', pub_date=datetime(2005, 7, 26))
@@ -58,6 +58,17 @@
 >>> Article.objects.filter(headline__startswith='Blah blah').count()
 0L
 
+# count() should respect sliced query sets.
+>>> articles = Article.objects.all()
+>>> articles.count()
+7L
+>>> articles[:4].count()
+4
+>>> articles[1:100].count()
+6L
+>>> articles[10:100].count()
+0
+
 # Date and date/time lookups can also be done with strings.
 >>> Article.objects.filter(pub_date__exact='2005-07-27 00:00:00').count()
 3L
@@ -161,13 +172,14 @@
 <Article: Article 1>
 
 # Underscores and percent signs have special meaning in the underlying
-# database library, but Django handles the quoting of them automatically.
+# SQL code, but Django handles the quoting of them automatically.
 >>> a8 = Article(headline='Article_ with underscore', pub_date=datetime(2005, 11, 20))
 >>> a8.save()
 >>> Article.objects.filter(headline__startswith='Article')
 [<Article: Article_ with underscore>, <Article: Article 5>, <Article: Article 6>, <Article: Article 4>, <Article: Article 2>, <Article: Article 3>, <Article: Article 7>, <Article: Article 1>]
 >>> Article.objects.filter(headline__startswith='Article_')
 [<Article: Article_ with underscore>]
+
 >>> a9 = Article(headline='Article% with percent sign', pub_date=datetime(2005, 11, 21))
 >>> a9.save()
 >>> Article.objects.filter(headline__startswith='Article')
@@ -182,4 +194,40 @@
 [<Article: Article% with percent sign>, <Article: Article 5>, <Article: Article 6>, <Article: Article 4>, <Article: Article 2>, <Article: Article 3>, <Article: Article 7>, <Article: Article 1>]
 >>> Article.objects.exclude(headline="Article 7")
 [<Article: Article% with percent sign>, <Article: Article_ with underscore>, <Article: Article 5>, <Article: Article 6>, <Article: Article 4>, <Article: Article 2>, <Article: Article 3>, <Article: Article 1>]
-"""
+
+# Backslashes also have special meaning in the underlying SQL code, but Django
+# automatically quotes them appropriately.
+>>> a10 = Article(headline='Article with \\ backslash', pub_date=datetime(2005, 11, 22))
+>>> a10.save()
+>>> Article.objects.filter(headline__contains='\\')
+[<Article: Article with \ backslash>]
+
+# none() returns an EmptyQuerySet that behaves like any other QuerySet object
+>>> Article.objects.none()
+[]
+>>> Article.objects.none().filter(headline__startswith='Article')
+[]
+>>> Article.objects.none().count()
+0
+>>> [article for article in Article.objects.none().iterator()]
+[]
+
+# using __in with an empty list should return an empty query set
+>>> Article.objects.filter(id__in=[])
+[]
+
+>>> Article.objects.exclude(id__in=[])
+[<Article: Article with \ backslash>, <Article: Article% with percent sign>, <Article: Article_ with underscore>, <Article: Article 5>, <Article: Article 6>, <Article: Article 4>, <Article: Article 2>, <Article: Article 3>, <Article: Article 7>, <Article: Article 1>]
+
+# Programming errors are pointed out with nice error messages
+>>> Article.objects.filter(pub_date_year='2005').count()
+Traceback (most recent call last):
+    ...
+TypeError: Cannot resolve keyword 'pub_date_year' into field
+
+>>> Article.objects.filter(headline__starts='Article')
+Traceback (most recent call last):
+    ...
+TypeError: Cannot resolve keyword 'headline__starts' into field
+
+"""}

Modified: vendor/django/current/tests/modeltests/m2m_and_m2o/models.py
===================================================================
--- vendor/django/current/tests/modeltests/m2m_and_m2o/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/m2m_and_m2o/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-28. Many-to-many and many-to-one relationships to the same table
+29. Many-to-many and many-to-one relationships to the same table
 
 Make sure to set ``related_name`` if you use relationships to the same table.
 """
@@ -21,7 +21,7 @@
         ordering = ('num',)
 
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> Issue.objects.all()
 []
 >>> r = User(username='russell')
@@ -62,4 +62,4 @@
 [<Issue: 1>, <Issue: 2>, <Issue: 3>]
 >>> Issue.objects.filter(Q(client=r.id) | Q(cc__id__exact=r.id))
 [<Issue: 1>, <Issue: 2>, <Issue: 3>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/m2m_intermediary/models.py
===================================================================
--- vendor/django/current/tests/modeltests/m2m_intermediary/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/m2m_intermediary/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -34,7 +34,7 @@
     def __str__(self):
         return '%s (%s)' % (self.reporter, self.position)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a few Reporters.
 >>> r1 = Reporter(first_name='John', last_name='Smith')
 >>> r1.save()
@@ -65,4 +65,4 @@
 <Article: This is a test>
 >>> r1.writer_set.all()
 [<Writer: John Smith (Main writer)>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/m2m_multiple/models.py
===================================================================
--- vendor/django/current/tests/modeltests/m2m_multiple/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/m2m_multiple/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -28,7 +28,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> from datetime import datetime
 
 >>> c1 = Category(name='Sports')
@@ -76,4 +76,4 @@
 []
 >>> c4.secondary_article_set.all()
 [<Article: Area man steals>, <Article: Area man runs>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/m2m_recursive/models.py
===================================================================
--- vendor/django/current/tests/modeltests/m2m_recursive/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/m2m_recursive/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-27. Many-to-many relationships between the same two tables
+28. Many-to-many relationships between the same two tables
 
 In this example, A Person can have many friends, who are also people. Friendship is a
 symmetrical relationship - if I am your friend, you are my friend.
@@ -22,7 +22,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> a = Person(name='Anne')
 >>> a.save()
 >>> b = Person(name='Bill')
@@ -189,4 +189,4 @@
 >>> d.stalkers.all()
 [<Person: Chuck>]
 
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/m2o_recursive/models.py
===================================================================
--- vendor/django/current/tests/modeltests/m2o_recursive/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/m2o_recursive/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -19,7 +19,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a few Category objects.
 >>> r = Category(id=None, name='Root category', parent=None)
 >>> r.save()
@@ -37,4 +37,4 @@
 []
 >>> c.parent
 <Category: Root category>
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/m2o_recursive2/models.py
===================================================================
--- vendor/django/current/tests/modeltests/m2o_recursive2/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/m2o_recursive2/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,7 +17,7 @@
     def __str__(self):
         return self.full_name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create two Person objects -- the mom and dad in our family.
 >>> dad = Person(full_name='John Smith Senior', mother=None, father=None)
 >>> dad.save()
@@ -40,4 +40,4 @@
 []
 >>> kid.fathers_child_set.all()
 []
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/manipulators/models.py
===================================================================
--- vendor/django/current/tests/modeltests/manipulators/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/manipulators/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-26. Default manipulators
+27. Default manipulators
 
 Each model gets an AddManipulator and ChangeManipulator by default.
 """
@@ -21,7 +21,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> from django.utils.datastructures import MultiValueDict
 
 # Create a Musician object via the default AddManipulator.
@@ -88,4 +88,4 @@
 <Album: Ultimate Ella>
 >>> a2.release_date
 datetime.date(2005, 2, 13)
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/many_to_many/models.py
===================================================================
--- vendor/django/current/tests/modeltests/many_to_many/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/many_to_many/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -28,7 +28,7 @@
     class Meta:
         ordering = ('headline',)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a couple of Publications.
 >>> p1 = Publication(id=None, title='The Python Journal')
 >>> p1.save()
@@ -203,7 +203,19 @@
 >>> p2.article_set.all()
 [<Article: Oxygen-free diet works wonders>]
 
-# Recreate the article and Publication we just deleted.
+# Relation sets can also be set using primary key values
+>>> p2.article_set = [a4.id, a5.id]
+>>> p2.article_set.all()
+[<Article: NASA finds intelligent life on Earth>, <Article: Oxygen-free diet works wonders>]
+>>> a4.publications.all()
+[<Publication: Science News>]
+>>> a4.publications = [p3.id]
+>>> p2.article_set.all()
+[<Article: Oxygen-free diet works wonders>]
+>>> a4.publications.all()
+[<Publication: Science Weekly>]
+
+# Recreate the article and Publication we have deleted.
 >>> p1 = Publication(id=None, title='The Python Journal')
 >>> p1.save()
 >>> a2 = Article(id=None, headline='NASA uses Python')
@@ -231,4 +243,16 @@
 >>> p1.article_set.all()
 [<Article: NASA uses Python>]
 
-"""
+# An alternate to calling clear() is to assign the empty set
+>>> p1.article_set = []
+>>> p1.article_set.all()
+[]
+
+>>> a2.publications = [p1, new_publication]
+>>> a2.publications.all()
+[<Publication: Highlights for Children>, <Publication: The Python Journal>]
+>>> a2.publications = []
+>>> a2.publications.all()
+[]
+
+"""}

Modified: vendor/django/current/tests/modeltests/many_to_one/models.py
===================================================================
--- vendor/django/current/tests/modeltests/many_to_one/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/many_to_one/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -25,7 +25,7 @@
     class Meta:
         ordering = ('headline',)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a few Reporters.
 >>> r = Reporter(first_name='John', last_name='Smith', email='john at example.com')
 >>> r.save()
@@ -263,4 +263,4 @@
 >>> Article.objects.all()
 []
 
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/many_to_one_null/models.py
===================================================================
--- vendor/django/current/tests/modeltests/many_to_one_null/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/many_to_one_null/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -23,7 +23,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a Reporter.
 >>> r = Reporter(name='John Smith')
 >>> r.save()
@@ -121,4 +121,4 @@
 >>> Article.objects.filter(reporter__isnull=True)
 [<Article: First>, <Article: Fourth>]
 
-"""
+"""}

Added: vendor/django/current/tests/modeltests/model_forms/__init__.py
===================================================================

Added: vendor/django/current/tests/modeltests/model_forms/models.py
===================================================================
--- vendor/django/current/tests/modeltests/model_forms/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/model_forms/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,464 @@
+"""
+36. Generating HTML forms from models
+
+Django provides shortcuts for creating Form objects from a model class and a
+model instance.
+
+The function django.newforms.form_for_model() takes a model class and returns
+a Form that is tied to the model. This Form works just like any other Form,
+with one additional method: save(). The save() method creates an instance
+of the model and returns that newly created instance. It saves the instance to
+the database if save(commit=True), which is default. If you pass
+commit=False, then you'll get the object without committing the changes to the
+database.
+
+The function django.newforms.form_for_instance() takes a model instance and
+returns a Form that is tied to the instance. This form works just like any
+other Form, with one additional method: save(). The save()
+method updates the model instance. It also takes a commit=True parameter.
+
+The function django.newforms.save_instance() takes a bound form instance and a
+model instance and saves the form's clean_data into the instance. It also takes
+a commit=True parameter.
+"""
+
+from django.db import models
+
+class Category(models.Model):
+    name = models.CharField(maxlength=20)
+    url = models.CharField('The URL', maxlength=40)
+
+    def __str__(self):
+        return self.name
+
+class Writer(models.Model):
+    name = models.CharField(maxlength=50, help_text='Use both first and last names.')
+
+    def __str__(self):
+        return self.name
+
+class Article(models.Model):
+    headline = models.CharField(maxlength=50)
+    pub_date = models.DateField()
+    created = models.DateField(editable=False)
+    writer = models.ForeignKey(Writer)
+    article = models.TextField()
+    categories = models.ManyToManyField(Category, blank=True)
+
+    def save(self):
+        import datetime
+        if not self.id:
+            self.created = datetime.date.today()
+        return super(Article, self).save()
+
+    def __str__(self):
+        return self.headline
+
+class PhoneNumber(models.Model):
+    phone = models.PhoneNumberField()
+    description = models.CharField(maxlength=20)
+
+    def __str__(self):
+        return self.phone
+
+__test__ = {'API_TESTS': """
+>>> from django.newforms import form_for_model, form_for_instance, save_instance, BaseForm, Form, CharField
+>>> import datetime
+
+>>> Category.objects.all()
+[]
+
+>>> CategoryForm = form_for_model(Category)
+>>> f = CategoryForm()
+>>> print f
+<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" maxlength="20" /></td></tr>
+<tr><th><label for="id_url">The URL:</label></th><td><input id="id_url" type="text" name="url" maxlength="40" /></td></tr>
+>>> print f.as_ul()
+<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="20" /></li>
+<li><label for="id_url">The URL:</label> <input id="id_url" type="text" name="url" maxlength="40" /></li>
+>>> print f['name']
+<input id="id_name" type="text" name="name" maxlength="20" />
+
+>>> f = CategoryForm(auto_id=False)
+>>> print f.as_ul()
+<li>Name: <input type="text" name="name" maxlength="20" /></li>
+<li>The URL: <input type="text" name="url" maxlength="40" /></li>
+
+>>> f = CategoryForm({'name': 'Entertainment', 'url': 'entertainment'})
+>>> f.is_valid()
+True
+>>> f.clean_data
+{'url': u'entertainment', 'name': u'Entertainment'}
+>>> obj = f.save()
+>>> obj
+<Category: Entertainment>
+>>> Category.objects.all()
+[<Category: Entertainment>]
+
+>>> f = CategoryForm({'name': "It's a test", 'url': 'test'})
+>>> f.is_valid()
+True
+>>> f.clean_data
+{'url': u'test', 'name': u"It's a test"}
+>>> obj = f.save()
+>>> obj
+<Category: It's a test>
+>>> Category.objects.all()
+[<Category: Entertainment>, <Category: It's a test>]
+
+If you call save() with commit=False, then it will return an object that
+hasn't yet been saved to the database. In this case, it's up to you to call
+save() on the resulting model instance.
+>>> f = CategoryForm({'name': 'Third test', 'url': 'third'})
+>>> f.is_valid()
+True
+>>> f.clean_data
+{'url': u'third', 'name': u'Third test'}
+>>> obj = f.save(commit=False)
+>>> obj
+<Category: Third test>
+>>> Category.objects.all()
+[<Category: Entertainment>, <Category: It's a test>]
+>>> obj.save()
+>>> Category.objects.all()
+[<Category: Entertainment>, <Category: It's a test>, <Category: Third test>]
+
+If you call save() with invalid data, you'll get a ValueError.
+>>> f = CategoryForm({'name': '', 'url': 'foo'})
+>>> f.errors
+{'name': [u'This field is required.']}
+>>> f.clean_data
+Traceback (most recent call last):
+...
+AttributeError: 'CategoryForm' object has no attribute 'clean_data'
+>>> f.save()
+Traceback (most recent call last):
+...
+ValueError: The Category could not be created because the data didn't validate.
+>>> f = CategoryForm({'name': '', 'url': 'foo'})
+>>> f.save()
+Traceback (most recent call last):
+...
+ValueError: The Category could not be created because the data didn't validate.
+
+Create a couple of Writers.
+>>> w = Writer(name='Mike Royko')
+>>> w.save()
+>>> w = Writer(name='Bob Woodward')
+>>> w.save()
+
+ManyToManyFields are represented by a MultipleChoiceField, and ForeignKeys are
+represented by a ChoiceField.
+>>> ArticleForm = form_for_model(Article)
+>>> f = ArticleForm(auto_id=False)
+>>> print f
+<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" /></td></tr>
+<tr><th>Pub date:</th><td><input type="text" name="pub_date" /></td></tr>
+<tr><th>Writer:</th><td><select name="writer">
+<option value="" selected="selected">---------</option>
+<option value="1">Mike Royko</option>
+<option value="2">Bob Woodward</option>
+</select></td></tr>
+<tr><th>Article:</th><td><textarea name="article"></textarea></td></tr>
+<tr><th>Categories:</th><td><select multiple="multiple" name="categories">
+<option value="1">Entertainment</option>
+<option value="2">It&#39;s a test</option>
+<option value="3">Third test</option>
+</select><br /> Hold down "Control", or "Command" on a Mac, to select more than one.</td></tr>
+
+You can pass a custom Form class to form_for_model. Make sure it's a
+subclass of BaseForm, not Form.
+>>> class CustomForm(BaseForm):
+...     def say_hello(self):
+...         print 'hello'
+>>> CategoryForm = form_for_model(Category, form=CustomForm)
+>>> f = CategoryForm()
+>>> f.say_hello()
+hello
+
+Use form_for_instance to create a Form from a model instance. The difference
+between this Form and one created via form_for_model is that the object's
+current values are inserted as 'initial' data in each Field.
+>>> w = Writer.objects.get(name='Mike Royko')
+>>> RoykoForm = form_for_instance(w)
+>>> f = RoykoForm(auto_id=False)
+>>> print f
+<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" /><br />Use both first and last names.</td></tr>
+
+>>> art = Article(headline='Test article', pub_date=datetime.date(1988, 1, 4), writer=w, article='Hello.')
+>>> art.save()
+>>> art.id
+1
+>>> TestArticleForm = form_for_instance(art)
+>>> f = TestArticleForm(auto_id=False)
+>>> print f.as_ul()
+<li>Headline: <input type="text" name="headline" value="Test article" maxlength="50" /></li>
+<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" /></li>
+<li>Writer: <select name="writer">
+<option value="">---------</option>
+<option value="1" selected="selected">Mike Royko</option>
+<option value="2">Bob Woodward</option>
+</select></li>
+<li>Article: <textarea name="article">Hello.</textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="1">Entertainment</option>
+<option value="2">It&#39;s a test</option>
+<option value="3">Third test</option>
+</select>  Hold down "Control", or "Command" on a Mac, to select more than one.</li>
+>>> f = TestArticleForm({'headline': u'New headline', 'pub_date': u'1988-01-04', 'writer': u'1', 'article': 'Hello.'})
+>>> f.is_valid()
+True
+>>> new_art = f.save()
+>>> new_art.id
+1
+>>> new_art = Article.objects.get(id=1)
+>>> new_art.headline
+'New headline'
+
+Add some categories and test the many-to-many form output.
+>>> new_art.categories.all()
+[]
+>>> new_art.categories.add(Category.objects.get(name='Entertainment'))
+>>> new_art.categories.all()
+[<Category: Entertainment>]
+>>> TestArticleForm = form_for_instance(new_art)
+>>> f = TestArticleForm(auto_id=False)
+>>> print f.as_ul()
+<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" /></li>
+<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" /></li>
+<li>Writer: <select name="writer">
+<option value="">---------</option>
+<option value="1" selected="selected">Mike Royko</option>
+<option value="2">Bob Woodward</option>
+</select></li>
+<li>Article: <textarea name="article">Hello.</textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="1" selected="selected">Entertainment</option>
+<option value="2">It&#39;s a test</option>
+<option value="3">Third test</option>
+</select>  Hold down "Control", or "Command" on a Mac, to select more than one.</li>
+
+>>> f = TestArticleForm({'headline': u'New headline', 'pub_date': u'1988-01-04',
+...     'writer': u'1', 'article': u'Hello.', 'categories': [u'1', u'2']})
+>>> new_art = f.save()
+>>> new_art.id
+1
+>>> new_art = Article.objects.get(id=1)
+>>> new_art.categories.all()
+[<Category: Entertainment>, <Category: It's a test>]
+
+Now, submit form data with no categories. This deletes the existing categories.
+>>> f = TestArticleForm({'headline': u'New headline', 'pub_date': u'1988-01-04',
+...     'writer': u'1', 'article': u'Hello.'})
+>>> new_art = f.save()
+>>> new_art.id
+1
+>>> new_art = Article.objects.get(id=1)
+>>> new_art.categories.all()
+[]
+
+Create a new article, with categories, via the form.
+>>> ArticleForm = form_for_model(Article)
+>>> f = ArticleForm({'headline': u'The walrus was Paul', 'pub_date': u'1967-11-01',
+...     'writer': u'1', 'article': u'Test.', 'categories': [u'1', u'2']})
+>>> new_art = f.save()
+>>> new_art.id
+2
+>>> new_art = Article.objects.get(id=2)
+>>> new_art.categories.all()
+[<Category: Entertainment>, <Category: It's a test>]
+
+Create a new article, with no categories, via the form.
+>>> ArticleForm = form_for_model(Article)
+>>> f = ArticleForm({'headline': u'The walrus was Paul', 'pub_date': u'1967-11-01',
+...     'writer': u'1', 'article': u'Test.'})
+>>> new_art = f.save()
+>>> new_art.id
+3
+>>> new_art = Article.objects.get(id=3)
+>>> new_art.categories.all()
+[]
+
+Here, we define a custom Form. Because it happens to have the same fields as
+the Category model, we can use save_instance() to apply its changes to an
+existing Category instance.
+>>> class ShortCategory(Form):
+...     name = CharField(max_length=5)
+...     url = CharField(max_length=3)
+>>> cat = Category.objects.get(name='Third test')
+>>> cat
+<Category: Third test>
+>>> cat.id
+3
+>>> sc = ShortCategory({'name': 'Third', 'url': '3rd'})
+>>> save_instance(sc, cat)
+<Category: Third>
+>>> Category.objects.get(id=3)
+<Category: Third>
+
+Here, we demonstrate that choices for a ForeignKey ChoiceField are determined
+at runtime, based on the data in the database when the form is displayed, not
+the data in the database when the form is instantiated.
+>>> ArticleForm = form_for_model(Article)
+>>> f = ArticleForm(auto_id=False)
+>>> print f.as_ul()
+<li>Headline: <input type="text" name="headline" maxlength="50" /></li>
+<li>Pub date: <input type="text" name="pub_date" /></li>
+<li>Writer: <select name="writer">
+<option value="" selected="selected">---------</option>
+<option value="1">Mike Royko</option>
+<option value="2">Bob Woodward</option>
+</select></li>
+<li>Article: <textarea name="article"></textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="1">Entertainment</option>
+<option value="2">It&#39;s a test</option>
+<option value="3">Third</option>
+</select>  Hold down "Control", or "Command" on a Mac, to select more than one.</li>
+>>> Category.objects.create(name='Fourth', url='4th')
+<Category: Fourth>
+>>> Writer.objects.create(name='Carl Bernstein')
+<Writer: Carl Bernstein>
+>>> print f.as_ul()
+<li>Headline: <input type="text" name="headline" maxlength="50" /></li>
+<li>Pub date: <input type="text" name="pub_date" /></li>
+<li>Writer: <select name="writer">
+<option value="" selected="selected">---------</option>
+<option value="1">Mike Royko</option>
+<option value="2">Bob Woodward</option>
+<option value="3">Carl Bernstein</option>
+</select></li>
+<li>Article: <textarea name="article"></textarea></li>
+<li>Categories: <select multiple="multiple" name="categories">
+<option value="1">Entertainment</option>
+<option value="2">It&#39;s a test</option>
+<option value="3">Third</option>
+<option value="4">Fourth</option>
+</select>  Hold down "Control", or "Command" on a Mac, to select more than one.</li>
+
+# ModelChoiceField ############################################################
+
+>>> from django.newforms import ModelChoiceField, ModelMultipleChoiceField
+
+>>> f = ModelChoiceField(Category.objects.all())
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(0)
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
+>>> f.clean(3)
+<Category: Third>
+>>> f.clean(2)
+<Category: It's a test>
+
+# Add a Category object *after* the ModelChoiceField has already been
+# instantiated. This proves clean() checks the database during clean() rather
+# than caching it at time of instantiation.
+>>> Category.objects.create(name='Fifth', url='5th')
+<Category: Fifth>
+>>> f.clean(5)
+<Category: Fifth>
+
+# Delete a Category object *after* the ModelChoiceField has already been
+# instantiated. This proves clean() checks the database during clean() rather
+# than caching it at time of instantiation.
+>>> Category.objects.get(url='5th').delete()
+>>> f.clean(5)
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
+
+>>> f = ModelChoiceField(Category.objects.filter(pk=1), required=False)
+>>> print f.clean('')
+None
+>>> f.clean('')
+>>> f.clean('1')
+<Category: Entertainment>
+>>> f.clean('100')
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
+
+# ModelMultipleChoiceField ####################################################
+
+>>> f = ModelMultipleChoiceField(Category.objects.all())
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean([])
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean([1])
+[<Category: Entertainment>]
+>>> f.clean([2])
+[<Category: It's a test>]
+>>> f.clean(['1'])
+[<Category: Entertainment>]
+>>> f.clean(['1', '2'])
+[<Category: Entertainment>, <Category: It's a test>]
+>>> f.clean([1, '2'])
+[<Category: Entertainment>, <Category: It's a test>]
+>>> f.clean((1, '2'))
+[<Category: Entertainment>, <Category: It's a test>]
+>>> f.clean(['100'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 100 is not one of the available choices.']
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a list of values.']
+
+# Add a Category object *after* the ModelChoiceField has already been
+# instantiated. This proves clean() checks the database during clean() rather
+# than caching it at time of instantiation.
+>>> Category.objects.create(id=6, name='Sixth', url='6th')
+<Category: Sixth>
+>>> f.clean([6])
+[<Category: Sixth>]
+
+# Delete a Category object *after* the ModelChoiceField has already been
+# instantiated. This proves clean() checks the database during clean() rather
+# than caching it at time of instantiation.
+>>> Category.objects.get(url='6th').delete()
+>>> f.clean([6])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 6 is not one of the available choices.']
+
+>>> f = ModelMultipleChoiceField(Category.objects.all(), required=False)
+>>> f.clean([])
+[]
+>>> f.clean(())
+[]
+>>> f.clean(['10'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 10 is not one of the available choices.']
+>>> f.clean(['3', '10'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 10 is not one of the available choices.']
+>>> f.clean(['1', '10'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 10 is not one of the available choices.']
+
+# PhoneNumberField ############################################################
+
+>>> PhoneNumberForm = form_for_model(PhoneNumber)
+>>> f = PhoneNumberForm({'phone': '(312) 555-1212', 'description': 'Assistance'})
+>>> f.is_valid()
+True
+>>> f.clean_data
+{'phone': u'312-555-1212', 'description': u'Assistance'}
+"""}

Modified: vendor/django/current/tests/modeltests/model_inheritance/models.py
===================================================================
--- vendor/django/current/tests/modeltests/model_inheritance/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/model_inheritance/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -26,7 +26,7 @@
     def __str__(self):
         return "%s the italian restaurant" % self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Make sure Restaurant has the right fields in the right order.
 >>> [f.name for f in Restaurant._meta.fields]
 ['id', 'name', 'address', 'serves_hot_dogs', 'serves_pizza']
@@ -50,4 +50,4 @@
 >>> ir.save()
 
 
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/mutually_referential/models.py
===================================================================
--- vendor/django/current/tests/modeltests/mutually_referential/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/mutually_referential/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -14,7 +14,7 @@
     name = CharField(maxlength=100)
     parent = ForeignKey(Parent)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a Parent
 >>> q = Parent(name='Elizabeth')
 >>> q.save()
@@ -29,4 +29,4 @@
 
 >>> q.delete()
 
-"""
\ No newline at end of file
+"""}
\ No newline at end of file

Modified: vendor/django/current/tests/modeltests/one_to_one/models.py
===================================================================
--- vendor/django/current/tests/modeltests/one_to_one/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/one_to_one/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -30,7 +30,15 @@
     def __str__(self):
         return "%s the waiter at %s" % (self.name, self.restaurant)
 
-API_TESTS = """
+class ManualPrimaryKey(models.Model):
+    primary_key = models.CharField(maxlength=10, primary_key=True)
+    name = models.CharField(maxlength = 50)
+
+class RelatedModel(models.Model):
+    link = models.OneToOneField(ManualPrimaryKey)
+    name = models.CharField(maxlength = 50)
+
+__test__ = {'API_TESTS':"""
 # Create a couple of Places.
 >>> p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
 >>> p1.save()
@@ -151,4 +159,10 @@
 # Delete the restaurant; the waiter should also be removed
 >>> r = Restaurant.objects.get(pk=1)
 >>> r.delete()
-"""
+
+# One-to-one fields still work if you create your own primary key
+>>> o1 = ManualPrimaryKey(primary_key="abc123", name="primary")
+>>> o1.save()
+>>> o2 = RelatedModel(link=o1, name="secondary")
+>>> o2.save()
+"""}

Modified: vendor/django/current/tests/modeltests/or_lookups/models.py
===================================================================
--- vendor/django/current/tests/modeltests/or_lookups/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/or_lookups/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -23,7 +23,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> from datetime import datetime
 >>> from django.db.models import Q
 
@@ -69,6 +69,21 @@
 >>> Article.objects.filter(Q(pk=1) | Q(pk=2) | Q(pk=3))
 [<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
 
+# You could also use "in" to accomplish the same as above.
+>>> Article.objects.filter(pk__in=[1,2,3])
+[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
+
+>>> Article.objects.filter(pk__in=[1,2,3,4])
+[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
+
+# Passing "in" an empty list returns no results ...
+>>> Article.objects.filter(pk__in=[])
+[]
+
+# ... but can return results if we OR it with another query.
+>>> Article.objects.filter(Q(pk__in=[]) | Q(headline__icontains='goodbye'))
+[<Article: Goodbye>, <Article: Hello and goodbye>]
+
 # Q arg objects are ANDed
 >>> Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye'))
 [<Article: Hello and goodbye>]
@@ -101,4 +116,4 @@
 [<Article: Hello>]
 >>> Article.objects.complex_filter(Q(pk=1) | Q(pk=2))
 [<Article: Hello>, <Article: Goodbye>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/ordering/models.py
===================================================================
--- vendor/django/current/tests/modeltests/ordering/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/ordering/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -24,7 +24,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create a couple of Articles.
 >>> from datetime import datetime
 >>> a1 = Article(headline='Article 1', pub_date=datetime(2005, 7, 26))
@@ -64,4 +64,4 @@
 # don't know what order the output will be in.
 >>> Article.objects.order_by('?')
 [...]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/pagination/models.py
===================================================================
--- vendor/django/current/tests/modeltests/pagination/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/pagination/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-29. Object pagination
+30. Object pagination
 
 Django provides a framework for paginating a list of objects in a few lines
 of code. This is often useful for dividing search results or long lists of
@@ -15,7 +15,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # prepare a list of objects for pagination
 >>> from datetime import datetime
 >>> for x in range(1, 10):
@@ -64,4 +64,17 @@
 >>> paginator.last_on_page(1)
 9
 
-"""
+# Add a few more records to test out the orphans feature.
+>>> for x in range(10, 13):
+...     Article(headline="Article %s" % x, pub_date=datetime(2006, 10, 6)).save()
+
+# With orphans set to 3 and 10 items per page, we should get all 12 items on a single page:
+>>> paginator = ObjectPaginator(Article.objects.all(), 10, orphans=3)
+>>> paginator.pages
+1
+
+# With orphans only set to 1, we should get two pages:
+>>> paginator = ObjectPaginator(Article.objects.all(), 10, orphans=1)
+>>> paginator.pages
+2
+"""}

Modified: vendor/django/current/tests/modeltests/properties/models.py
===================================================================
--- vendor/django/current/tests/modeltests/properties/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/properties/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -20,7 +20,7 @@
 
     full_name_2 = property(_get_full_name, _set_full_name)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> a = Person(first_name='John', last_name='Lennon')
 >>> a.save()
 >>> a.full_name
@@ -37,4 +37,4 @@
 >>> a2.save()
 >>> a2.first_name
 'Paul'
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/reserved_names/models.py
===================================================================
--- vendor/django/current/tests/modeltests/reserved_names/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/reserved_names/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -24,7 +24,7 @@
     def __str__(self):
         return self.when
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> import datetime
 >>> day1 = datetime.date(2005, 1, 1)
 >>> day2 = datetime.date(2006, 2, 2)
@@ -53,4 +53,4 @@
 
 >>> Thing.objects.filter(where__month=1)
 [<Thing: a>]
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/reverse_lookup/models.py
===================================================================
--- vendor/django/current/tests/modeltests/reverse_lookup/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/reverse_lookup/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -27,7 +27,7 @@
     def __str(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> john = User(name="John Doe")
 >>> john.save()
 >>> jim = User(name="Jim Bo")
@@ -56,4 +56,4 @@
 Traceback (most recent call last):
     ...
 TypeError: Cannot resolve keyword 'choice' into field
-"""
+"""}

Modified: vendor/django/current/tests/modeltests/save_delete_hooks/models.py
===================================================================
--- vendor/django/current/tests/modeltests/save_delete_hooks/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/save_delete_hooks/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -24,7 +24,7 @@
         super(Person, self).delete() # Call the "real" delete() method
         print "After deletion"
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> p1 = Person(first_name='John', last_name='Smith')
 >>> p1.save()
 Before save
@@ -39,4 +39,4 @@
 
 >>> Person.objects.all()
 []
-"""
+"""}

Added: vendor/django/current/tests/modeltests/select_related/__init__.py
===================================================================

Added: vendor/django/current/tests/modeltests/select_related/models.py
===================================================================
--- vendor/django/current/tests/modeltests/select_related/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/select_related/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,152 @@
+"""
+40. Tests for select_related()
+
+``select_related()`` follows all relationships and pre-caches any foreign key
+values so that complex trees can be fetched in a single query. However, this
+isn't always a good idea, so the ``depth`` argument control how many "levels"
+the select-related behavior will traverse.
+"""
+
+from django.db import models
+
+# Who remembers high school biology?
+
+class Domain(models.Model):
+    name = models.CharField(maxlength=50)
+    def __str__(self):
+        return self.name
+
+class Kingdom(models.Model):
+    name = models.CharField(maxlength=50)
+    domain = models.ForeignKey(Domain)
+    def __str__(self):
+        return self.name
+
+class Phylum(models.Model):
+    name = models.CharField(maxlength=50)
+    kingdom = models.ForeignKey(Kingdom)
+    def __str__(self):
+        return self.name
+    
+class Klass(models.Model):
+    name = models.CharField(maxlength=50)
+    phylum = models.ForeignKey(Phylum)
+    def __str__(self):
+        return self.name
+    
+class Order(models.Model):
+    name = models.CharField(maxlength=50)
+    klass = models.ForeignKey(Klass)
+    def __str__(self):
+        return self.name
+
+class Family(models.Model):
+    name = models.CharField(maxlength=50)
+    order = models.ForeignKey(Order)
+    def __str__(self):
+        return self.name
+
+class Genus(models.Model):
+    name = models.CharField(maxlength=50)
+    family = models.ForeignKey(Family)
+    def __str__(self):
+        return self.name
+
+class Species(models.Model):
+    name = models.CharField(maxlength=50)
+    genus = models.ForeignKey(Genus)
+    def __str__(self):
+        return self.name
+
+def create_tree(stringtree):
+    """Helper to create a complete tree"""
+    names = stringtree.split()
+    models = [Domain, Kingdom, Phylum, Klass, Order, Family, Genus, Species]
+    assert len(names) == len(models), (names, models)
+    
+    parent = None
+    for name, model in zip(names, models):
+        try:
+            obj = model.objects.get(name=name)
+        except model.DoesNotExist:
+            obj = model(name=name)
+        if parent:
+            setattr(obj, parent.__class__.__name__.lower(), parent)
+        obj.save()
+        parent = obj
+
+__test__ = {'API_TESTS':"""
+
+# Set up.
+# The test runner sets settings.DEBUG to False, but we want to gather queries
+# so we'll set it to True here and reset it at the end of the test suite.
+>>> from django.conf import settings
+>>> settings.DEBUG = True
+
+>>> create_tree("Eukaryota Animalia Anthropoda Insecta Diptera Drosophilidae Drosophila melanogaster")
+>>> create_tree("Eukaryota Animalia Chordata Mammalia Primates Hominidae Homo sapiens")
+>>> create_tree("Eukaryota Plantae Magnoliophyta Magnoliopsida Fabales Fabaceae Pisum sativum")
+>>> create_tree("Eukaryota Fungi Basidiomycota Homobasidiomycatae Agaricales Amanitacae Amanita muscaria")
+
+>>> from django import db
+
+# Normally, accessing FKs doesn't fill in related objects:
+>>> db.reset_queries()
+>>> fly = Species.objects.get(name="melanogaster")
+>>> fly.genus.family.order.klass.phylum.kingdom.domain
+<Domain: Eukaryota>
+>>> len(db.connection.queries)
+8
+
+# However, a select_related() call will fill in those related objects without any extra queries:
+>>> db.reset_queries()
+>>> person = Species.objects.select_related().get(name="sapiens")
+>>> person.genus.family.order.klass.phylum.kingdom.domain
+<Domain: Eukaryota>
+>>> len(db.connection.queries)
+1
+
+# select_related() also of course applies to entire lists, not just items.
+# Without select_related()
+>>> db.reset_queries()
+>>> world = Species.objects.all()
+>>> [o.genus.family for o in world]
+[<Family: Drosophilidae>, <Family: Hominidae>, <Family: Fabaceae>, <Family: Amanitacae>]
+>>> len(db.connection.queries)
+9
+
+# With select_related():
+>>> db.reset_queries()
+>>> world = Species.objects.all().select_related()
+>>> [o.genus.family for o in world]
+[<Family: Drosophilidae>, <Family: Hominidae>, <Family: Fabaceae>, <Family: Amanitacae>]
+>>> len(db.connection.queries)
+1
+
+# The "depth" argument to select_related() will stop the descent at a particular level:
+>>> db.reset_queries()
+>>> pea = Species.objects.select_related(depth=1).get(name="sativum")
+>>> pea.genus.family.order.klass.phylum.kingdom.domain
+<Domain: Eukaryota>
+
+# Notice: one few query than above because of depth=1
+>>> len(db.connection.queries)
+7
+
+>>> db.reset_queries()
+>>> pea = Species.objects.select_related(depth=5).get(name="sativum")
+>>> pea.genus.family.order.klass.phylum.kingdom.domain
+<Domain: Eukaryota>
+>>> len(db.connection.queries)
+3
+
+>>> db.reset_queries()
+>>> world = Species.objects.all().select_related(depth=2)
+>>> [o.genus.family.order for o in world]
+[<Order: Diptera>, <Order: Primates>, <Order: Fabales>, <Order: Agaricales>]
+>>> len(db.connection.queries)
+5
+
+# Reset DEBUG to where we found it.
+>>> settings.DEBUG = False
+"""}

Modified: vendor/django/current/tests/modeltests/serializers/models.py
===================================================================
--- vendor/django/current/tests/modeltests/serializers/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/serializers/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-XXX. Serialization
+41. Serialization
 
 ``django.core.serializers`` provides interfaces to converting Django querysets
 to and from "flat" data (i.e. strings).
@@ -37,7 +37,14 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+class AuthorProfile(models.Model):
+    author = models.OneToOneField(Author)
+    date_of_birth = models.DateField()
+    
+    def __str__(self):
+        return "Profile of %s" % self.author
+
+__test__ = {'API_TESTS':"""
 # Create some data:
 >>> from datetime import datetime
 >>> sports = Category(name="Sports")
@@ -118,4 +125,38 @@
 >>> Article.objects.all()
 [<Article: Just kidding; I love TV poker>, <Article: Time to reform copyright>]
 
-"""
+# If you use your own primary key field (such as a OneToOneField), 
+# it doesn't appear in the serialized field list - it replaces the
+# pk identifier.
+>>> profile = AuthorProfile(author=joe, date_of_birth=datetime(1970,1,1))
+>>> profile.save()
+
+>>> json = serializers.serialize("json", AuthorProfile.objects.all())
+>>> json
+'[{"pk": "1", "model": "serializers.authorprofile", "fields": {"date_of_birth": "1970-01-01"}}]'
+
+>>> for obj in serializers.deserialize("json", json):
+...     print obj
+<DeserializedObject: Profile of Joe>
+
+# Objects ids can be referenced before they are defined in the serialization data
+# However, the deserialization process will need to be contained within a transaction
+>>> json = '[{"pk": "3", "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00", "categories": [4, 1], "author": 4}}, {"pk": "4", "model": "serializers.category", "fields": {"name": "Reference"}}, {"pk": "4", "model": "serializers.author", "fields": {"name": "Agnes"}}]'
+>>> from django.db import transaction
+>>> transaction.enter_transaction_management()
+>>> transaction.managed(True)
+>>> for obj in serializers.deserialize("json", json):
+...     obj.save()
+
+>>> transaction.commit()
+>>> transaction.leave_transaction_management()
+
+>>> article = Article.objects.get(pk=3)
+>>> article
+<Article: Forward references pose no problem>
+>>> article.categories.all()
+[<Category: Reference>, <Category: Sports>]
+>>> article.author
+<Author: Agnes>
+
+"""}

Modified: vendor/django/current/tests/modeltests/str/models.py
===================================================================
--- vendor/django/current/tests/modeltests/str/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/str/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,7 +17,7 @@
     def __str__(self):
         return self.headline
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Create an Article.
 >>> from datetime import datetime
 >>> a = Article(headline='Area man programs in Python', pub_date=datetime(2005, 7, 28))
@@ -28,4 +28,4 @@
 
 >>> a
 <Article: Area man programs in Python>
-"""
+"""}

Added: vendor/django/current/tests/modeltests/test_client/__init__.py
===================================================================

Added: vendor/django/current/tests/modeltests/test_client/fixtures/testdata.json
===================================================================
--- vendor/django/current/tests/modeltests/test_client/fixtures/testdata.json	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/test_client/fixtures/testdata.json	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,20 @@
+[
+    {
+        "pk": "1", 
+        "model": "auth.user", 
+        "fields": {
+            "username": "testclient", 
+            "first_name": "Test", 
+            "last_name": "Client", 
+            "is_active": true, 
+            "is_superuser": false, 
+            "is_staff": false, 
+            "last_login": "2006-12-17 07:03:31", 
+            "groups": [], 
+            "user_permissions": [], 
+            "password": "sha1$6efc0$f93efe9fd7542f25a7be94871ea45aa95de57161", 
+            "email": "testclient at example.com", 
+            "date_joined": "2006-12-17 07:03:31"
+        }
+    }
+]
\ No newline at end of file

Added: vendor/django/current/tests/modeltests/test_client/models.py
===================================================================
--- vendor/django/current/tests/modeltests/test_client/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/test_client/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,172 @@
+"""
+38. Testing using the Test Client
+
+The test client is a class that can act like a simple
+browser for testing purposes.
+  
+It allows the user to compose GET and POST requests, and
+obtain the response that the server gave to those requests.
+The server Response objects are annotated with the details
+of the contexts and templates that were rendered during the
+process of serving the request.
+
+Client objects are stateful - they will retain cookie (and
+thus session) details for the lifetime of the Client instance.
+
+This is not intended as a replacement for Twill,Selenium, or
+other browser automation frameworks - it is here to allow 
+testing against the contexts and templates produced by a view, 
+rather than the HTML rendered to the end-user.
+
+"""
+from django.test import Client, TestCase
+
+class ClientTest(TestCase):
+    fixtures = ['testdata.json']
+    
+    def setUp(self):
+        "Set up test environment"
+        self.client = Client()
+        
+    def test_get_view(self):
+        "GET a view"
+        response = self.client.get('/test_client/get_view/')
+        
+        # Check some response details
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.context['var'], 42)
+        self.assertEqual(response.template.name, 'GET Template')
+        self.failUnless('This is a test.' in response.content)
+
+    def test_get_post_view(self):
+        "GET a view that normally expects POSTs"
+        response = self.client.get('/test_client/post_view/', {})
+        
+        # Check some response details
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.template.name, 'Empty GET Template')
+        
+    def test_empty_post(self):
+        "POST an empty dictionary to a view"
+        response = self.client.post('/test_client/post_view/', {})
+        
+        # Check some response details
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.template.name, 'Empty POST Template')
+        
+    def test_post(self):
+        "POST some data to a view"
+        post_data = {
+            'value': 37
+        }
+        response = self.client.post('/test_client/post_view/', post_data)
+        
+        # Check some response details
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.context['data'], '37')
+        self.assertEqual(response.template.name, 'POST Template')
+        self.failUnless('Data received' in response.content)
+        
+    def test_raw_post(self):
+        test_doc = """<?xml version="1.0" encoding="utf-8"?><library><book><title>Blink</title><author>Malcolm Gladwell</author></book></library>"""
+        response = self.client.post("/test_client/raw_post_view/", test_doc,
+                                    content_type="text/xml")
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.template.name, "Book template")
+        self.assertEqual(response.content, "Blink - Malcolm Gladwell")
+
+    def test_redirect(self):
+        "GET a URL that redirects elsewhere"
+        response = self.client.get('/test_client/redirect_view/')
+        
+        # Check that the response was a 302 (redirect)
+        self.assertEqual(response.status_code, 302)
+
+    def test_valid_form(self):
+        "POST valid data to a form"
+        post_data = {
+            'text': 'Hello World',
+            'email': 'foo at example.com',
+            'value': 37,
+            'single': 'b',
+            'multi': ('b','c','e')
+        }
+        response = self.client.post('/test_client/form_view/', post_data)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.template.name, "Valid POST Template")
+
+    def test_incomplete_data_form(self):
+        "POST incomplete data to a form"
+        post_data = {
+            'text': 'Hello World',
+            'value': 37            
+        }
+        response = self.client.post('/test_client/form_view/', post_data)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.template.name, "Invalid POST Template")
+
+    def test_form_error(self):
+        "POST erroneous data to a form"
+        post_data = {
+            'text': 'Hello World',
+            'email': 'not an email address',
+            'value': 37,
+            'single': 'b',
+            'multi': ('b','c','e')
+        }
+        response = self.client.post('/test_client/form_view/', post_data)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.template.name, "Invalid POST Template")
+        
+    def test_unknown_page(self):
+        "GET an invalid URL"
+        response = self.client.get('/test_client/unknown_view/')
+        
+        # Check that the response was a 404
+        self.assertEqual(response.status_code, 404)
+        
+    def test_view_with_login(self):
+        "Request a page that is protected with @login_required"
+        
+        # Get the page without logging in. Should result in 302.
+        response = self.client.get('/test_client/login_protected_view/')
+        self.assertEqual(response.status_code, 302)
+        
+        # Request a page that requires a login
+        response = self.client.login('/test_client/login_protected_view/', 'testclient', 'password')
+        self.failUnless(response)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.context['user'].username, 'testclient')
+        self.assertEqual(response.template.name, 'Login Template')
+
+    def test_view_with_bad_login(self):
+        "Request a page that is protected with @login, but use bad credentials"
+
+        response = self.client.login('/test_client/login_protected_view/', 'otheruser', 'nopassword')
+        self.failIf(response)
+
+    def test_session_modifying_view(self):
+        "Request a page that modifies the session"
+        # Session value isn't set initially
+        try:
+            self.client.session['tobacconist']
+            self.fail("Shouldn't have a session value")
+        except KeyError:
+            pass
+        
+        from django.contrib.sessions.models import Session
+        response = self.client.post('/test_client/session_view/')
+        
+        # Check that the session was modified
+        self.assertEquals(self.client.session['tobacconist'], 'hovercraft')
+
+    def test_view_with_exception(self):
+        "Request a page that is known to throw an error"
+        self.assertRaises(KeyError, self.client.get, "/test_client/broken_view/")
+        
+        #Try the same assertion, a different way
+        try:
+            self.client.get('/test_client/broken_view/')
+            self.fail('Should raise an error')
+        except KeyError:
+            pass

Added: vendor/django/current/tests/modeltests/test_client/urls.py
===================================================================
--- vendor/django/current/tests/modeltests/test_client/urls.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/test_client/urls.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,13 @@
+from django.conf.urls.defaults import *
+import views
+
+urlpatterns = patterns('',
+    (r'^get_view/$', views.get_view),
+    (r'^post_view/$', views.post_view),
+    (r'^raw_post_view/$', views.raw_post_view),
+    (r'^redirect_view/$', views.redirect_view),
+    (r'^form_view/$', views.form_view),
+    (r'^login_protected_view/$', views.login_protected_view),
+    (r'^session_view/$', views.session_view),
+    (r'^broken_view/$', views.broken_view)
+)

Added: vendor/django/current/tests/modeltests/test_client/views.py
===================================================================
--- vendor/django/current/tests/modeltests/test_client/views.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/test_client/views.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,102 @@
+from xml.dom.minidom import parseString
+from django.template import Context, Template
+from django.http import HttpResponse, HttpResponseRedirect
+from django.contrib.auth.decorators import login_required
+from django.newforms.forms import Form
+from django.newforms import fields
+
+def get_view(request):
+    "A simple view that expects a GET request, and returns a rendered template"
+    t = Template('This is a test. {{ var }} is the value.', name='GET Template')
+    c = Context({'var': 42})
+    
+    return HttpResponse(t.render(c))
+
+def post_view(request):
+    """A view that expects a POST, and returns a different template depending
+    on whether any POST data is available
+    """
+    if request.method == 'POST':
+        if request.POST:
+            t = Template('Data received: {{ data }} is the value.', name='POST Template')
+            c = Context({'data': request.POST['value']})
+        else:
+            t = Template('Viewing POST page.', name='Empty POST Template')
+            c = Context()
+    else:
+        t = Template('Viewing GET page.', name='Empty GET Template')
+        c = Context()
+    
+    return HttpResponse(t.render(c))
+    
+def raw_post_view(request):
+    """A view which expects raw XML to be posted and returns content extracted
+    from the XML"""
+    if request.method == 'POST':
+        root = parseString(request.raw_post_data)
+        first_book = root.firstChild.firstChild
+        title, author = [n.firstChild.nodeValue for n in first_book.childNodes]
+        t = Template("{{ title }} - {{ author }}", name="Book template")
+        c = Context({"title": title, "author": author})
+    else:
+        t = Template("GET request.", name="Book GET template")
+        c = Context()
+
+    return HttpResponse(t.render(c))
+
+def redirect_view(request):
+    "A view that redirects all requests to the GET view"
+    return HttpResponseRedirect('/test_client/get_view/')
+
+TestChoices = (
+    ('a', 'First Choice'),
+    ('b', 'Second Choice'),
+    ('c', 'Third Choice'),
+    ('d', 'Fourth Choice'),
+    ('e', 'Fifth Choice')
+)
+
+class TestForm(Form):
+    text = fields.CharField()
+    email = fields.EmailField()
+    value = fields.IntegerField()
+    single = fields.ChoiceField(choices=TestChoices)
+    multi = fields.MultipleChoiceField(choices=TestChoices)
+    
+def form_view(request):
+    "A view that tests a simple form"
+    if request.method == 'POST':
+        form = TestForm(request.POST)
+        if form.is_valid():
+            t = Template('Valid POST data.', name='Valid POST Template')
+            c = Context()
+        else:
+            t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
+            c = Context({'form': form})
+    else:
+        form = TestForm()
+        t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
+        c = Context({'form': form})
+    
+    return HttpResponse(t.render(c))
+        
+def login_protected_view(request):
+    "A simple view that is login protected."
+    t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
+    c = Context({'user': request.user})
+    
+    return HttpResponse(t.render(c))
+login_protected_view = login_required(login_protected_view)
+
+def session_view(request):
+    "A view that modifies the session"
+    request.session['tobacconist'] = 'hovercraft'
+    
+    t = Template('This is a view that modifies the session.', 
+                 name='Session Modifying View Template')
+    c = Context()
+    return HttpResponse(t.render(c))
+
+def broken_view(request):
+    """A view which just raises an exception, simulating a broken view."""
+    raise KeyError("Oops! Looks like you wrote some bad code.")

Modified: vendor/django/current/tests/modeltests/transactions/models.py
===================================================================
--- vendor/django/current/tests/modeltests/transactions/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/transactions/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -17,16 +17,16 @@
     def __str__(self):
         return "%s %s" % (self.first_name, self.last_name)
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 >>> from django.db import connection, transaction
-"""
+"""}
 
 from django.conf import settings
 
 building_docs = getattr(settings, 'BUILDING_DOCS', False)
 
 if building_docs or settings.DATABASE_ENGINE != 'mysql':
-    API_TESTS += """
+    __test__['API_TESTS'] += """
 # the default behavior is to autocommit after each save() action
 >>> def create_a_reporter_then_fail(first, last):
 ...     a = Reporter(first_name=first, last_name=last)

Modified: vendor/django/current/tests/modeltests/validation/models.py
===================================================================
--- vendor/django/current/tests/modeltests/validation/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/modeltests/validation/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,5 +1,5 @@
 """
-30. Validation
+31. Validation
 
 This is an experimental feature!
 
@@ -20,7 +20,7 @@
     def __str__(self):
         return self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 
 >>> import datetime
 >>> valid_params = {
@@ -146,4 +146,8 @@
 >>> p.validate()
 {'email': ['Enter a valid e-mail address.']}
 
-"""
+# Make sure that Date and DateTime return validation errors and don't raise Python errors.
+>>> Person(name='John Doe', is_child=True, email='abc at def.com').validate()
+{'favorite_moment': ['This field is required.'], 'birthdate': ['This field is required.']}
+
+"""}

Added: vendor/django/current/tests/regressiontests/bug639/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/bug639/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/bug639/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/bug639/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,16 @@
+import tempfile
+from django.db import models
+
+class Photo(models.Model):
+    title = models.CharField(maxlength=30)
+    image = models.FileField(upload_to=tempfile.gettempdir())
+    
+    # Support code for the tests; this keeps track of how many times save() gets
+    # called on each instance.
+    def __init__(self, *args, **kwargs):
+       super(Photo, self).__init__(*args, **kwargs)
+       self._savecount = 0
+    
+    def save(self):
+        super(Photo, self).save()
+        self._savecount +=1
\ No newline at end of file

Added: vendor/django/current/tests/regressiontests/bug639/test.jpg
===================================================================
(Binary files differ)


Property changes on: vendor/django/current/tests/regressiontests/bug639/test.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: vendor/django/current/tests/regressiontests/bug639/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/bug639/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/bug639/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,42 @@
+"""
+Tests for file field behavior, and specifically #639, in which Model.save() gets
+called *again* for each FileField. This test will fail if calling an
+auto-manipulator's save() method causes Model.save() to be called more than once.
+"""
+
+import os
+import unittest
+from regressiontests.bug639.models import Photo
+from django.http import QueryDict
+from django.utils.datastructures import MultiValueDict
+
+class Bug639Test(unittest.TestCase):
+        
+    def testBug639(self):
+        """
+        Simulate a file upload and check how many times Model.save() gets called.
+        """
+        # Grab an image for testing
+        img = open(os.path.join(os.path.dirname(__file__), "test.jpg"), "rb").read()
+        
+        # Fake a request query dict with the file
+        qd = QueryDict("title=Testing&image=", mutable=True)
+        qd["image_file"] = {
+            "filename" : "test.jpg",
+            "content-type" : "image/jpeg",
+            "content" : img
+        }
+        
+        manip = Photo.AddManipulator()
+        manip.do_html2python(qd)
+        p = manip.save(qd)
+        
+        # Check the savecount stored on the object (see the model)
+        self.assertEqual(p._savecount, 1)
+        
+    def tearDown(self):
+        """
+        Make sure to delete the "uploaded" file to avoid clogging /tmp.
+        """
+        p = Photo.objects.get()
+        os.unlink(p.get_image_filename())
\ No newline at end of file

Added: vendor/django/current/tests/regressiontests/cache/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/cache/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/cache/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/cache/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/cache/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,71 @@
+# 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
+
+# functions/classes for complex data type tests        
+def f():
+    return 42
+class C:
+    def m(n):
+        return 24
+
+class Cache(unittest.TestCase):
+    def test_simple(self):
+        # simple set/get
+        cache.set("key", "value")
+        self.assertEqual(cache.get("key"), "value")
+
+    def test_non_existent(self):
+        # get with non-existent keys
+        self.assertEqual(cache.get("does not exist"), None)
+        self.assertEqual(cache.get("does not exist", "bang!"), "bang!")
+
+    def test_get_many(self):
+        # get_many
+        cache.set('a', 'a')
+        cache.set('b', 'b')
+        cache.set('c', 'c')
+        cache.set('d', 'd')
+        self.assertEqual(cache.get_many(['a', 'c', 'd']), {'a' : 'a', 'c' : 'c', 'd' : 'd'})
+        self.assertEqual(cache.get_many(['a', 'b', 'e']), {'a' : 'a', 'b' : 'b'})
+
+    def test_delete(self):
+        # delete
+        cache.set("key1", "spam")
+        cache.set("key2", "eggs")
+        self.assertEqual(cache.get("key1"), "spam")
+        cache.delete("key1")
+        self.assertEqual(cache.get("key1"), None)
+        self.assertEqual(cache.get("key2"), "eggs")
+
+    def test_has_key(self):
+        # has_key
+        cache.set("hello", "goodbye")
+        self.assertEqual(cache.has_key("hello"), True)
+        self.assertEqual(cache.has_key("goodbye"), False)
+
+    def test_data_types(self):
+        # test data types
+        stuff = {
+            'string'    : 'this is a string',
+            'int'       : 42,
+            'list'      : [1, 2, 3, 4],
+            'tuple'     : (1, 2, 3, 4),
+            'dict'      : {'A': 1, 'B' : 2},
+            'function'  : f,
+            'class'     : C,
+        }
+        for (key, value) in stuff.items():
+            cache.set(key, value)
+            self.assertEqual(cache.get(key), value)
+    
+    def test_expiration(self):
+        # expiration
+        cache.set('expire', 'very quickly', 1)
+        time.sleep(2)
+        self.assertEqual(cache.get("expire"), None)
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file

Added: vendor/django/current/tests/regressiontests/datastructures/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/datastructures/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/datastructures/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/datastructures/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/datastructures/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,65 @@
+"""
+# Tests for stuff in django.utils.datastructures.
+
+>>> from django.utils.datastructures import *
+
+### MergeDict #################################################################
+
+>>> d1 = {'chris':'cool','camri':'cute','cotton':'adorable','tulip':'snuggable', 'twoofme':'firstone'}
+>>> d2 = {'chris2':'cool2','camri2':'cute2','cotton2':'adorable2','tulip2':'snuggable2'}
+>>> d3 = {'chris3':'cool3','camri3':'cute3','cotton3':'adorable3','tulip3':'snuggable3'}
+>>> d4 = {'twoofme':'secondone'}
+>>> md = MergeDict( d1,d2,d3 )
+>>> md['chris']
+'cool'
+>>> md['camri']
+'cute'
+>>> md['twoofme']
+'firstone'
+>>> md2 = md.copy()
+>>> md2['chris']
+'cool'
+
+### MultiValueDict ##########################################################
+
+>>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']})
+>>> d['name']
+'Simon'
+>>> d.getlist('name')
+['Adrian', 'Simon']
+>>> d.get('lastname', 'nonexistent')
+'nonexistent'
+>>> d.setlist('lastname', ['Holovaty', 'Willison'])
+
+### SortedDict #################################################################
+
+>>> d = SortedDict()
+>>> d['one'] = 'one'
+>>> d['two'] = 'two'
+>>> d['three'] = 'three'
+>>> d['one']
+'one'
+>>> d['two']
+'two'
+>>> d['three']
+'three'
+>>> d.keys()
+['one', 'two', 'three']
+>>> d.values()
+['one', 'two', 'three']
+>>> d['one'] = 'not one'
+>>> d['one']
+'not one'
+>>> d.keys() == d.copy().keys()
+True
+
+### DotExpandedDict ############################################################
+
+>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], 'person.1.lastname': ['Willison'], 'person.2.firstname': ['Adrian'], 'person.2.lastname': ['Holovaty']})
+>>> d['person']['1']['lastname']
+['Willison']
+>>> d['person']['2']['lastname']
+['Holovaty']
+>>> d['person']['2']['firstname']
+['Adrian']
+"""

Added: vendor/django/current/tests/regressiontests/dateformat/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/dateformat/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/dateformat/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/dateformat/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/dateformat/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,86 @@
+r"""
+>>> format(my_birthday, '')
+''
+>>> format(my_birthday, 'a')
+'p.m.'
+>>> format(my_birthday, 'A')
+'PM'
+>>> format(my_birthday, 'd')
+'08'
+>>> format(my_birthday, 'j')
+'8'
+>>> format(my_birthday, 'l')
+'Sunday'
+>>> format(my_birthday, 'L')
+'False'
+>>> format(my_birthday, 'm')
+'07'
+>>> format(my_birthday, 'M')
+'Jul'
+>>> format(my_birthday, 'b')
+'jul'
+>>> format(my_birthday, 'n')
+'7'
+>>> format(my_birthday, 'N')
+'July'
+>>> no_tz or format(my_birthday, 'O') == '+0100'
+True
+>>> format(my_birthday, 'P')
+'10 p.m.'
+>>> no_tz or format(my_birthday, 'r') == 'Sun, 8 Jul 1979 22:00:00 +0100'
+True
+>>> format(my_birthday, 's')
+'00'
+>>> format(my_birthday, 'S')
+'th'
+>>> format(my_birthday, 't')
+'31'
+>>> no_tz or format(my_birthday, 'T') == 'CET'
+True
+>>> no_tz or format(my_birthday, 'U') == '300531600'
+True
+>>> format(my_birthday, 'w')
+'0'
+>>> format(my_birthday, 'W')
+'27'
+>>> format(my_birthday, 'y')
+'79'
+>>> format(my_birthday, 'Y')
+'1979'
+>>> format(my_birthday, 'z')
+'189'
+>>> no_tz or format(my_birthday, 'Z') == '3600'
+True
+
+>>> no_tz or format(summertime, 'I') == '1'
+True
+>>> no_tz or format(summertime, 'O') == '+0200'
+True
+>>> no_tz or format(wintertime, 'I') == '0'
+True
+>>> no_tz or format(wintertime, 'O') == '+0100'
+True
+
+>>> format(my_birthday, r'Y z \C\E\T')
+'1979 189 CET'
+
+>>> format(my_birthday, r'jS o\f F')
+'8th of July'
+"""
+
+from django.utils import dateformat, translation
+import datetime, os, time
+
+format = dateformat.format
+os.environ['TZ'] = 'Europe/Copenhagen'
+translation.activate('en-us')
+
+try:
+    time.tzset()
+    no_tz = False
+except AttributeError:
+    no_tz = True
+
+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)

Added: vendor/django/current/tests/regressiontests/db_typecasts/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/db_typecasts/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/db_typecasts/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/db_typecasts/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/db_typecasts/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,56 @@
+# Unit tests for typecast functions in django.db.backends.util
+
+from django.db.backends import util as typecasts
+import datetime, unittest
+
+TEST_CASES = {
+    'typecast_date': (
+        ('', None),
+        (None, None),
+        ('2005-08-11', datetime.date(2005, 8, 11)),
+        ('1990-01-01', datetime.date(1990, 1, 1)),
+    ),
+    'typecast_time': (
+        ('', None),
+        (None, None),
+        ('0:00:00', datetime.time(0, 0)),
+        ('0:30:00', datetime.time(0, 30)),
+        ('8:50:00', datetime.time(8, 50)),
+        ('08:50:00', datetime.time(8, 50)),
+        ('12:00:00', datetime.time(12, 00)),
+        ('12:30:00', datetime.time(12, 30)),
+        ('13:00:00', datetime.time(13, 00)),
+        ('23:59:00', datetime.time(23, 59)),
+        ('00:00:12', datetime.time(0, 0, 12)),
+        ('00:00:12.5', datetime.time(0, 0, 12, 500000)),
+        ('7:22:13.312', datetime.time(7, 22, 13, 312000)),
+    ),
+    'typecast_timestamp': (
+        ('', None),
+        (None, None),
+        ('2005-08-11 0:00:00', datetime.datetime(2005, 8, 11)),
+        ('2005-08-11 0:30:00', datetime.datetime(2005, 8, 11, 0, 30)),
+        ('2005-08-11 8:50:30', datetime.datetime(2005, 8, 11, 8, 50, 30)),
+        ('2005-08-11 8:50:30.123', datetime.datetime(2005, 8, 11, 8, 50, 30, 123000)),
+        ('2005-08-11 8:50:30.9', datetime.datetime(2005, 8, 11, 8, 50, 30, 900000)),
+        ('2005-08-11 8:50:30.312-05', datetime.datetime(2005, 8, 11, 8, 50, 30, 312000)),
+        ('2005-08-11 8:50:30.312+02', datetime.datetime(2005, 8, 11, 8, 50, 30, 312000)),
+    ),
+    'typecast_boolean': (
+        (None, None),
+        ('', False),
+        ('t', True),
+        ('f', False),
+        ('x', False),
+    ),
+}
+
+class DBTypeCasts(unittest.TestCase):
+    def test_typeCasts(self):
+        for k, v in TEST_CASES.items():
+            for inpt, expected in v:
+                got = getattr(typecasts, k)(inpt)
+                assert got == expected, "In %s: %r doesn't match %r. Got %r instead." % (k, inpt, expected, got)
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file

Added: vendor/django/current/tests/regressiontests/defaultfilters/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/defaultfilters/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/defaultfilters/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/defaultfilters/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/defaultfilters/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,452 @@
+r"""
+>>> floatformat(7.7)
+'7.7'
+>>> floatformat(7.0)
+'7'
+>>> floatformat(0.7)
+'0.7'
+>>> floatformat(0.07)
+'0.1'
+>>> floatformat(0.007)
+'0.0'
+>>> floatformat(0.0)
+'0'
+>>> floatformat(7.7,3)
+'7.700'
+>>> floatformat(6.000000,3)
+'6.000'
+>>> floatformat(13.1031,-3)
+'13.103'
+>>> floatformat(11.1197, -2)
+'11.12'
+>>> floatformat(11.0000, -2)
+'11'
+>>> floatformat(11.000001, -2)
+'11.00'
+>>> floatformat(8.2798, 3)
+'8.280'
+>>> floatformat('foo')
+''
+>>> floatformat(13.1031, 'bar')
+'13.1031'
+>>> floatformat('foo', 'bar')
+''
+
+>>> addslashes('"double quotes" and \'single quotes\'')
+'\\"double quotes\\" and \\\'single quotes\\\''
+
+>>> addslashes(r'\ : backslashes, too')
+'\\\\ : backslashes, too'
+
+>>> capfirst('hello world')
+'Hello world'
+
+>>> fix_ampersands('Jack & Jill & Jeroboam')
+'Jack &amp; Jill &amp; Jeroboam'
+
+>>> linenumbers('line 1\nline 2')
+'1. line 1\n2. line 2'
+
+>>> linenumbers('\n'.join(['x'] * 10))
+'01. x\n02. x\n03. x\n04. x\n05. x\n06. x\n07. x\n08. x\n09. x\n10. x'
+
+>>> lower('TEST')
+'test'
+
+>>> lower(u'\xcb') # uppercase E umlaut
+u'\xeb'
+
+>>> make_list('abc')
+['a', 'b', 'c']
+
+>>> make_list(1234)
+['1', '2', '3', '4']
+
+>>> slugify(' Jack & Jill like numbers 1,2,3 and 4 and silly characters ?%.$!/')
+'jack-jill-like-numbers-123-and-4-and-silly-characters'
+
+>>> stringformat(1, '03d')
+'001'
+
+>>> stringformat(1, 'z')
+''
+
+>>> title('a nice title, isn\'t it?')
+"A Nice Title, Isn't It?"
+
+
+>>> truncatewords('A sentence with a few words in it', 1)
+'A ...'
+
+>>> truncatewords('A sentence with a few words in it', 5)
+'A sentence with a few ...'
+
+>>> truncatewords('A sentence with a few words in it', 100)
+'A sentence with a few words in it'
+
+>>> truncatewords('A sentence with a few words in it', 'not a number')
+'A sentence with a few words in it'
+
+>>> truncatewords_html('<p>one <a href="#">two - three <br>four</a> five</p>', 0) 
+''
+ 
+>>> truncatewords_html('<p>one <a href="#">two - three <br>four</a> five</p>', 2) 
+'<p>one <a href="#">two ...</a></p>'
+ 
+>>> truncatewords_html('<p>one <a href="#">two - three <br>four</a> five</p>', 4) 
+'<p>one <a href="#">two - three <br>four ...</a></p>'
+
+>>> truncatewords_html('<p>one <a href="#">two - three <br>four</a> five</p>', 5) 
+'<p>one <a href="#">two - three <br>four</a> five</p>'
+
+>>> truncatewords_html('<p>one <a href="#">two - three <br>four</a> five</p>', 100) 
+'<p>one <a href="#">two - three <br>four</a> five</p>'
+
+>>> upper('Mixed case input')
+'MIXED CASE INPUT'
+
+>>> upper(u'\xeb') # lowercase e umlaut
+u'\xcb'
+
+
+>>> urlencode('jack & jill')
+'jack%20%26%20jill'
+>>> urlencode(1)
+'1'
+
+
+>>> urlizetrunc('http://short.com/', 20)
+'<a href="http://short.com/" rel="nofollow">http://short.com/</a>'
+
+>>> urlizetrunc('http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=', 20)
+'<a href="http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=" rel="nofollow">http://www.google.co...</a>'
+
+>>> wordcount('')
+0
+
+>>> wordcount('oneword')
+1
+
+>>> wordcount('lots of words')
+3
+
+>>> wordwrap('this is a long paragraph of text that really needs to be wrapped I\'m afraid', 14)
+"this is a long\nparagraph of\ntext that\nreally needs\nto be wrapped\nI'm afraid"
+
+>>> wordwrap('this is a short paragraph of text.\n  But this line should be indented',14)
+'this is a\nshort\nparagraph of\ntext.\n  But this\nline should be\nindented'
+
+>>> wordwrap('this is a short paragraph of text.\n  But this line should be indented',15)
+'this is a short\nparagraph of\ntext.\n  But this line\nshould be\nindented'
+
+>>> ljust('test', 10)
+'test      '
+
+>>> ljust('test', 3)
+'test'
+
+>>> rjust('test', 10)
+'      test'
+
+>>> rjust('test', 3)
+'test'
+
+>>> center('test', 6)
+' test '
+
+>>> cut('a string to be mangled', 'a')
+' string to be mngled'
+
+>>> cut('a string to be mangled', 'ng')
+'a stri to be maled'
+
+>>> cut('a string to be mangled', 'strings')
+'a string to be mangled'
+
+>>> escape('<some html & special characters > here')
+'&lt;some html &amp; special characters &gt; here'
+
+>>> linebreaks('line 1')
+'<p>line 1</p>'
+
+>>> linebreaks('line 1\nline 2')
+'<p>line 1<br />line 2</p>'
+
+>>> removetags('some <b>html</b> with <script>alert("You smell")</script> disallowed <img /> tags', 'script img')
+'some <b>html</b> with alert("You smell") disallowed  tags'
+
+>>> striptags('some <b>html</b> with <script>alert("You smell")</script> disallowed <img /> tags')
+'some html with alert("You smell") disallowed  tags'
+
+>>> dictsort([{'age': 23, 'name': 'Barbara-Ann'},
+...           {'age': 63, 'name': 'Ra Ra Rasputin'},
+...           {'name': 'Jonny B Goode', 'age': 18}], 'age')
+[{'age': 18, 'name': 'Jonny B Goode'}, {'age': 23, 'name': 'Barbara-Ann'}, {'age': 63, 'name': 'Ra Ra Rasputin'}]
+
+>>> dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'},
+...           {'age': 63, 'name': 'Ra Ra Rasputin'},
+...           {'name': 'Jonny B Goode', 'age': 18}], 'age')
+[{'age': 63, 'name': 'Ra Ra Rasputin'}, {'age': 23, 'name': 'Barbara-Ann'}, {'age': 18, 'name': 'Jonny B Goode'}]
+
+>>> first([0,1,2])
+0
+
+>>> first('')
+''
+
+>>> first('test')
+'t'
+
+>>> join([0,1,2], 'glue')
+'0glue1glue2'
+
+>>> length('1234')
+4
+
+>>> length([1,2,3,4])
+4
+
+>>> length_is([], 0)
+True
+
+>>> length_is([], 1)
+False
+
+>>> length_is('a', 1)
+True
+
+>>> length_is('a', 10)
+False
+
+>>> slice_('abcdefg', '0')
+''
+
+>>> slice_('abcdefg', '1')
+'a'
+
+>>> slice_('abcdefg', '-1')
+'abcdef'
+
+>>> slice_('abcdefg', '1:2')
+'b'
+
+>>> slice_('abcdefg', '1:3')
+'bc'
+
+>>> slice_('abcdefg', '0::2')
+'aceg'
+
+>>> unordered_list(['item 1', []])
+'\t<li>item 1</li>'
+
+>>> unordered_list(['item 1', [['item 1.1', []]]])
+'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>'
+
+>>> unordered_list(['item 1', [['item 1.1', []], ['item 1.2', []]]])
+'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>'
+
+>>> add('1', '2')
+3
+
+>>> get_digit(123, 1)
+3
+
+>>> get_digit(123, 2)
+2
+
+>>> get_digit(123, 3)
+1
+
+>>> get_digit(123, 4)
+0
+
+>>> get_digit(123, 0)
+123
+
+>>> get_digit('xyz', 0)
+'xyz'
+
+# real testing of date() is in dateformat.py
+>>> date(datetime.datetime(2005, 12, 29), "d F Y")
+'29 December 2005'
+>>> date(datetime.datetime(2005, 12, 29), r'jS o\f F')
+'29th of December'
+
+# real testing of time() is done in dateformat.py
+>>> time(datetime.time(13), "h")
+'01'
+
+>>> time(datetime.time(0), "h")
+'12'
+
+# real testing is done in timesince.py, where we can provide our own 'now'
+>>> timesince(datetime.datetime.now() - datetime.timedelta(1))
+'1 day'
+
+>>> default("val", "default")
+'val'
+
+>>> default(None, "default")
+'default'
+
+>>> default('', "default")
+'default'
+
+>>> default_if_none("val", "default")
+'val'
+
+>>> default_if_none(None, "default")
+'default'
+
+>>> default_if_none('', "default")
+''
+
+>>> divisibleby(4, 2)
+True
+
+>>> divisibleby(4, 3)
+False
+
+>>> yesno(True)
+'yes'
+
+>>> yesno(False)
+'no'
+
+>>> yesno(None)
+'maybe'
+
+>>> yesno(True, 'certainly,get out of town,perhaps')
+'certainly'
+
+>>> yesno(False, 'certainly,get out of town,perhaps')
+'get out of town'
+
+>>> yesno(None, 'certainly,get out of town,perhaps')
+'perhaps'
+
+>>> yesno(None, 'certainly,get out of town')
+'get out of town'
+
+>>> filesizeformat(1023)
+'1023 bytes'
+
+>>> filesizeformat(1024)
+'1.0 KB'
+
+>>> filesizeformat(10*1024)
+'10.0 KB'
+
+>>> filesizeformat(1024*1024-1)
+'1024.0 KB'
+
+>>> filesizeformat(1024*1024)
+'1.0 MB'
+
+>>> filesizeformat(1024*1024*50)
+'50.0 MB'
+
+>>> filesizeformat(1024*1024*1024-1)
+'1024.0 MB'
+
+>>> filesizeformat(1024*1024*1024)
+'1.0 GB'
+
+>>> pluralize(1)
+''
+
+>>> pluralize(0)
+'s'
+
+>>> pluralize(2)
+'s'
+
+>>> pluralize([1])
+''
+
+>>> pluralize([])
+'s'
+
+>>> pluralize([1,2,3])
+'s'
+
+>>> pluralize(1,'es')
+''
+
+>>> pluralize(0,'es')
+'es'
+
+>>> pluralize(2,'es')
+'es'
+
+>>> pluralize(1,'y,ies')
+'y'
+
+>>> pluralize(0,'y,ies')
+'ies'
+
+>>> pluralize(2,'y,ies')
+'ies'
+
+>>> pluralize(0,'y,ies,error')
+''
+
+>>> phone2numeric('0800 flowers')
+'0800 3569377'
+
+# Filters shouldn't break if passed non-strings
+>>> addslashes(123)
+'123'
+>>> linenumbers(123)
+'1. 123'
+>>> lower(123)
+'123'
+>>> make_list(123)
+['1', '2', '3']
+>>> slugify(123)
+'123'
+>>> title(123)
+'123'
+>>> truncatewords(123, 2)
+'123'
+>>> upper(123)
+'123'
+>>> urlencode(123)
+'123'
+>>> urlize(123)
+'123'
+>>> urlizetrunc(123, 1)
+'123'
+>>> wordcount(123)
+1
+>>> wordwrap(123, 2)
+'123'
+>>> ljust('123', 4)
+'123 '
+>>> rjust('123', 4)
+' 123'
+>>> center('123', 5)
+' 123 '
+>>> center('123', 6)
+' 123  '
+>>> cut(123, '2')
+'13'
+>>> escape(123)
+'123'
+>>> linebreaks(123)
+'<p>123</p>'
+>>> linebreaksbr(123)
+'123'
+>>> removetags(123, 'a')
+'123'
+>>> striptags(123)
+'123'
+
+"""
+
+from django.template.defaultfilters import *
+import datetime
+
+if __name__ == '__main__':
+    import doctest
+    doctest.testmod()

Added: vendor/django/current/tests/regressiontests/dispatch/__init__.py
===================================================================
--- vendor/django/current/tests/regressiontests/dispatch/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/dispatch/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,2 @@
+"""Unit-tests for the dispatch project
+"""

Added: vendor/django/current/tests/regressiontests/dispatch/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/dispatch/tests/__init__.py
===================================================================
--- vendor/django/current/tests/regressiontests/dispatch/tests/__init__.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/dispatch/tests/__init__.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,7 @@
+"""
+Unit-tests for the dispatch project
+"""
+
+from test_dispatcher import *
+from test_robustapply import *
+from test_saferef import *

Added: vendor/django/current/tests/regressiontests/dispatch/tests/test_dispatcher.py
===================================================================
--- vendor/django/current/tests/regressiontests/dispatch/tests/test_dispatcher.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/dispatch/tests/test_dispatcher.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,144 @@
+from django.dispatch.dispatcher import *
+from django.dispatch import dispatcher, robust
+import unittest
+import copy
+
+def x(a):
+    return a
+
+class Dummy(object):
+    pass
+
+class Callable(object):
+    def __call__(self, a):
+        return a
+    
+    def a(self, a):
+        return a
+
+class DispatcherTests(unittest.TestCase):
+    """Test suite for dispatcher (barely started)"""
+    
+    def setUp(self):
+        # track the initial state, since it's possible that others have bleed receivers in
+        self.sendersBack = copy.copy(dispatcher.sendersBack)
+        self.connections = copy.copy(dispatcher.connections)
+        self.senders = copy.copy(dispatcher.senders)
+    
+    def _testIsClean(self):
+        """Assert that everything has been cleaned up automatically"""
+        self.assertEqual(dispatcher.sendersBack, self.sendersBack)
+        self.assertEqual(dispatcher.connections, self.connections)
+        self.assertEqual(dispatcher.senders, self.senders)
+    
+    def testExact(self):
+        a = Dummy()
+        signal = 'this'
+        connect(x, signal, a)
+        expected = [(x,a)]
+        result = send('this',a, a=a)
+        self.assertEqual(result, expected)
+        disconnect(x, signal, a)
+        self.assertEqual(list(getAllReceivers(a,signal)), [])
+        self._testIsClean()
+    
+    def testAnonymousSend(self):
+        a = Dummy()
+        signal = 'this'
+        connect(x, signal)
+        expected = [(x,a)]
+        result = send(signal,None, a=a)
+        self.assertEqual(result, expected)
+        disconnect(x, signal)
+        self.assertEqual(list(getAllReceivers(None,signal)), [])
+        self._testIsClean()
+    
+    def testAnyRegistration(self):
+        a = Dummy()
+        signal = 'this'
+        connect(x, signal, Any)
+        expected = [(x,a)]
+        result = send('this',object(), a=a)
+        self.assertEqual(result, expected)
+        disconnect(x, signal, Any)
+        expected = []
+        result = send('this',object(), a=a)
+        self.assertEqual(result, expected)
+        self.assertEqual(list(getAllReceivers(Any,signal)), [])
+        
+        self._testIsClean()
+    
+    def testAnyRegistration2(self):
+        a = Dummy()
+        signal = 'this'
+        connect(x, Any, a)
+        expected = [(x,a)]
+        result = send('this',a, a=a)
+        self.assertEqual(result, expected)
+        disconnect(x, Any, a)
+        self.assertEqual(list(getAllReceivers(a,Any)), [])
+        self._testIsClean()
+    
+    def testGarbageCollected(self):
+        a = Callable()
+        b = Dummy()
+        signal = 'this'
+        connect(a.a, signal, b)
+        expected = []
+        del a
+        result = send('this',b, a=b)
+        self.assertEqual(result, expected)
+        self.assertEqual(list(getAllReceivers(b,signal)), [])
+        self._testIsClean()
+    
+    def testGarbageCollectedObj(self):
+        class x:
+            def __call__(self, a):
+                return a
+        a = Callable()
+        b = Dummy()
+        signal = 'this'
+        connect(a, signal, b)
+        expected = []
+        del a
+        result = send('this',b, a=b)
+        self.assertEqual(result, expected)
+        self.assertEqual(list(getAllReceivers(b,signal)), [])
+        self._testIsClean()
+
+    
+    def testMultipleRegistration(self):
+        a = Callable()
+        b = Dummy()
+        signal = 'this'
+        connect(a, signal, b)
+        connect(a, signal, b)
+        connect(a, signal, b)
+        connect(a, signal, b)
+        connect(a, signal, b)
+        connect(a, signal, b)
+        result = send('this',b, a=b)
+        self.assertEqual(len(result), 1)
+        self.assertEqual(len(list(getAllReceivers(b,signal))), 1)
+        del a
+        del b
+        del result
+        self._testIsClean()
+    
+    def testRobust(self):
+        """Test the sendRobust function"""
+        def fails():
+            raise ValueError('this')
+        a = object()
+        signal = 'this'
+        connect(fails, Any, a)
+        result = robust.sendRobust('this',a, a=a)
+        err = result[0][1]
+        self.assert_(isinstance(err, ValueError))
+        self.assertEqual(err.args, ('this',))
+
+def getSuite():
+    return unittest.makeSuite(DispatcherTests,'test')
+
+if __name__ == "__main__":
+    unittest.main ()

Added: vendor/django/current/tests/regressiontests/dispatch/tests/test_robustapply.py
===================================================================
--- vendor/django/current/tests/regressiontests/dispatch/tests/test_robustapply.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/dispatch/tests/test_robustapply.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,34 @@
+from django.dispatch.robustapply import *
+
+import unittest
+
+def noArgument():
+    pass
+
+def oneArgument(blah):
+    pass
+
+def twoArgument(blah, other):
+    pass
+
+class TestCases(unittest.TestCase):
+    def test01(self):
+        robustApply(noArgument)
+    
+    def test02(self):
+        self.assertRaises(TypeError, robustApply, noArgument, "this")
+    
+    def test03(self):
+        self.assertRaises(TypeError, robustApply, oneArgument)
+    
+    def test04(self):
+        """Raise error on duplication of a particular argument"""
+        self.assertRaises(TypeError, robustApply, oneArgument, "this", blah = "that")
+
+def getSuite():
+    return unittest.makeSuite(TestCases,'test')
+
+
+if __name__ == "__main__":
+    unittest.main()
+    

Added: vendor/django/current/tests/regressiontests/dispatch/tests/test_saferef.py
===================================================================
--- vendor/django/current/tests/regressiontests/dispatch/tests/test_saferef.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/dispatch/tests/test_saferef.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,77 @@
+from django.dispatch.saferef import *
+
+import unittest
+
+class Test1(object):
+    def x(self):
+        pass
+
+def test2(obj):
+    pass
+
+class Test2(object):
+    def __call__(self, obj):
+        pass
+
+class Tester(unittest.TestCase):
+    def setUp(self):
+        ts = []
+        ss = []
+        for x in xrange(5000):
+            t = Test1()
+            ts.append(t)
+            s = safeRef(t.x, self._closure)
+            ss.append(s)
+        ts.append(test2)
+        ss.append(safeRef(test2, self._closure))
+        for x in xrange(30):
+            t = Test2()
+            ts.append(t)
+            s = safeRef(t, self._closure)
+            ss.append(s)
+        self.ts = ts
+        self.ss = ss
+        self.closureCount = 0
+    
+    def tearDown(self):
+        del self.ts
+        del self.ss
+    
+    def testIn(self):
+        """Test the "in" operator for safe references (cmp)"""
+        for t in self.ts[:50]:
+            self.assert_(safeRef(t.x) in self.ss)
+    
+    def testValid(self):
+        """Test that the references are valid (return instance methods)"""
+        for s in self.ss:
+            self.assert_(s())
+    
+    def testShortCircuit (self):
+        """Test that creation short-circuits to reuse existing references"""
+        sd = {}
+        for s in self.ss:
+            sd[s] = 1
+        for t in self.ts:
+            if hasattr(t, 'x'):
+                self.assert_(sd.has_key(safeRef(t.x)))
+            else:
+                self.assert_(sd.has_key(safeRef(t)))
+    
+    def testRepresentation (self):
+        """Test that the reference object's representation works
+        
+        XXX Doesn't currently check the results, just that no error
+            is raised
+        """
+        repr(self.ss[-1])
+        
+    def _closure(self, ref):
+        """Dumb utility mechanism to increment deletion counter"""
+        self.closureCount +=1
+
+def getSuite():
+    return unittest.makeSuite(Tester,'test')
+
+if __name__ == "__main__":
+    unittest.main()

Added: vendor/django/current/tests/regressiontests/forms/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/forms/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/forms/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/forms/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/forms/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,3585 @@
+# -*- coding: utf-8 -*-
+r"""
+>>> from django.newforms import *
+>>> import datetime
+>>> import re
+
+###########
+# Widgets #
+###########
+
+Each Widget class corresponds to an HTML form widget. A Widget knows how to
+render itself, given a field name and some data. Widgets don't perform
+validation.
+
+# TextInput Widget ############################################################
+
+>>> w = TextInput()
+>>> w.render('email', '')
+u'<input type="text" name="email" />'
+>>> w.render('email', None)
+u'<input type="text" name="email" />'
+>>> w.render('email', 'test at example.com')
+u'<input type="text" name="email" value="test at example.com" />'
+>>> w.render('email', 'some "quoted" & ampersanded value')
+u'<input type="text" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />'
+>>> w.render('email', 'test at example.com', attrs={'class': 'fun'})
+u'<input type="text" name="email" value="test at example.com" class="fun" />'
+
+# Note that doctest in Python 2.4 (and maybe 2.5?) doesn't support non-ascii
+# characters in output, so we're displaying the repr() here.
+>>> w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'})
+u'<input type="text" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun" />'
+
+You can also pass 'attrs' to the constructor:
+>>> w = TextInput(attrs={'class': 'fun'})
+>>> w.render('email', '')
+u'<input type="text" class="fun" name="email" />'
+>>> w.render('email', 'foo at example.com')
+u'<input type="text" class="fun" value="foo at example.com" name="email" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = TextInput(attrs={'class': 'pretty'})
+>>> w.render('email', '', attrs={'class': 'special'})
+u'<input type="text" class="special" name="email" />'
+
+# PasswordInput Widget ############################################################
+
+>>> w = PasswordInput()
+>>> w.render('email', '')
+u'<input type="password" name="email" />'
+>>> w.render('email', None)
+u'<input type="password" name="email" />'
+>>> w.render('email', 'test at example.com')
+u'<input type="password" name="email" value="test at example.com" />'
+>>> w.render('email', 'some "quoted" & ampersanded value')
+u'<input type="password" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />'
+>>> w.render('email', 'test at example.com', attrs={'class': 'fun'})
+u'<input type="password" name="email" value="test at example.com" class="fun" />'
+
+You can also pass 'attrs' to the constructor:
+>>> w = PasswordInput(attrs={'class': 'fun'})
+>>> w.render('email', '')
+u'<input type="password" class="fun" name="email" />'
+>>> w.render('email', 'foo at example.com')
+u'<input type="password" class="fun" value="foo at example.com" name="email" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = PasswordInput(attrs={'class': 'pretty'})
+>>> w.render('email', '', attrs={'class': 'special'})
+u'<input type="password" class="special" name="email" />'
+
+>>> w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'})
+u'<input type="password" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />'
+
+The render_value argument lets you specify whether the widget should render
+its value. You may want to do this for security reasons.
+>>> w = PasswordInput(render_value=True)
+>>> w.render('email', 'secret')
+u'<input type="password" name="email" value="secret" />'
+>>> w = PasswordInput(render_value=False)
+>>> w.render('email', '')
+u'<input type="password" name="email" />'
+>>> w.render('email', None)
+u'<input type="password" name="email" />'
+>>> w.render('email', 'secret')
+u'<input type="password" name="email" />'
+>>> w = PasswordInput(attrs={'class': 'fun'}, render_value=False)
+>>> w.render('email', 'secret')
+u'<input type="password" class="fun" name="email" />'
+
+# HiddenInput Widget ############################################################
+
+>>> w = HiddenInput()
+>>> w.render('email', '')
+u'<input type="hidden" name="email" />'
+>>> w.render('email', None)
+u'<input type="hidden" name="email" />'
+>>> w.render('email', 'test at example.com')
+u'<input type="hidden" name="email" value="test at example.com" />'
+>>> w.render('email', 'some "quoted" & ampersanded value')
+u'<input type="hidden" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />'
+>>> w.render('email', 'test at example.com', attrs={'class': 'fun'})
+u'<input type="hidden" name="email" value="test at example.com" class="fun" />'
+
+You can also pass 'attrs' to the constructor:
+>>> w = HiddenInput(attrs={'class': 'fun'})
+>>> w.render('email', '')
+u'<input type="hidden" class="fun" name="email" />'
+>>> w.render('email', 'foo at example.com')
+u'<input type="hidden" class="fun" value="foo at example.com" name="email" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = HiddenInput(attrs={'class': 'pretty'})
+>>> w.render('email', '', attrs={'class': 'special'})
+u'<input type="hidden" class="special" name="email" />'
+
+>>> w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'})
+u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = HiddenInput(attrs={'class': 'pretty'})
+>>> w.render('email', '', attrs={'class': 'special'})
+u'<input type="hidden" class="special" name="email" />'
+
+# MultipleHiddenInput Widget ##################################################
+
+>>> w = MultipleHiddenInput()
+>>> w.render('email', [])
+u''
+>>> w.render('email', None)
+u''
+>>> w.render('email', ['test at example.com'])
+u'<input type="hidden" name="email" value="test at example.com" />'
+>>> w.render('email', ['some "quoted" & ampersanded value'])
+u'<input type="hidden" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />'
+>>> w.render('email', ['test at example.com', 'foo at example.com'])
+u'<input type="hidden" name="email" value="test at example.com" />\n<input type="hidden" name="email" value="foo at example.com" />'
+>>> w.render('email', ['test at example.com'], attrs={'class': 'fun'})
+u'<input type="hidden" name="email" value="test at example.com" class="fun" />'
+>>> w.render('email', ['test at example.com', 'foo at example.com'], attrs={'class': 'fun'})
+u'<input type="hidden" name="email" value="test at example.com" class="fun" />\n<input type="hidden" name="email" value="foo at example.com" class="fun" />'
+
+You can also pass 'attrs' to the constructor:
+>>> w = MultipleHiddenInput(attrs={'class': 'fun'})
+>>> w.render('email', [])
+u''
+>>> w.render('email', ['foo at example.com'])
+u'<input type="hidden" class="fun" value="foo at example.com" name="email" />'
+>>> w.render('email', ['foo at example.com', 'test at example.com'])
+u'<input type="hidden" class="fun" value="foo at example.com" name="email" />\n<input type="hidden" class="fun" value="test at example.com" name="email" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = MultipleHiddenInput(attrs={'class': 'pretty'})
+>>> w.render('email', ['foo at example.com'], attrs={'class': 'special'})
+u'<input type="hidden" class="special" value="foo at example.com" name="email" />'
+
+>>> w.render('email', ['ŠĐĆŽćžšđ'], attrs={'class': 'fun'})
+u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = MultipleHiddenInput(attrs={'class': 'pretty'})
+>>> w.render('email', ['foo at example.com'], attrs={'class': 'special'})
+u'<input type="hidden" class="special" value="foo at example.com" name="email" />'
+
+# FileInput Widget ############################################################
+
+>>> w = FileInput()
+>>> w.render('email', '')
+u'<input type="file" name="email" />'
+>>> w.render('email', None)
+u'<input type="file" name="email" />'
+>>> w.render('email', 'test at example.com')
+u'<input type="file" name="email" value="test at example.com" />'
+>>> w.render('email', 'some "quoted" & ampersanded value')
+u'<input type="file" name="email" value="some &quot;quoted&quot; &amp; ampersanded value" />'
+>>> w.render('email', 'test at example.com', attrs={'class': 'fun'})
+u'<input type="file" name="email" value="test at example.com" class="fun" />'
+
+You can also pass 'attrs' to the constructor:
+>>> w = FileInput(attrs={'class': 'fun'})
+>>> w.render('email', '')
+u'<input type="file" class="fun" name="email" />'
+>>> w.render('email', 'foo at example.com')
+u'<input type="file" class="fun" value="foo at example.com" name="email" />'
+
+>>> w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'})
+u'<input type="file" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />'
+
+# Textarea Widget #############################################################
+
+>>> w = Textarea()
+>>> w.render('msg', '')
+u'<textarea name="msg"></textarea>'
+>>> w.render('msg', None)
+u'<textarea name="msg"></textarea>'
+>>> w.render('msg', 'value')
+u'<textarea name="msg">value</textarea>'
+>>> w.render('msg', 'some "quoted" & ampersanded value')
+u'<textarea name="msg">some &quot;quoted&quot; &amp; ampersanded value</textarea>'
+>>> w.render('msg', 'value', attrs={'class': 'pretty'})
+u'<textarea name="msg" class="pretty">value</textarea>'
+
+You can also pass 'attrs' to the constructor:
+>>> w = Textarea(attrs={'class': 'pretty'})
+>>> w.render('msg', '')
+u'<textarea class="pretty" name="msg"></textarea>'
+>>> w.render('msg', 'example')
+u'<textarea class="pretty" name="msg">example</textarea>'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = Textarea(attrs={'class': 'pretty'})
+>>> w.render('msg', '', attrs={'class': 'special'})
+u'<textarea class="special" name="msg"></textarea>'
+
+>>> w.render('msg', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'})
+u'<textarea class="fun" name="msg">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>'
+
+# CheckboxInput Widget ########################################################
+
+>>> w = CheckboxInput()
+>>> w.render('is_cool', '')
+u'<input type="checkbox" name="is_cool" />'
+>>> w.render('is_cool', None)
+u'<input type="checkbox" name="is_cool" />'
+>>> w.render('is_cool', False)
+u'<input type="checkbox" name="is_cool" />'
+>>> w.render('is_cool', True)
+u'<input checked="checked" type="checkbox" name="is_cool" />'
+
+Using any value that's not in ('', None, False, True) will check the checkbox
+and set the 'value' attribute.
+>>> w.render('is_cool', 'foo')
+u'<input checked="checked" type="checkbox" name="is_cool" value="foo" />'
+
+>>> w.render('is_cool', False, attrs={'class': 'pretty'})
+u'<input type="checkbox" name="is_cool" class="pretty" />'
+
+You can also pass 'attrs' to the constructor:
+>>> w = CheckboxInput(attrs={'class': 'pretty'})
+>>> w.render('is_cool', '')
+u'<input type="checkbox" class="pretty" name="is_cool" />'
+
+'attrs' passed to render() get precedence over those passed to the constructor:
+>>> w = CheckboxInput(attrs={'class': 'pretty'})
+>>> w.render('is_cool', '', attrs={'class': 'special'})
+u'<input type="checkbox" class="special" name="is_cool" />'
+
+You can pass 'check_test' to the constructor. This is a callable that takes the
+value and returns True if the box should be checked.
+>>> w = CheckboxInput(check_test=lambda value: value.startswith('hello'))
+>>> w.render('greeting', '')
+u'<input type="checkbox" name="greeting" />'
+>>> w.render('greeting', 'hello')
+u'<input checked="checked" type="checkbox" name="greeting" value="hello" />'
+>>> w.render('greeting', 'hello there')
+u'<input checked="checked" type="checkbox" name="greeting" value="hello there" />'
+>>> w.render('greeting', 'hello & goodbye')
+u'<input checked="checked" type="checkbox" name="greeting" value="hello &amp; goodbye" />'
+
+A subtlety: If the 'check_test' argument cannot handle a value and raises any
+exception during its __call__, then the exception will be swallowed and the box
+will not be checked. In this example, the 'check_test' assumes the value has a
+startswith() method, which fails for the values True, False and None.
+>>> w.render('greeting', True)
+u'<input type="checkbox" name="greeting" />'
+>>> w.render('greeting', False)
+u'<input type="checkbox" name="greeting" />'
+>>> w.render('greeting', None)
+u'<input type="checkbox" name="greeting" />'
+
+# Select Widget ###############################################################
+
+>>> w = Select()
+>>> print w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select name="beatle">
+<option value="J" selected="selected">John</option>
+<option value="P">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+
+If the value is None, none of the options are selected:
+>>> print w.render('beatle', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select name="beatle">
+<option value="J">John</option>
+<option value="P">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+
+If the value corresponds to a label (but not to an option value), none of the options are selected:
+>>> print w.render('beatle', 'John', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select name="beatle">
+<option value="J">John</option>
+<option value="P">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+
+The value is compared to its str():
+>>> print w.render('num', 2, choices=[('1', '1'), ('2', '2'), ('3', '3')])
+<select name="num">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+>>> print w.render('num', '2', choices=[(1, 1), (2, 2), (3, 3)])
+<select name="num">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+>>> print w.render('num', 2, choices=[(1, 1), (2, 2), (3, 3)])
+<select name="num">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+
+The 'choices' argument can be any iterable:
+>>> from itertools import chain
+>>> def get_choices():
+...     for i in range(5):
+...         yield (i, i)
+>>> print w.render('num', 2, choices=get_choices())
+<select name="num">
+<option value="0">0</option>
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+</select>
+>>> things = ({'id': 1, 'name': 'And Boom'}, {'id': 2, 'name': 'One More Thing!'})
+>>> class SomeForm(Form):
+...     somechoice = ChoiceField(choices=chain((('', '-'*9),), [(thing['id'], thing['name']) for thing in things]))
+>>> f = SomeForm()
+>>> f.as_table()
+u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>'
+>>> f.as_table()
+u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>'
+>>> f = SomeForm({'somechoice': 2})
+>>> f.as_table()
+u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="">---------</option>\n<option value="1">And Boom</option>\n<option value="2" selected="selected">One More Thing!</option>\n</select></td></tr>'
+
+You can also pass 'choices' to the constructor:
+>>> w = Select(choices=[(1, 1), (2, 2), (3, 3)])
+>>> print w.render('num', 2)
+<select name="num">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+
+If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
+>>> print w.render('num', 2, choices=[(4, 4), (5, 5)])
+<select name="num">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+<option value="5">5</option>
+</select>
+
+>>> w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])
+u'<select name="email">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>'
+
+If choices is passed to the constructor and is a generator, it can be iterated
+over multiple times without getting consumed:
+>>> w = Select(choices=get_choices())
+>>> print w.render('num', 2)
+<select name="num">
+<option value="0">0</option>
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+</select>
+>>> print w.render('num', 3)
+<select name="num">
+<option value="0">0</option>
+<option value="1">1</option>
+<option value="2">2</option>
+<option value="3" selected="selected">3</option>
+<option value="4">4</option>
+</select>
+
+# NullBooleanSelect Widget ####################################################
+
+>>> w = NullBooleanSelect()
+>>> print w.render('is_cool', True)
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2" selected="selected">Yes</option>
+<option value="3">No</option>
+</select>
+>>> print w.render('is_cool', False)
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2">Yes</option>
+<option value="3" selected="selected">No</option>
+</select>
+>>> print w.render('is_cool', None)
+<select name="is_cool">
+<option value="1" selected="selected">Unknown</option>
+<option value="2">Yes</option>
+<option value="3">No</option>
+</select>
+>>> print w.render('is_cool', '2')
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2" selected="selected">Yes</option>
+<option value="3">No</option>
+</select>
+>>> print w.render('is_cool', '3')
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2">Yes</option>
+<option value="3" selected="selected">No</option>
+</select>
+
+# SelectMultiple Widget #######################################################
+
+>>> w = SelectMultiple()
+>>> print w.render('beatles', ['J'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select multiple="multiple" name="beatles">
+<option value="J" selected="selected">John</option>
+<option value="P">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+>>> print w.render('beatles', ['J', 'P'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select multiple="multiple" name="beatles">
+<option value="J" selected="selected">John</option>
+<option value="P" selected="selected">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+>>> print w.render('beatles', ['J', 'P', 'R'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select multiple="multiple" name="beatles">
+<option value="J" selected="selected">John</option>
+<option value="P" selected="selected">Paul</option>
+<option value="G">George</option>
+<option value="R" selected="selected">Ringo</option>
+</select>
+
+If the value is None, none of the options are selected:
+>>> print w.render('beatles', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select multiple="multiple" name="beatles">
+<option value="J">John</option>
+<option value="P">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+
+If the value corresponds to a label (but not to an option value), none of the options are selected:
+>>> print w.render('beatles', ['John'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select multiple="multiple" name="beatles">
+<option value="J">John</option>
+<option value="P">Paul</option>
+<option value="G">George</option>
+<option value="R">Ringo</option>
+</select>
+
+If multiple values are given, but some of them are not valid, the valid ones are selected:
+>>> print w.render('beatles', ['J', 'G', 'foo'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<select multiple="multiple" name="beatles">
+<option value="J" selected="selected">John</option>
+<option value="P">Paul</option>
+<option value="G" selected="selected">George</option>
+<option value="R">Ringo</option>
+</select>
+
+The value is compared to its str():
+>>> print w.render('nums', [2], choices=[('1', '1'), ('2', '2'), ('3', '3')])
+<select multiple="multiple" name="nums">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+>>> print w.render('nums', ['2'], choices=[(1, 1), (2, 2), (3, 3)])
+<select multiple="multiple" name="nums">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+>>> print w.render('nums', [2], choices=[(1, 1), (2, 2), (3, 3)])
+<select multiple="multiple" name="nums">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+
+The 'choices' argument can be any iterable:
+>>> def get_choices():
+...     for i in range(5):
+...         yield (i, i)
+>>> print w.render('nums', [2], choices=get_choices())
+<select multiple="multiple" name="nums">
+<option value="0">0</option>
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+</select>
+
+You can also pass 'choices' to the constructor:
+>>> w = SelectMultiple(choices=[(1, 1), (2, 2), (3, 3)])
+>>> print w.render('nums', [2])
+<select multiple="multiple" name="nums">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+</select>
+
+If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
+>>> print w.render('nums', [2], choices=[(4, 4), (5, 5)])
+<select multiple="multiple" name="nums">
+<option value="1">1</option>
+<option value="2" selected="selected">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+<option value="5">5</option>
+</select>
+
+>>> w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])
+u'<select multiple="multiple" name="nums">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>'
+
+# RadioSelect Widget ##########################################################
+
+>>> w = RadioSelect()
+>>> print w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input checked="checked" type="radio" name="beatle" value="J" /> John</label></li>
+<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
+<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
+<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
+</ul>
+
+If the value is None, none of the options are checked:
+>>> print w.render('beatle', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input type="radio" name="beatle" value="J" /> John</label></li>
+<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
+<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
+<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
+</ul>
+
+If the value corresponds to a label (but not to an option value), none of the options are checked:
+>>> print w.render('beatle', 'John', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input type="radio" name="beatle" value="J" /> John</label></li>
+<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
+<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
+<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
+</ul>
+
+The value is compared to its str():
+>>> print w.render('num', 2, choices=[('1', '1'), ('2', '2'), ('3', '3')])
+<ul>
+<li><label><input type="radio" name="num" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
+<li><label><input type="radio" name="num" value="3" /> 3</label></li>
+</ul>
+>>> print w.render('num', '2', choices=[(1, 1), (2, 2), (3, 3)])
+<ul>
+<li><label><input type="radio" name="num" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
+<li><label><input type="radio" name="num" value="3" /> 3</label></li>
+</ul>
+>>> print w.render('num', 2, choices=[(1, 1), (2, 2), (3, 3)])
+<ul>
+<li><label><input type="radio" name="num" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
+<li><label><input type="radio" name="num" value="3" /> 3</label></li>
+</ul>
+
+The 'choices' argument can be any iterable:
+>>> def get_choices():
+...     for i in range(5):
+...         yield (i, i)
+>>> print w.render('num', 2, choices=get_choices())
+<ul>
+<li><label><input type="radio" name="num" value="0" /> 0</label></li>
+<li><label><input type="radio" name="num" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
+<li><label><input type="radio" name="num" value="3" /> 3</label></li>
+<li><label><input type="radio" name="num" value="4" /> 4</label></li>
+</ul>
+
+You can also pass 'choices' to the constructor:
+>>> w = RadioSelect(choices=[(1, 1), (2, 2), (3, 3)])
+>>> print w.render('num', 2)
+<ul>
+<li><label><input type="radio" name="num" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
+<li><label><input type="radio" name="num" value="3" /> 3</label></li>
+</ul>
+
+If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
+>>> print w.render('num', 2, choices=[(4, 4), (5, 5)])
+<ul>
+<li><label><input type="radio" name="num" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="radio" name="num" value="2" /> 2</label></li>
+<li><label><input type="radio" name="num" value="3" /> 3</label></li>
+<li><label><input type="radio" name="num" value="4" /> 4</label></li>
+<li><label><input type="radio" name="num" value="5" /> 5</label></li>
+</ul>
+
+The render() method returns a RadioFieldRenderer object, whose str() is a <ul>.
+You can manipulate that object directly to customize the way the RadioSelect
+is rendered.
+>>> w = RadioSelect()
+>>> r = w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+>>> for inp in r:
+...     print inp
+<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>
+<label><input type="radio" name="beatle" value="P" /> Paul</label>
+<label><input type="radio" name="beatle" value="G" /> George</label>
+<label><input type="radio" name="beatle" value="R" /> Ringo</label>
+>>> for inp in r:
+...     print '%s<br />' % inp
+<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label><br />
+<label><input type="radio" name="beatle" value="P" /> Paul</label><br />
+<label><input type="radio" name="beatle" value="G" /> George</label><br />
+<label><input type="radio" name="beatle" value="R" /> Ringo</label><br />
+>>> for inp in r:
+...     print '<p>%s %s</p>' % (inp.tag(), inp.choice_label)
+<p><input checked="checked" type="radio" name="beatle" value="J" /> John</p>
+<p><input type="radio" name="beatle" value="P" /> Paul</p>
+<p><input type="radio" name="beatle" value="G" /> George</p>
+<p><input type="radio" name="beatle" value="R" /> Ringo</p>
+>>> for inp in r:
+...     print '%s %s %s %s %s' % (inp.name, inp.value, inp.choice_value, inp.choice_label, inp.is_checked())
+beatle J J John True
+beatle J P Paul False
+beatle J G George False
+beatle J R Ringo False
+
+A RadioFieldRenderer object also allows index access to individual RadioInput
+objects.
+>>> w = RadioSelect()
+>>> r = w.render('beatle', 'J', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+>>> print r[1]
+<label><input type="radio" name="beatle" value="P" /> Paul</label>
+>>> print r[0]
+<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>
+>>> r[0].is_checked()
+True
+>>> r[1].is_checked()
+False
+>>> r[1].name, r[1].value, r[1].choice_value, r[1].choice_label
+('beatle', u'J', u'P', u'Paul')
+>>> r[10]
+Traceback (most recent call last):
+...
+IndexError: list index out of range
+
+>>> w = RadioSelect()
+>>> unicode(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]))
+u'<ul>\n<li><label><input checked="checked" type="radio" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="radio" name="email" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>'
+
+# CheckboxSelectMultiple Widget ###############################################
+
+>>> w = CheckboxSelectMultiple()
+>>> print w.render('beatles', ['J'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
+<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
+<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
+<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
+</ul>
+>>> print w.render('beatles', ['J', 'P'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="P" /> Paul</label></li>
+<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
+<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
+</ul>
+>>> print w.render('beatles', ['J', 'P', 'R'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="P" /> Paul</label></li>
+<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="R" /> Ringo</label></li>
+</ul>
+
+If the value is None, none of the options are selected:
+>>> print w.render('beatles', None, choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input type="checkbox" name="beatles" value="J" /> John</label></li>
+<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
+<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
+<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
+</ul>
+
+If the value corresponds to a label (but not to an option value), none of the options are selected:
+>>> print w.render('beatles', ['John'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input type="checkbox" name="beatles" value="J" /> John</label></li>
+<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
+<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
+<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
+</ul>
+
+If multiple values are given, but some of them are not valid, the valid ones are selected:
+>>> print w.render('beatles', ['J', 'G', 'foo'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo')))
+<ul>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li>
+<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
+<li><label><input checked="checked" type="checkbox" name="beatles" value="G" /> George</label></li>
+<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
+</ul>
+
+The value is compared to its str():
+>>> print w.render('nums', [2], choices=[('1', '1'), ('2', '2'), ('3', '3')])
+<ul>
+<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
+<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
+</ul>
+>>> print w.render('nums', ['2'], choices=[(1, 1), (2, 2), (3, 3)])
+<ul>
+<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
+<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
+</ul>
+>>> print w.render('nums', [2], choices=[(1, 1), (2, 2), (3, 3)])
+<ul>
+<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
+<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
+</ul>
+
+The 'choices' argument can be any iterable:
+>>> def get_choices():
+...     for i in range(5):
+...         yield (i, i)
+>>> print w.render('nums', [2], choices=get_choices())
+<ul>
+<li><label><input type="checkbox" name="nums" value="0" /> 0</label></li>
+<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
+<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
+<li><label><input type="checkbox" name="nums" value="4" /> 4</label></li>
+</ul>
+
+You can also pass 'choices' to the constructor:
+>>> w = CheckboxSelectMultiple(choices=[(1, 1), (2, 2), (3, 3)])
+>>> print w.render('nums', [2])
+<ul>
+<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
+<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
+</ul>
+
+If 'choices' is passed to both the constructor and render(), then they'll both be in the output:
+>>> print w.render('nums', [2], choices=[(4, 4), (5, 5)])
+<ul>
+<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>
+<li><label><input checked="checked" type="checkbox" name="nums" value="2" /> 2</label></li>
+<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>
+<li><label><input type="checkbox" name="nums" value="4" /> 4</label></li>
+<li><label><input type="checkbox" name="nums" value="5" /> 5</label></li>
+</ul>
+
+>>> w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])
+u'<ul>\n<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>\n<li><label><input type="checkbox" name="nums" value="2" /> 2</label></li>\n<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>\n<li><label><input checked="checked" type="checkbox" name="nums" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="checkbox" name="nums" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>'
+
+# MultiWidget #################################################################
+
+>>> class MyMultiWidget(MultiWidget):
+...     def decompress(self, value):
+...         if value:
+...             return value.split('__')
+...         return ['', '']
+...     def format_output(self, rendered_widgets):
+...         return u'<br />'.join(rendered_widgets)
+>>> w = MyMultiWidget(widgets=(TextInput(attrs={'class': 'big'}), TextInput(attrs={'class': 'small'})))
+>>> w.render('name', ['john', 'lennon'])
+u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />'
+>>> w.render('name', 'john__lennon')
+u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />'
+
+# SplitDateTimeWidget #########################################################
+
+>>> w = SplitDateTimeWidget()
+>>> w.render('date', '')
+u'<input type="text" name="date_0" /><input type="text" name="date_1" />'
+>>> w.render('date', None)
+u'<input type="text" name="date_0" /><input type="text" name="date_1" />'
+>>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30))
+u'<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />'
+>>> w.render('date', [datetime.date(2006, 1, 10), datetime.time(7, 30)])
+u'<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />'
+
+You can also pass 'attrs' to the constructor. In this case, the attrs will be
+included on both widgets.
+>>> w = SplitDateTimeWidget(attrs={'class': 'pretty'})
+>>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30))
+u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="pretty" value="07:30:00" name="date_1" />'
+
+##########
+# Fields #
+##########
+
+Each Field class does some sort of validation. Each Field has a clean() method,
+which either raises django.newforms.ValidationError or returns the "clean"
+data -- usually a Unicode object, but, in some rare cases, a list.
+
+Each Field's __init__() takes at least these parameters:
+    required -- Boolean that specifies whether the field is required.
+                True by default.
+    widget -- A Widget class, or instance of a Widget class, that should be
+              used for this Field when displaying it. Each Field has a default
+              Widget that it'll use if you don't specify this. In most cases,
+              the default widget is TextInput.
+    label -- A verbose name for this field, for use in displaying this field in
+             a form. By default, Django will use a "pretty" version of the form
+             field name, if the Field is part of a Form.
+    initial -- A value to use in this Field's initial display. This value is
+               *not* used as a fallback if data isn't given.
+
+Other than that, the Field subclasses have class-specific options for
+__init__(). For example, CharField has a max_length option.
+
+# CharField ###################################################################
+
+>>> f = CharField()
+>>> f.clean(1)
+u'1'
+>>> f.clean('hello')
+u'hello'
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean([1, 2, 3])
+u'[1, 2, 3]'
+
+>>> f = CharField(required=False)
+>>> f.clean(1)
+u'1'
+>>> f.clean('hello')
+u'hello'
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+>>> f.clean([1, 2, 3])
+u'[1, 2, 3]'
+
+CharField accepts an optional max_length parameter:
+>>> f = CharField(max_length=10, required=False)
+>>> f.clean('12345')
+u'12345'
+>>> f.clean('1234567890')
+u'1234567890'
+>>> f.clean('1234567890a')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at most 10 characters.']
+
+CharField accepts an optional min_length parameter:
+>>> f = CharField(min_length=10, required=False)
+>>> f.clean('')
+u''
+>>> f.clean('12345')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at least 10 characters.']
+>>> f.clean('1234567890')
+u'1234567890'
+>>> f.clean('1234567890a')
+u'1234567890a'
+
+>>> f = CharField(min_length=10, required=True)
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('12345')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at least 10 characters.']
+>>> f.clean('1234567890')
+u'1234567890'
+>>> f.clean('1234567890a')
+u'1234567890a'
+
+# IntegerField ################################################################
+
+>>> f = IntegerField()
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('1')
+1
+>>> isinstance(f.clean('1'), int)
+True
+>>> f.clean('23')
+23
+>>> f.clean('a')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a whole number.']
+>>> f.clean('1 ')
+1
+>>> f.clean(' 1')
+1
+>>> f.clean(' 1 ')
+1
+>>> f.clean('1a')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a whole number.']
+
+>>> f = IntegerField(required=False)
+>>> f.clean('')
+>>> repr(f.clean(''))
+'None'
+>>> f.clean(None)
+>>> repr(f.clean(None))
+'None'
+>>> f.clean('1')
+1
+>>> isinstance(f.clean('1'), int)
+True
+>>> f.clean('23')
+23
+>>> f.clean('a')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a whole number.']
+>>> f.clean('1 ')
+1
+>>> f.clean(' 1')
+1
+>>> f.clean(' 1 ')
+1
+>>> f.clean('1a')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a whole number.']
+
+IntegerField accepts an optional max_value parameter:
+>>> f = IntegerField(max_value=10)
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(1)
+1
+>>> f.clean(10)
+10
+>>> f.clean(11)
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value is less than or equal to 10.']
+>>> f.clean('10')
+10
+>>> f.clean('11')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value is less than or equal to 10.']
+
+IntegerField accepts an optional min_value parameter:
+>>> f = IntegerField(min_value=10)
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(1)
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value is greater than or equal to 10.']
+>>> f.clean(10)
+10
+>>> f.clean(11)
+11
+>>> f.clean('10')
+10
+>>> f.clean('11')
+11
+
+min_value and max_value can be used together:
+>>> f = IntegerField(min_value=10, max_value=20)
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(1)
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value is greater than or equal to 10.']
+>>> f.clean(10)
+10
+>>> f.clean(11)
+11
+>>> f.clean('10')
+10
+>>> f.clean('11')
+11
+>>> f.clean(20)
+20
+>>> f.clean(21)
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value is less than or equal to 20.']
+
+# DateField ###################################################################
+
+>>> import datetime
+>>> f = DateField()
+>>> f.clean(datetime.date(2006, 10, 25))
+datetime.date(2006, 10, 25)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30))
+datetime.date(2006, 10, 25)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59))
+datetime.date(2006, 10, 25)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200))
+datetime.date(2006, 10, 25)
+>>> f.clean('2006-10-25')
+datetime.date(2006, 10, 25)
+>>> f.clean('10/25/2006')
+datetime.date(2006, 10, 25)
+>>> f.clean('10/25/06')
+datetime.date(2006, 10, 25)
+>>> f.clean('Oct 25 2006')
+datetime.date(2006, 10, 25)
+>>> f.clean('October 25 2006')
+datetime.date(2006, 10, 25)
+>>> f.clean('October 25, 2006')
+datetime.date(2006, 10, 25)
+>>> f.clean('25 October 2006')
+datetime.date(2006, 10, 25)
+>>> f.clean('25 October, 2006')
+datetime.date(2006, 10, 25)
+>>> f.clean('2006-4-31')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+>>> f.clean('200a-10-25')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+>>> f.clean('25/10/06')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = DateField(required=False)
+>>> f.clean(None)
+>>> repr(f.clean(None))
+'None'
+>>> f.clean('')
+>>> repr(f.clean(''))
+'None'
+
+DateField accepts an optional input_formats parameter:
+>>> f = DateField(input_formats=['%Y %m %d'])
+>>> f.clean(datetime.date(2006, 10, 25))
+datetime.date(2006, 10, 25)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30))
+datetime.date(2006, 10, 25)
+>>> f.clean('2006 10 25')
+datetime.date(2006, 10, 25)
+
+The input_formats parameter overrides all default input formats,
+so the default formats won't work unless you specify them:
+>>> f.clean('2006-10-25')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+>>> f.clean('10/25/2006')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+>>> f.clean('10/25/06')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+
+# TimeField ###################################################################
+
+>>> import datetime
+>>> f = TimeField()
+>>> f.clean(datetime.time(14, 25))
+datetime.time(14, 25)
+>>> f.clean(datetime.time(14, 25, 59))
+datetime.time(14, 25, 59)
+>>> f.clean('14:25')
+datetime.time(14, 25)
+>>> f.clean('14:25:59')
+datetime.time(14, 25, 59)
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid time.']
+>>> f.clean('1:24 p.m.')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid time.']
+
+TimeField accepts an optional input_formats parameter:
+>>> f = TimeField(input_formats=['%I:%M %p'])
+>>> f.clean(datetime.time(14, 25))
+datetime.time(14, 25)
+>>> f.clean(datetime.time(14, 25, 59))
+datetime.time(14, 25, 59)
+>>> f.clean('4:25 AM')
+datetime.time(4, 25)
+>>> f.clean('4:25 PM')
+datetime.time(16, 25)
+
+The input_formats parameter overrides all default input formats,
+so the default formats won't work unless you specify them:
+>>> f.clean('14:30:45')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid time.']
+
+# DateTimeField ###############################################################
+
+>>> import datetime
+>>> f = DateTimeField()
+>>> f.clean(datetime.date(2006, 10, 25))
+datetime.datetime(2006, 10, 25, 0, 0)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30))
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59))
+datetime.datetime(2006, 10, 25, 14, 30, 59)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200))
+datetime.datetime(2006, 10, 25, 14, 30, 59, 200)
+>>> f.clean('2006-10-25 14:30:45')
+datetime.datetime(2006, 10, 25, 14, 30, 45)
+>>> f.clean('2006-10-25 14:30:00')
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean('2006-10-25 14:30')
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean('2006-10-25')
+datetime.datetime(2006, 10, 25, 0, 0)
+>>> f.clean('10/25/2006 14:30:45')
+datetime.datetime(2006, 10, 25, 14, 30, 45)
+>>> f.clean('10/25/2006 14:30:00')
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean('10/25/2006 14:30')
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean('10/25/2006')
+datetime.datetime(2006, 10, 25, 0, 0)
+>>> f.clean('10/25/06 14:30:45')
+datetime.datetime(2006, 10, 25, 14, 30, 45)
+>>> f.clean('10/25/06 14:30:00')
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean('10/25/06 14:30')
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean('10/25/06')
+datetime.datetime(2006, 10, 25, 0, 0)
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date/time.']
+>>> f.clean('2006-10-25 4:30 p.m.')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date/time.']
+
+DateField accepts an optional input_formats parameter:
+>>> f = DateTimeField(input_formats=['%Y %m %d %I:%M %p'])
+>>> f.clean(datetime.date(2006, 10, 25))
+datetime.datetime(2006, 10, 25, 0, 0)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30))
+datetime.datetime(2006, 10, 25, 14, 30)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59))
+datetime.datetime(2006, 10, 25, 14, 30, 59)
+>>> f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200))
+datetime.datetime(2006, 10, 25, 14, 30, 59, 200)
+>>> f.clean('2006 10 25 2:30 PM')
+datetime.datetime(2006, 10, 25, 14, 30)
+
+The input_formats parameter overrides all default input formats,
+so the default formats won't work unless you specify them:
+>>> f.clean('2006-10-25 14:30:45')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date/time.']
+
+>>> f = DateTimeField(required=False)
+>>> f.clean(None)
+>>> repr(f.clean(None))
+'None'
+>>> f.clean('')
+>>> repr(f.clean(''))
+'None'
+
+# RegexField ##################################################################
+
+>>> f = RegexField('^\d[A-F]\d$')
+>>> f.clean('2A2')
+u'2A2'
+>>> f.clean('3F3')
+u'3F3'
+>>> f.clean('3G3')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+>>> f.clean(' 2A2')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+>>> f.clean('2A2 ')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = RegexField('^\d[A-F]\d$', required=False)
+>>> f.clean('2A2')
+u'2A2'
+>>> f.clean('3F3')
+u'3F3'
+>>> f.clean('3G3')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+>>> f.clean('')
+u''
+
+Alternatively, RegexField can take a compiled regular expression:
+>>> f = RegexField(re.compile('^\d[A-F]\d$'))
+>>> f.clean('2A2')
+u'2A2'
+>>> f.clean('3F3')
+u'3F3'
+>>> f.clean('3G3')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+>>> f.clean(' 2A2')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+>>> f.clean('2A2 ')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+
+RegexField takes an optional error_message argument:
+>>> f = RegexField('^\d\d\d\d$', error_message='Enter a four-digit number.')
+>>> f.clean('1234')
+u'1234'
+>>> f.clean('123')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a four-digit number.']
+>>> f.clean('abcd')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a four-digit number.']
+
+RegexField also access min_length and max_length parameters, for convenience.
+>>> f = RegexField('^\d+$', min_length=5, max_length=10)
+>>> f.clean('123')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at least 5 characters.']
+>>> f.clean('abc')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at least 5 characters.']
+>>> f.clean('12345')
+u'12345'
+>>> f.clean('1234567890')
+u'1234567890'
+>>> f.clean('12345678901')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at most 10 characters.']
+>>> f.clean('12345a')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid value.']
+
+# EmailField ##################################################################
+
+>>> f = EmailField()
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('person at example.com')
+u'person at example.com'
+>>> f.clean('foo')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+>>> f.clean('foo@')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+>>> f.clean('foo at bar')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+
+>>> f = EmailField(required=False)
+>>> f.clean('')
+u''
+>>> f.clean(None)
+u''
+>>> f.clean('person at example.com')
+u'person at example.com'
+>>> f.clean('foo')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+>>> f.clean('foo@')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+>>> f.clean('foo at bar')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+
+EmailField also access min_length and max_length parameters, for convenience.
+>>> f = EmailField(min_length=10, max_length=15)
+>>> f.clean('a at foo.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at least 10 characters.']
+>>> f.clean('alf at foo.com')
+u'alf at foo.com'
+>>> f.clean('alf123456788 at foo.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at most 15 characters.']
+
+# URLField ##################################################################
+
+>>> f = URLField()
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('http://example.com')
+u'http://example.com'
+>>> f.clean('http://www.example.com')
+u'http://www.example.com'
+>>> f.clean('foo')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('example.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://example')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://example.')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+
+>>> f = URLField(required=False)
+>>> f.clean('')
+u''
+>>> f.clean(None)
+u''
+>>> f.clean('http://example.com')
+u'http://example.com'
+>>> f.clean('http://www.example.com')
+u'http://www.example.com'
+>>> f.clean('foo')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('example.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://example')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://example.')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+
+URLField takes an optional verify_exists parameter, which is False by default.
+This verifies that the URL is live on the Internet and doesn't return a 404 or 500:
+>>> f = URLField(verify_exists=True)
+>>> f.clean('http://www.google.com') # This will fail if there's no Internet connection
+u'http://www.google.com'
+>>> f.clean('http://example')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+>>> f.clean('http://www.jfoiwjfoi23jfoijoaijfoiwjofiwjefewl.com') # bad domain
+Traceback (most recent call last):
+...
+ValidationError: [u'This URL appears to be a broken link.']
+>>> f.clean('http://google.com/we-love-microsoft.html') # good domain, bad page
+Traceback (most recent call last):
+...
+ValidationError: [u'This URL appears to be a broken link.']
+>>> f = URLField(verify_exists=True, required=False)
+>>> f.clean('')
+u''
+>>> f.clean('http://www.google.com') # This will fail if there's no Internet connection
+u'http://www.google.com'
+
+EmailField also access min_length and max_length parameters, for convenience.
+>>> f = URLField(min_length=15, max_length=20)
+>>> f.clean('http://f.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at least 15 characters.']
+>>> f.clean('http://example.com')
+u'http://example.com'
+>>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at most 20 characters.']
+
+# BooleanField ################################################################
+
+>>> f = BooleanField()
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(True)
+True
+>>> f.clean(False)
+False
+>>> f.clean(1)
+True
+>>> f.clean(0)
+False
+>>> f.clean('Django rocks')
+True
+
+>>> f = BooleanField(required=False)
+>>> f.clean('')
+False
+>>> f.clean(None)
+False
+>>> f.clean(True)
+True
+>>> f.clean(False)
+False
+>>> f.clean(1)
+True
+>>> f.clean(0)
+False
+>>> f.clean('Django rocks')
+True
+
+# ChoiceField #################################################################
+
+>>> f = ChoiceField(choices=[('1', '1'), ('2', '2')])
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(1)
+u'1'
+>>> f.clean('1')
+u'1'
+>>> f.clean('3')
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
+
+>>> f = ChoiceField(choices=[('1', '1'), ('2', '2')], required=False)
+>>> f.clean('')
+u''
+>>> f.clean(None)
+u''
+>>> f.clean(1)
+u'1'
+>>> f.clean('1')
+u'1'
+>>> f.clean('3')
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
+
+>>> f = ChoiceField(choices=[('J', 'John'), ('P', 'Paul')])
+>>> f.clean('J')
+u'J'
+>>> f.clean('John')
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. That choice is not one of the available choices.']
+
+# NullBooleanField ############################################################
+
+>>> f = NullBooleanField()
+>>> f.clean('')
+>>> f.clean(True)
+True
+>>> f.clean(False)
+False
+>>> f.clean(None)
+>>> f.clean('1')
+>>> f.clean('2')
+>>> f.clean('3')
+>>> f.clean('hello')
+
+# MultipleChoiceField #########################################################
+
+>>> f = MultipleChoiceField(choices=[('1', '1'), ('2', '2')])
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean([1])
+[u'1']
+>>> f.clean(['1'])
+[u'1']
+>>> f.clean(['1', '2'])
+[u'1', u'2']
+>>> f.clean([1, '2'])
+[u'1', u'2']
+>>> f.clean((1, '2'))
+[u'1', u'2']
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a list of values.']
+>>> f.clean([])
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(())
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(['3'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 3 is not one of the available choices.']
+
+>>> f = MultipleChoiceField(choices=[('1', '1'), ('2', '2')], required=False)
+>>> f.clean('')
+[]
+>>> f.clean(None)
+[]
+>>> f.clean([1])
+[u'1']
+>>> f.clean(['1'])
+[u'1']
+>>> f.clean(['1', '2'])
+[u'1', u'2']
+>>> f.clean([1, '2'])
+[u'1', u'2']
+>>> f.clean((1, '2'))
+[u'1', u'2']
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a list of values.']
+>>> f.clean([])
+[]
+>>> f.clean(())
+[]
+>>> f.clean(['3'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 3 is not one of the available choices.']
+
+# ComboField ##################################################################
+
+ComboField takes a list of fields that should be used to validate a value,
+in that order.
+>>> f = ComboField(fields=[CharField(max_length=20), EmailField()])
+>>> f.clean('test at example.com')
+u'test at example.com'
+>>> f.clean('longemailaddress at example.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at most 20 characters.']
+>>> f.clean('not an e-mail')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = ComboField(fields=[CharField(max_length=20), EmailField()], required=False)
+>>> f.clean('test at example.com')
+u'test at example.com'
+>>> f.clean('longemailaddress at example.com')
+Traceback (most recent call last):
+...
+ValidationError: [u'Ensure this value has at most 20 characters.']
+>>> f.clean('not an e-mail')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+>>> f.clean('')
+u''
+>>> f.clean(None)
+u''
+
+# SplitDateTimeField ##########################################################
+
+>>> f = SplitDateTimeField()
+>>> f.clean([datetime.date(2006, 1, 10), datetime.time(7, 30)])
+datetime.datetime(2006, 1, 10, 7, 30)
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a list of values.']
+>>> f.clean(['hello', 'there'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.', u'Enter a valid time.']
+>>> f.clean(['2006-01-10', 'there'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid time.']
+>>> f.clean(['hello', '07:30'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+
+>>> f = SplitDateTimeField(required=False)
+>>> f.clean([datetime.date(2006, 1, 10), datetime.time(7, 30)])
+datetime.datetime(2006, 1, 10, 7, 30)
+>>> f.clean(None)
+>>> f.clean('')
+>>> f.clean('hello')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a list of values.']
+>>> f.clean(['hello', 'there'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.', u'Enter a valid time.']
+>>> f.clean(['2006-01-10', 'there'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid time.']
+>>> f.clean(['hello', '07:30'])
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid date.']
+
+#########
+# Forms #
+#########
+
+A Form is a collection of Fields. It knows how to validate a set of data and it
+knows how to render itself in a couple of default ways (e.g., an HTML table).
+You can pass it data in __init__(), as a dictionary.
+
+# Form ########################################################################
+
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     birthday = DateField()
+
+Pass a dictionary to a Form's __init__().
+>>> p = Person({'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9'})
+>>> p.is_bound
+True
+>>> p.errors
+{}
+>>> p.is_valid()
+True
+>>> p.errors.as_ul()
+u''
+>>> p.errors.as_text()
+u''
+>>> p.clean_data
+{'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)}
+>>> print p['first_name']
+<input type="text" name="first_name" value="John" id="id_first_name" />
+>>> print p['last_name']
+<input type="text" name="last_name" value="Lennon" id="id_last_name" />
+>>> print p['birthday']
+<input type="text" name="birthday" value="1940-10-9" id="id_birthday" />
+>>> print p['nonexistentfield']
+Traceback (most recent call last):
+...
+KeyError: "Key 'nonexistentfield' not found in Form"
+
+>>> for boundfield in p:
+...     print boundfield
+<input type="text" name="first_name" value="John" id="id_first_name" />
+<input type="text" name="last_name" value="Lennon" id="id_last_name" />
+<input type="text" name="birthday" value="1940-10-9" id="id_birthday" />
+>>> for boundfield in p:
+...     print boundfield.label, boundfield.data
+First name John
+Last name Lennon
+Birthday 1940-10-9
+>>> print p
+<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>
+<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="Lennon" id="id_last_name" /></td></tr>
+<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></td></tr>
+
+Empty dictionaries are valid, too.
+>>> p = Person({})
+>>> p.is_bound
+True
+>>> p.errors
+{'first_name': [u'This field is required.'], 'last_name': [u'This field is required.'], 'birthday': [u'This field is required.']}
+>>> p.is_valid()
+False
+>>> p.clean_data
+Traceback (most recent call last):
+...
+AttributeError: 'Person' object has no attribute 'clean_data'
+>>> print p
+<tr><th><label for="id_first_name">First name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="first_name" id="id_first_name" /></td></tr>
+<tr><th><label for="id_last_name">Last name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="last_name" id="id_last_name" /></td></tr>
+<tr><th><label for="id_birthday">Birthday:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="birthday" id="id_birthday" /></td></tr>
+>>> print p.as_table()
+<tr><th><label for="id_first_name">First name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="first_name" id="id_first_name" /></td></tr>
+<tr><th><label for="id_last_name">Last name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="last_name" id="id_last_name" /></td></tr>
+<tr><th><label for="id_birthday">Birthday:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="birthday" id="id_birthday" /></td></tr>
+>>> print p.as_ul()
+<li><ul class="errorlist"><li>This field is required.</li></ul><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></li>
+>>> print p.as_p()
+<p><ul class="errorlist"><li>This field is required.</li></ul></p>
+<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></p>
+<p><ul class="errorlist"><li>This field is required.</li></ul></p>
+<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></p>
+<p><ul class="errorlist"><li>This field is required.</li></ul></p>
+<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></p>
+
+If you don't pass any values to the Form's __init__(), or if you pass None,
+the Form will be considered unbound and won't do any validation. Form.errors
+will be an empty dictionary *but* Form.is_valid() will return False.
+>>> p = Person()
+>>> p.is_bound
+False
+>>> p.errors
+{}
+>>> p.is_valid()
+False
+>>> p.clean_data
+Traceback (most recent call last):
+...
+AttributeError: 'Person' object has no attribute 'clean_data'
+>>> print p
+<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
+<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
+<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" id="id_birthday" /></td></tr>
+>>> print p.as_table()
+<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
+<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
+<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" id="id_birthday" /></td></tr>
+>>> print p.as_ul()
+<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></li>
+<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></li>
+<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></li>
+>>> print p.as_p()
+<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></p>
+<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></p>
+<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /></p>
+
+Unicode values are handled properly.
+>>> p = Person({'first_name': u'John', 'last_name': u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111', 'birthday': '1940-10-9'})
+>>> p.as_table()
+u'<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>\n<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></td></tr>\n<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></td></tr>'
+>>> p.as_ul()
+u'<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></li>\n<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></li>\n<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></li>'
+>>> p.as_p()
+u'<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></p>\n<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></p>\n<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></p>'
+
+>>> p = Person({'last_name': u'Lennon'})
+>>> p.errors
+{'first_name': [u'This field is required.'], 'birthday': [u'This field is required.']}
+>>> p.is_valid()
+False
+>>> p.errors.as_ul()
+u'<ul class="errorlist"><li>first_name<ul class="errorlist"><li>This field is required.</li></ul></li><li>birthday<ul class="errorlist"><li>This field is required.</li></ul></li></ul>'
+>>> print p.errors.as_text()
+* first_name
+  * This field is required.
+* birthday
+  * This field is required.
+>>> p.clean_data
+Traceback (most recent call last):
+...
+AttributeError: 'Person' object has no attribute 'clean_data'
+>>> p['first_name'].errors
+[u'This field is required.']
+>>> p['first_name'].errors.as_ul()
+u'<ul class="errorlist"><li>This field is required.</li></ul>'
+>>> p['first_name'].errors.as_text()
+u'* This field is required.'
+
+>>> p = Person()
+>>> print p['first_name']
+<input type="text" name="first_name" id="id_first_name" />
+>>> print p['last_name']
+<input type="text" name="last_name" id="id_last_name" />
+>>> print p['birthday']
+<input type="text" name="birthday" id="id_birthday" />
+
+clean_data will always *only* contain a key for fields defined in the
+Form, even if you pass extra data when you define the Form. In this
+example, we pass a bunch of extra fields to the form constructor,
+but clean_data contains only the form's fields.
+>>> data = {'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9', 'extra1': 'hello', 'extra2': 'hello'}
+>>> p = Person(data)
+>>> p.is_valid()
+True
+>>> p.clean_data
+{'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)}
+
+"auto_id" tells the Form to add an "id" attribute to each form element.
+If it's a string that contains '%s', Django will use that as a format string
+into which the field's name will be inserted. It will also put a <label> around
+the human-readable labels for a field.
+>>> p = Person(auto_id='%s_id')
+>>> print p.as_table()
+<tr><th><label for="first_name_id">First name:</label></th><td><input type="text" name="first_name" id="first_name_id" /></td></tr>
+<tr><th><label for="last_name_id">Last name:</label></th><td><input type="text" name="last_name" id="last_name_id" /></td></tr>
+<tr><th><label for="birthday_id">Birthday:</label></th><td><input type="text" name="birthday" id="birthday_id" /></td></tr>
+>>> print p.as_ul()
+<li><label for="first_name_id">First name:</label> <input type="text" name="first_name" id="first_name_id" /></li>
+<li><label for="last_name_id">Last name:</label> <input type="text" name="last_name" id="last_name_id" /></li>
+<li><label for="birthday_id">Birthday:</label> <input type="text" name="birthday" id="birthday_id" /></li>
+>>> print p.as_p()
+<p><label for="first_name_id">First name:</label> <input type="text" name="first_name" id="first_name_id" /></p>
+<p><label for="last_name_id">Last name:</label> <input type="text" name="last_name" id="last_name_id" /></p>
+<p><label for="birthday_id">Birthday:</label> <input type="text" name="birthday" id="birthday_id" /></p>
+
+If auto_id is any True value whose str() does not contain '%s', the "id"
+attribute will be the name of the field.
+>>> p = Person(auto_id=True)
+>>> print p.as_ul()
+<li><label for="first_name">First name:</label> <input type="text" name="first_name" id="first_name" /></li>
+<li><label for="last_name">Last name:</label> <input type="text" name="last_name" id="last_name" /></li>
+<li><label for="birthday">Birthday:</label> <input type="text" name="birthday" id="birthday" /></li>
+
+If auto_id is any False value, an "id" attribute won't be output unless it
+was manually entered.
+>>> p = Person(auto_id=False)
+>>> print p.as_ul()
+<li>First name: <input type="text" name="first_name" /></li>
+<li>Last name: <input type="text" name="last_name" /></li>
+<li>Birthday: <input type="text" name="birthday" /></li>
+
+In this example, auto_id is False, but the "id" attribute for the "first_name"
+field is given. Also note that field gets a <label>, while the others don't.
+>>> class PersonNew(Form):
+...     first_name = CharField(widget=TextInput(attrs={'id': 'first_name_id'}))
+...     last_name = CharField()
+...     birthday = DateField()
+>>> p = PersonNew(auto_id=False)
+>>> print p.as_ul()
+<li><label for="first_name_id">First name:</label> <input type="text" id="first_name_id" name="first_name" /></li>
+<li>Last name: <input type="text" name="last_name" /></li>
+<li>Birthday: <input type="text" name="birthday" /></li>
+
+If the "id" attribute is specified in the Form and auto_id is True, the "id"
+attribute in the Form gets precedence.
+>>> p = PersonNew(auto_id=True)
+>>> print p.as_ul()
+<li><label for="first_name_id">First name:</label> <input type="text" id="first_name_id" name="first_name" /></li>
+<li><label for="last_name">Last name:</label> <input type="text" name="last_name" id="last_name" /></li>
+<li><label for="birthday">Birthday:</label> <input type="text" name="birthday" id="birthday" /></li>
+
+>>> class SignupForm(Form):
+...     email = EmailField()
+...     get_spam = BooleanField()
+>>> f = SignupForm(auto_id=False)
+>>> print f['email']
+<input type="text" name="email" />
+>>> print f['get_spam']
+<input type="checkbox" name="get_spam" />
+
+>>> f = SignupForm({'email': 'test at example.com', 'get_spam': True}, auto_id=False)
+>>> print f['email']
+<input type="text" name="email" value="test at example.com" />
+>>> print f['get_spam']
+<input checked="checked" type="checkbox" name="get_spam" />
+
+Any Field can have a Widget class passed to its constructor:
+>>> class ContactForm(Form):
+...     subject = CharField()
+...     message = CharField(widget=Textarea)
+>>> f = ContactForm(auto_id=False)
+>>> print f['subject']
+<input type="text" name="subject" />
+>>> print f['message']
+<textarea name="message"></textarea>
+
+as_textarea(), as_text() and as_hidden() are shortcuts for changing the output
+widget type:
+>>> f['subject'].as_textarea()
+u'<textarea name="subject"></textarea>'
+>>> f['message'].as_text()
+u'<input type="text" name="message" />'
+>>> f['message'].as_hidden()
+u'<input type="hidden" name="message" />'
+
+The 'widget' parameter to a Field can also be an instance:
+>>> class ContactForm(Form):
+...     subject = CharField()
+...     message = CharField(widget=Textarea(attrs={'rows': 80, 'cols': 20}))
+>>> f = ContactForm(auto_id=False)
+>>> print f['message']
+<textarea rows="80" cols="20" name="message"></textarea>
+
+Instance-level attrs are *not* carried over to as_textarea(), as_text() and
+as_hidden():
+>>> f['message'].as_text()
+u'<input type="text" name="message" />'
+>>> f = ContactForm({'subject': 'Hello', 'message': 'I love you.'}, auto_id=False)
+>>> f['subject'].as_textarea()
+u'<textarea name="subject">Hello</textarea>'
+>>> f['message'].as_text()
+u'<input type="text" name="message" value="I love you." />'
+>>> f['message'].as_hidden()
+u'<input type="hidden" name="message" value="I love you." />'
+
+For a form with a <select>, use ChoiceField:
+>>> class FrameworkForm(Form):
+...     name = CharField()
+...     language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')])
+>>> f = FrameworkForm(auto_id=False)
+>>> print f['language']
+<select name="language">
+<option value="P">Python</option>
+<option value="J">Java</option>
+</select>
+>>> f = FrameworkForm({'name': 'Django', 'language': 'P'}, auto_id=False)
+>>> print f['language']
+<select name="language">
+<option value="P" selected="selected">Python</option>
+<option value="J">Java</option>
+</select>
+
+A subtlety: If one of the choices' value is the empty string and the form is
+unbound, then the <option> for the empty-string choice will get selected="selected".
+>>> class FrameworkForm(Form):
+...     name = CharField()
+...     language = ChoiceField(choices=[('', '------'), ('P', 'Python'), ('J', 'Java')])
+>>> f = FrameworkForm(auto_id=False)
+>>> print f['language']
+<select name="language">
+<option value="" selected="selected">------</option>
+<option value="P">Python</option>
+<option value="J">Java</option>
+</select>
+
+You can specify widget attributes in the Widget constructor.
+>>> class FrameworkForm(Form):
+...     name = CharField()
+...     language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')], widget=Select(attrs={'class': 'foo'}))
+>>> f = FrameworkForm(auto_id=False)
+>>> print f['language']
+<select class="foo" name="language">
+<option value="P">Python</option>
+<option value="J">Java</option>
+</select>
+>>> f = FrameworkForm({'name': 'Django', 'language': 'P'}, auto_id=False)
+>>> print f['language']
+<select class="foo" name="language">
+<option value="P" selected="selected">Python</option>
+<option value="J">Java</option>
+</select>
+
+When passing a custom widget instance to ChoiceField, note that setting
+'choices' on the widget is meaningless. The widget will use the choices
+defined on the Field, not the ones defined on the Widget.
+>>> class FrameworkForm(Form):
+...     name = CharField()
+...     language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')], widget=Select(choices=[('R', 'Ruby'), ('P', 'Perl')], attrs={'class': 'foo'}))
+>>> f = FrameworkForm(auto_id=False)
+>>> print f['language']
+<select class="foo" name="language">
+<option value="P">Python</option>
+<option value="J">Java</option>
+</select>
+>>> f = FrameworkForm({'name': 'Django', 'language': 'P'}, auto_id=False)
+>>> print f['language']
+<select class="foo" name="language">
+<option value="P" selected="selected">Python</option>
+<option value="J">Java</option>
+</select>
+
+You can set a ChoiceField's choices after the fact.
+>>> class FrameworkForm(Form):
+...     name = CharField()
+...     language = ChoiceField()
+>>> f = FrameworkForm(auto_id=False)
+>>> print f['language']
+<select name="language">
+</select>
+>>> f.fields['language'].choices = [('P', 'Python'), ('J', 'Java')]
+>>> print f['language']
+<select name="language">
+<option value="P">Python</option>
+<option value="J">Java</option>
+</select>
+
+Add widget=RadioSelect to use that widget with a ChoiceField.
+>>> class FrameworkForm(Form):
+...     name = CharField()
+...     language = ChoiceField(choices=[('P', 'Python'), ('J', 'Java')], widget=RadioSelect)
+>>> f = FrameworkForm(auto_id=False)
+>>> print f['language']
+<ul>
+<li><label><input type="radio" name="language" value="P" /> Python</label></li>
+<li><label><input type="radio" name="language" value="J" /> Java</label></li>
+</ul>
+>>> print f
+<tr><th>Name:</th><td><input type="text" name="name" /></td></tr>
+<tr><th>Language:</th><td><ul>
+<li><label><input type="radio" name="language" value="P" /> Python</label></li>
+<li><label><input type="radio" name="language" value="J" /> Java</label></li>
+</ul></td></tr>
+>>> print f.as_ul()
+<li>Name: <input type="text" name="name" /></li>
+<li>Language: <ul>
+<li><label><input type="radio" name="language" value="P" /> Python</label></li>
+<li><label><input type="radio" name="language" value="J" /> Java</label></li>
+</ul></li>
+
+Regarding auto_id and <label>, RadioSelect is a special case. Each radio button
+gets a distinct ID, formed by appending an underscore plus the button's
+zero-based index.
+>>> f = FrameworkForm(auto_id='id_%s')
+>>> print f['language']
+<ul>
+<li><label><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
+<li><label><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
+</ul>
+
+When RadioSelect is used with auto_id, and the whole form is printed using
+either as_table() or as_ul(), the label for the RadioSelect will point to the
+ID of the *first* radio button.
+>>> print f
+<tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" id="id_name" /></td></tr>
+<tr><th><label for="id_language_0">Language:</label></th><td><ul>
+<li><label><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
+<li><label><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
+</ul></td></tr>
+>>> print f.as_ul()
+<li><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" /></li>
+<li><label for="id_language_0">Language:</label> <ul>
+<li><label><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
+<li><label><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
+</ul></li>
+>>> print f.as_p()
+<p><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" /></p>
+<p><label for="id_language_0">Language:</label> <ul>
+<li><label><input type="radio" id="id_language_0" value="P" name="language" /> Python</label></li>
+<li><label><input type="radio" id="id_language_1" value="J" name="language" /> Java</label></li>
+</ul></p>
+
+MultipleChoiceField is a special case, as its data is required to be a list:
+>>> class SongForm(Form):
+...     name = CharField()
+...     composers = MultipleChoiceField()
+>>> f = SongForm(auto_id=False)
+>>> print f['composers']
+<select multiple="multiple" name="composers">
+</select>
+>>> class SongForm(Form):
+...     name = CharField()
+...     composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')])
+>>> f = SongForm(auto_id=False)
+>>> print f['composers']
+<select multiple="multiple" name="composers">
+<option value="J">John Lennon</option>
+<option value="P">Paul McCartney</option>
+</select>
+>>> f = SongForm({'name': 'Yesterday', 'composers': ['P']}, auto_id=False)
+>>> print f['name']
+<input type="text" name="name" value="Yesterday" />
+>>> print f['composers']
+<select multiple="multiple" name="composers">
+<option value="J">John Lennon</option>
+<option value="P" selected="selected">Paul McCartney</option>
+</select>
+
+MultipleChoiceField rendered as_hidden() is a special case. Because it can
+have multiple values, its as_hidden() renders multiple <input type="hidden">
+tags.
+>>> f = SongForm({'name': 'Yesterday', 'composers': ['P']}, auto_id=False)
+>>> print f['composers'].as_hidden()
+<input type="hidden" name="composers" value="P" />
+>>> f = SongForm({'name': 'From Me To You', 'composers': ['P', 'J']}, auto_id=False)
+>>> print f['composers'].as_hidden()
+<input type="hidden" name="composers" value="P" />
+<input type="hidden" name="composers" value="J" />
+
+MultipleChoiceField can also be used with the CheckboxSelectMultiple widget.
+>>> class SongForm(Form):
+...     name = CharField()
+...     composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=CheckboxSelectMultiple)
+>>> f = SongForm(auto_id=False)
+>>> print f['composers']
+<ul>
+<li><label><input type="checkbox" name="composers" value="J" /> John Lennon</label></li>
+<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
+</ul>
+>>> f = SongForm({'composers': ['J']}, auto_id=False)
+>>> print f['composers']
+<ul>
+<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li>
+<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
+</ul>
+>>> f = SongForm({'composers': ['J', 'P']}, auto_id=False)
+>>> print f['composers']
+<ul>
+<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li>
+<li><label><input checked="checked" type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
+</ul>
+
+Regarding auto_id, CheckboxSelectMultiple is a special case. Each checkbox
+gets a distinct ID, formed by appending an underscore plus the checkbox's
+zero-based index.
+>>> f = SongForm(auto_id='%s_id')
+>>> print f['composers']
+<ul>
+<li><label><input type="checkbox" name="composers" value="J" id="composers_id_0" /> John Lennon</label></li>
+<li><label><input type="checkbox" name="composers" value="P" id="composers_id_1" /> Paul McCartney</label></li>
+</ul>
+
+Data for a MultipleChoiceField should be a list. QueryDict and MultiValueDict
+conveniently work with this.
+>>> data = {'name': 'Yesterday', 'composers': ['J', 'P']}
+>>> f = SongForm(data)
+>>> f.errors
+{}
+>>> from django.http import QueryDict
+>>> data = QueryDict('name=Yesterday&composers=J&composers=P')
+>>> f = SongForm(data)
+>>> f.errors
+{}
+>>> from django.utils.datastructures import MultiValueDict
+>>> data = MultiValueDict(dict(name=['Yesterday'], composers=['J', 'P']))
+>>> f = SongForm(data)
+>>> f.errors
+{}
+
+The MultipleHiddenInput widget renders multiple values as hidden fields.
+>>> class SongFormHidden(Form):
+...     name = CharField()
+...     composers = MultipleChoiceField(choices=[('J', 'John Lennon'), ('P', 'Paul McCartney')], widget=MultipleHiddenInput)
+>>> f = SongFormHidden(MultiValueDict(dict(name=['Yesterday'], composers=['J', 'P'])), auto_id=False)
+>>> print f.as_ul()
+<li>Name: <input type="text" name="name" value="Yesterday" /><input type="hidden" name="composers" value="J" />
+<input type="hidden" name="composers" value="P" /></li>
+
+When using CheckboxSelectMultiple, the framework expects a list of input and
+returns a list of input.
+>>> f = SongForm({'name': 'Yesterday'}, auto_id=False)
+>>> f.errors
+{'composers': [u'This field is required.']}
+>>> f = SongForm({'name': 'Yesterday', 'composers': ['J']}, auto_id=False)
+>>> f.errors
+{}
+>>> f.clean_data
+{'composers': [u'J'], 'name': u'Yesterday'}
+>>> f = SongForm({'name': 'Yesterday', 'composers': ['J', 'P']}, auto_id=False)
+>>> f.errors
+{}
+>>> f.clean_data
+{'composers': [u'J', u'P'], 'name': u'Yesterday'}
+
+Validation errors are HTML-escaped when output as HTML.
+>>> class EscapingForm(Form):
+...     special_name = CharField()
+...     def clean_special_name(self):
+...         raise ValidationError("Something's wrong with '%s'" % self.clean_data['special_name'])
+
+>>> f = EscapingForm({'special_name': "Nothing to escape"}, auto_id=False)
+>>> print f
+<tr><th>Special name:</th><td><ul class="errorlist"><li>Something&#39;s wrong with &#39;Nothing to escape&#39;</li></ul><input type="text" name="special_name" value="Nothing to escape" /></td></tr>
+>>> f = EscapingForm({'special_name': "Should escape < & > and <script>alert('xss')</script>"}, auto_id=False)
+>>> print f
+<tr><th>Special name:</th><td><ul class="errorlist"><li>Something&#39;s wrong with &#39;Should escape &lt; &amp; &gt; and &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;&#39;</li></ul><input type="text" name="special_name" value="Should escape &lt; &amp; &gt; and &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;" /></td></tr>
+
+# Validating multiple fields in relation to another ###########################
+
+There are a couple of ways to do multiple-field validation. If you want the
+validation message to be associated with a particular field, implement the
+clean_XXX() method on the Form, where XXX is the field name. As in
+Field.clean(), the clean_XXX() method should return the cleaned value. In the
+clean_XXX() method, you have access to self.clean_data, which is a dictionary
+of all the data that has been cleaned *so far*, in order by the fields,
+including the current field (e.g., the field XXX if you're in clean_XXX()).
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10)
+...    password1 = CharField(widget=PasswordInput)
+...    password2 = CharField(widget=PasswordInput)
+...    def clean_password2(self):
+...        if self.clean_data.get('password1') and self.clean_data.get('password2') and self.clean_data['password1'] != self.clean_data['password2']:
+...            raise ValidationError(u'Please make sure your passwords match.')
+...        return self.clean_data['password2']
+>>> f = UserRegistration(auto_id=False)
+>>> f.errors
+{}
+>>> f = UserRegistration({}, auto_id=False)
+>>> f.errors
+{'username': [u'This field is required.'], 'password1': [u'This field is required.'], 'password2': [u'This field is required.']}
+>>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)
+>>> f.errors
+{'password2': [u'Please make sure your passwords match.']}
+>>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False)
+>>> f.errors
+{}
+>>> f.clean_data
+{'username': u'adrian', 'password1': u'foo', 'password2': u'foo'}
+
+Another way of doing multiple-field validation is by implementing the
+Form's clean() method. If you do this, any ValidationError raised by that
+method will not be associated with a particular field; it will have a
+special-case association with the field named '__all__'.
+Note that in Form.clean(), you have access to self.clean_data, a dictionary of
+all the fields/values that have *not* raised a ValidationError. Also note
+Form.clean() is required to return a dictionary of all clean data.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10)
+...    password1 = CharField(widget=PasswordInput)
+...    password2 = CharField(widget=PasswordInput)
+...    def clean(self):
+...        if self.clean_data.get('password1') and self.clean_data.get('password2') and self.clean_data['password1'] != self.clean_data['password2']:
+...            raise ValidationError(u'Please make sure your passwords match.')
+...        return self.clean_data
+>>> f = UserRegistration(auto_id=False)
+>>> f.errors
+{}
+>>> f = UserRegistration({}, auto_id=False)
+>>> print f.as_table()
+<tr><th>Username:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="username" maxlength="10" /></td></tr>
+<tr><th>Password1:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password1" /></td></tr>
+<tr><th>Password2:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password2" /></td></tr>
+>>> f.errors
+{'username': [u'This field is required.'], 'password1': [u'This field is required.'], 'password2': [u'This field is required.']}
+>>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)
+>>> f.errors
+{'__all__': [u'Please make sure your passwords match.']}
+>>> print f.as_table()
+<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
+<tr><th>Username:</th><td><input type="text" name="username" value="adrian" maxlength="10" /></td></tr>
+<tr><th>Password1:</th><td><input type="password" name="password1" value="foo" /></td></tr>
+<tr><th>Password2:</th><td><input type="password" name="password2" value="bar" /></td></tr>
+>>> print f.as_ul()
+<li><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></li>
+<li>Username: <input type="text" name="username" value="adrian" maxlength="10" /></li>
+<li>Password1: <input type="password" name="password1" value="foo" /></li>
+<li>Password2: <input type="password" name="password2" value="bar" /></li>
+>>> f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False)
+>>> f.errors
+{}
+>>> f.clean_data
+{'username': u'adrian', 'password1': u'foo', 'password2': u'foo'}
+
+# Dynamic construction ########################################################
+
+It's possible to construct a Form dynamically by adding to the self.fields
+dictionary in __init__(). Don't forget to call Form.__init__() within the
+subclass' __init__().
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     def __init__(self, *args, **kwargs):
+...         super(Person, self).__init__(*args, **kwargs)
+...         self.fields['birthday'] = DateField()
+>>> p = Person(auto_id=False)
+>>> print p
+<tr><th>First name:</th><td><input type="text" name="first_name" /></td></tr>
+<tr><th>Last name:</th><td><input type="text" name="last_name" /></td></tr>
+<tr><th>Birthday:</th><td><input type="text" name="birthday" /></td></tr>
+
+Instances of a dynamic Form do not persist fields from one Form instance to
+the next.
+>>> class MyForm(Form):
+...     def __init__(self, data=None, auto_id=False, field_list=[]):
+...         Form.__init__(self, data, auto_id)
+...         for field in field_list:
+...             self.fields[field[0]] = field[1]
+>>> field_list = [('field1', CharField()), ('field2', CharField())]
+>>> my_form = MyForm(field_list=field_list)
+>>> print my_form
+<tr><th>Field1:</th><td><input type="text" name="field1" /></td></tr>
+<tr><th>Field2:</th><td><input type="text" name="field2" /></td></tr>
+>>> field_list = [('field3', CharField()), ('field4', CharField())]
+>>> my_form = MyForm(field_list=field_list)
+>>> print my_form
+<tr><th>Field3:</th><td><input type="text" name="field3" /></td></tr>
+<tr><th>Field4:</th><td><input type="text" name="field4" /></td></tr>
+
+>>> class MyForm(Form):
+...     default_field_1 = CharField()
+...     default_field_2 = CharField()
+...     def __init__(self, data=None, auto_id=False, field_list=[]):
+...         Form.__init__(self, data, auto_id)
+...         for field in field_list:
+...             self.fields[field[0]] = field[1]
+>>> field_list = [('field1', CharField()), ('field2', CharField())]
+>>> my_form = MyForm(field_list=field_list)
+>>> print my_form
+<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" /></td></tr>
+<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" /></td></tr>
+<tr><th>Field1:</th><td><input type="text" name="field1" /></td></tr>
+<tr><th>Field2:</th><td><input type="text" name="field2" /></td></tr>
+>>> field_list = [('field3', CharField()), ('field4', CharField())]
+>>> my_form = MyForm(field_list=field_list)
+>>> print my_form
+<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" /></td></tr>
+<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" /></td></tr>
+<tr><th>Field3:</th><td><input type="text" name="field3" /></td></tr>
+<tr><th>Field4:</th><td><input type="text" name="field4" /></td></tr>
+
+Similarly, changes to field attributes do not persist from one Form instance
+to the next.
+>>> class Person(Form):
+...     first_name = CharField(required=False)
+...     last_name = CharField(required=False)
+...     def __init__(self, names_required=False, *args, **kwargs):
+...         super(Person, self).__init__(*args, **kwargs)
+...         if names_required:
+...             self.fields['first_name'].required = True
+...             self.fields['last_name'].required = True
+>>> f = Person(names_required=False)
+>>> f['first_name'].field.required, f['last_name'].field.required
+(False, False)
+>>> f = Person(names_required=True)
+>>> f['first_name'].field.required, f['last_name'].field.required
+(True, True)
+>>> f = Person(names_required=False)
+>>> f['first_name'].field.required, f['last_name'].field.required
+(False, False)
+>>> class Person(Form):
+...     first_name = CharField(max_length=30)
+...     last_name = CharField(max_length=30)
+...     def __init__(self, name_max_length=None, *args, **kwargs):
+...         super(Person, self).__init__(*args, **kwargs)
+...         if name_max_length:
+...             self.fields['first_name'].max_length = name_max_length
+...             self.fields['last_name'].max_length = name_max_length
+>>> f = Person(name_max_length=None)
+>>> f['first_name'].field.max_length, f['last_name'].field.max_length
+(30, 30)
+>>> f = Person(name_max_length=20)
+>>> f['first_name'].field.max_length, f['last_name'].field.max_length
+(20, 20)
+>>> f = Person(name_max_length=None)
+>>> f['first_name'].field.max_length, f['last_name'].field.max_length
+(30, 30)
+
+HiddenInput widgets are displayed differently in the as_table(), as_ul()
+and as_p() output of a Form -- their verbose names are not displayed, and a
+separate row is not displayed. They're displayed in the last row of the
+form, directly after that row's form element.
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     hidden_text = CharField(widget=HiddenInput)
+...     birthday = DateField()
+>>> p = Person(auto_id=False)
+>>> print p
+<tr><th>First name:</th><td><input type="text" name="first_name" /></td></tr>
+<tr><th>Last name:</th><td><input type="text" name="last_name" /></td></tr>
+<tr><th>Birthday:</th><td><input type="text" name="birthday" /><input type="hidden" name="hidden_text" /></td></tr>
+>>> print p.as_ul()
+<li>First name: <input type="text" name="first_name" /></li>
+<li>Last name: <input type="text" name="last_name" /></li>
+<li>Birthday: <input type="text" name="birthday" /><input type="hidden" name="hidden_text" /></li>
+>>> print p.as_p()
+<p>First name: <input type="text" name="first_name" /></p>
+<p>Last name: <input type="text" name="last_name" /></p>
+<p>Birthday: <input type="text" name="birthday" /><input type="hidden" name="hidden_text" /></p>
+
+With auto_id set, a HiddenInput still gets an ID, but it doesn't get a label.
+>>> p = Person(auto_id='id_%s')
+>>> print p
+<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" id="id_first_name" /></td></tr>
+<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" id="id_last_name" /></td></tr>
+<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" id="id_birthday" /><input type="hidden" name="hidden_text" id="id_hidden_text" /></td></tr>
+>>> print p.as_ul()
+<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></li>
+<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></li>
+<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /><input type="hidden" name="hidden_text" id="id_hidden_text" /></li>
+>>> print p.as_p()
+<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" id="id_first_name" /></p>
+<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" id="id_last_name" /></p>
+<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" id="id_birthday" /><input type="hidden" name="hidden_text" id="id_hidden_text" /></p>
+
+If a field with a HiddenInput has errors, the as_table() and as_ul() output
+will include the error message(s) with the text "(Hidden field [fieldname]) "
+prepended. This message is displayed at the top of the output, regardless of
+its field's order in the form.
+>>> p = Person({'first_name': 'John', 'last_name': 'Lennon', 'birthday': '1940-10-9'}, auto_id=False)
+>>> print p
+<tr><td colspan="2"><ul class="errorlist"><li>(Hidden field hidden_text) This field is required.</li></ul></td></tr>
+<tr><th>First name:</th><td><input type="text" name="first_name" value="John" /></td></tr>
+<tr><th>Last name:</th><td><input type="text" name="last_name" value="Lennon" /></td></tr>
+<tr><th>Birthday:</th><td><input type="text" name="birthday" value="1940-10-9" /><input type="hidden" name="hidden_text" /></td></tr>
+>>> print p.as_ul()
+<li><ul class="errorlist"><li>(Hidden field hidden_text) This field is required.</li></ul></li>
+<li>First name: <input type="text" name="first_name" value="John" /></li>
+<li>Last name: <input type="text" name="last_name" value="Lennon" /></li>
+<li>Birthday: <input type="text" name="birthday" value="1940-10-9" /><input type="hidden" name="hidden_text" /></li>
+>>> print p.as_p()
+<p><ul class="errorlist"><li>(Hidden field hidden_text) This field is required.</li></ul></p>
+<p>First name: <input type="text" name="first_name" value="John" /></p>
+<p>Last name: <input type="text" name="last_name" value="Lennon" /></p>
+<p>Birthday: <input type="text" name="birthday" value="1940-10-9" /><input type="hidden" name="hidden_text" /></p>
+
+A corner case: It's possible for a form to have only HiddenInputs.
+>>> class TestForm(Form):
+...     foo = CharField(widget=HiddenInput)
+...     bar = CharField(widget=HiddenInput)
+>>> p = TestForm(auto_id=False)
+>>> print p.as_table()
+<input type="hidden" name="foo" /><input type="hidden" name="bar" />
+>>> print p.as_ul()
+<input type="hidden" name="foo" /><input type="hidden" name="bar" />
+>>> print p.as_p()
+<input type="hidden" name="foo" /><input type="hidden" name="bar" />
+
+A Form's fields are displayed in the same order in which they were defined.
+>>> class TestForm(Form):
+...     field1 = CharField()
+...     field2 = CharField()
+...     field3 = CharField()
+...     field4 = CharField()
+...     field5 = CharField()
+...     field6 = CharField()
+...     field7 = CharField()
+...     field8 = CharField()
+...     field9 = CharField()
+...     field10 = CharField()
+...     field11 = CharField()
+...     field12 = CharField()
+...     field13 = CharField()
+...     field14 = CharField()
+>>> p = TestForm(auto_id=False)
+>>> print p
+<tr><th>Field1:</th><td><input type="text" name="field1" /></td></tr>
+<tr><th>Field2:</th><td><input type="text" name="field2" /></td></tr>
+<tr><th>Field3:</th><td><input type="text" name="field3" /></td></tr>
+<tr><th>Field4:</th><td><input type="text" name="field4" /></td></tr>
+<tr><th>Field5:</th><td><input type="text" name="field5" /></td></tr>
+<tr><th>Field6:</th><td><input type="text" name="field6" /></td></tr>
+<tr><th>Field7:</th><td><input type="text" name="field7" /></td></tr>
+<tr><th>Field8:</th><td><input type="text" name="field8" /></td></tr>
+<tr><th>Field9:</th><td><input type="text" name="field9" /></td></tr>
+<tr><th>Field10:</th><td><input type="text" name="field10" /></td></tr>
+<tr><th>Field11:</th><td><input type="text" name="field11" /></td></tr>
+<tr><th>Field12:</th><td><input type="text" name="field12" /></td></tr>
+<tr><th>Field13:</th><td><input type="text" name="field13" /></td></tr>
+<tr><th>Field14:</th><td><input type="text" name="field14" /></td></tr>
+
+Some Field classes have an effect on the HTML attributes of their associated
+Widget. If you set max_length in a CharField and its associated widget is
+either a TextInput or PasswordInput, then the widget's rendered HTML will
+include the "maxlength" attribute.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10)                   # uses TextInput by default
+...    password = CharField(max_length=10, widget=PasswordInput)
+...    realname = CharField(max_length=10, widget=TextInput) # redundantly define widget, just to test
+...    address = CharField()                                 # no max_length defined here
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" maxlength="10" /></li>
+<li>Realname: <input type="text" name="realname" maxlength="10" /></li>
+<li>Address: <input type="text" name="address" /></li>
+
+If you specify a custom "attrs" that includes the "maxlength" attribute,
+the Field's max_length attribute will override whatever "maxlength" you specify
+in "attrs".
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, widget=TextInput(attrs={'maxlength': 20}))
+...    password = CharField(max_length=10, widget=PasswordInput)
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" maxlength="10" /></li>
+
+# Specifying labels ###########################################################
+
+You can specify the label for a field by using the 'label' argument to a Field
+class. If you don't specify 'label', Django will use the field name with
+underscores converted to spaces, and the initial letter capitalized.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, label='Your username')
+...    password1 = CharField(widget=PasswordInput)
+...    password2 = CharField(widget=PasswordInput, label='Password (again)')
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Your username: <input type="text" name="username" maxlength="10" /></li>
+<li>Password1: <input type="password" name="password1" /></li>
+<li>Password (again): <input type="password" name="password2" /></li>
+
+A label can be a Unicode object or a bytestring with special characters.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, label='ŠĐĆŽćžšđ')
+...    password = CharField(widget=PasswordInput, label=u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
+>>> p = UserRegistration(auto_id=False)
+>>> p.as_ul()
+u'<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="text" name="username" maxlength="10" /></li>\n<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="password" name="password" /></li>'
+
+If a label is set to the empty string for a field, that field won't get a label.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, label='')
+...    password = CharField(widget=PasswordInput)
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li> <input type="text" name="username" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration(auto_id='id_%s')
+>>> print p.as_ul()
+<li> <input id="id_username" type="text" name="username" maxlength="10" /></li>
+<li><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></li>
+
+If label is None, Django will auto-create the label from the field name. This
+is default behavior.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, label=None)
+...    password = CharField(widget=PasswordInput)
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration(auto_id='id_%s')
+>>> print p.as_ul()
+<li><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="10" /></li>
+<li><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></li>
+
+# Initial data ################################################################
+
+You can specify initial data for a field by using the 'initial' argument to a
+Field class. This initial data is displayed when a Form is rendered with *no*
+data. It is not displayed when a Form is rendered with any data (including an
+empty dictionary). Also, the initial value is *not* used if data for a
+particular required field isn't provided.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, initial='django')
+...    password = CharField(widget=PasswordInput)
+
+Here, we're not submitting any data, so the initial value will be displayed.
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="django" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" /></li>
+
+Here, we're submitting data, so the initial value will *not* be displayed.
+>>> p = UserRegistration({}, auto_id=False)
+>>> print p.as_ul()
+<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration({'username': u''}, auto_id=False)
+>>> print p.as_ul()
+<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration({'username': u'foo'}, auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
+
+An 'initial' value is *not* used as a fallback if data is not provided. In this
+example, we don't provide a value for 'username', and the form raises a
+validation error rather than using the initial value for 'username'.
+>>> p = UserRegistration({'password': 'secret'})
+>>> p.errors
+{'username': [u'This field is required.']}
+>>> p.is_valid()
+False
+
+# Dynamic initial data ########################################################
+
+The previous technique dealt with "hard-coded" initial data, but it's also
+possible to specify initial data after you've already created the Form class
+(i.e., at runtime). Use the 'initial' parameter to the Form constructor. This
+should be a dictionary containing initial values for one or more fields in the
+form, keyed by field name.
+
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10)
+...    password = CharField(widget=PasswordInput)
+
+Here, we're not submitting any data, so the initial value will be displayed.
+>>> p = UserRegistration(initial={'username': 'django'}, auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="django" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration(initial={'username': 'stephane'}, auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="stephane" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" /></li>
+
+The 'initial' parameter is meaningless if you pass data.
+>>> p = UserRegistration({}, initial={'username': 'django'}, auto_id=False)
+>>> print p.as_ul()
+<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration({'username': u''}, initial={'username': 'django'}, auto_id=False)
+>>> print p.as_ul()
+<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
+>>> p = UserRegistration({'username': u'foo'}, initial={'username': 'django'}, auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
+
+A dynamic 'initial' value is *not* used as a fallback if data is not provided.
+In this example, we don't provide a value for 'username', and the form raises a
+validation error rather than using the initial value for 'username'.
+>>> p = UserRegistration({'password': 'secret'}, initial={'username': 'django'})
+>>> p.errors
+{'username': [u'This field is required.']}
+>>> p.is_valid()
+False
+
+If a Form defines 'initial' *and* 'initial' is passed as a parameter to Form(),
+then the latter will get precedence.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, initial='django')
+...    password = CharField(widget=PasswordInput)
+>>> p = UserRegistration(initial={'username': 'babik'}, auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="babik" maxlength="10" /></li>
+<li>Password: <input type="password" name="password" /></li>
+
+# Help text ###################################################################
+
+You can specify descriptive text for a field by using the 'help_text' argument
+to a Field class. This help text is displayed when a Form is rendered.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, help_text='e.g., user at example.com')
+...    password = CharField(widget=PasswordInput, help_text='Choose wisely.')
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" maxlength="10" /> e.g., user at example.com</li>
+<li>Password: <input type="password" name="password" /> Choose wisely.</li>
+>>> print p.as_p()
+<p>Username: <input type="text" name="username" maxlength="10" /> e.g., user at example.com</p>
+<p>Password: <input type="password" name="password" /> Choose wisely.</p>
+>>> print p.as_table()
+<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" /><br />e.g., user at example.com</td></tr>
+<tr><th>Password:</th><td><input type="password" name="password" /><br />Choose wisely.</td></tr>
+
+The help text is displayed whether or not data is provided for the form.
+>>> p = UserRegistration({'username': u'foo'}, auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" value="foo" maxlength="10" /> e.g., user at example.com</li>
+<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /> Choose wisely.</li>
+
+help_text is not displayed for hidden fields. It can be used for documentation
+purposes, though.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, help_text='e.g., user at example.com')
+...    password = CharField(widget=PasswordInput)
+...    next = CharField(widget=HiddenInput, initial='/', help_text='Redirect destination')
+>>> p = UserRegistration(auto_id=False)
+>>> print p.as_ul()
+<li>Username: <input type="text" name="username" maxlength="10" /> e.g., user at example.com</li>
+<li>Password: <input type="password" name="password" /><input type="hidden" name="next" value="/" /></li>
+
+Help text can include arbitrary Unicode characters.
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, help_text='ŠĐĆŽćžšđ')
+>>> p = UserRegistration(auto_id=False)
+>>> p.as_ul()
+u'<li>Username: <input type="text" name="username" maxlength="10" /> \u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</li>'
+
+# Subclassing forms ###########################################################
+
+You can subclass a Form to add fields. The resulting form subclass will have
+all of the fields of the parent Form, plus whichever fields you define in the
+subclass.
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     birthday = DateField()
+>>> class Musician(Person):
+...     instrument = CharField()
+>>> p = Person(auto_id=False)
+>>> print p.as_ul()
+<li>First name: <input type="text" name="first_name" /></li>
+<li>Last name: <input type="text" name="last_name" /></li>
+<li>Birthday: <input type="text" name="birthday" /></li>
+>>> m = Musician(auto_id=False)
+>>> print m.as_ul()
+<li>First name: <input type="text" name="first_name" /></li>
+<li>Last name: <input type="text" name="last_name" /></li>
+<li>Birthday: <input type="text" name="birthday" /></li>
+<li>Instrument: <input type="text" name="instrument" /></li>
+
+Yes, you can subclass multiple forms. The fields are added in the order in
+which the parent classes are listed.
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     birthday = DateField()
+>>> class Instrument(Form):
+...     instrument = CharField()
+>>> class Beatle(Person, Instrument):
+...     haircut_type = CharField()
+>>> b = Beatle(auto_id=False)
+>>> print b.as_ul()
+<li>First name: <input type="text" name="first_name" /></li>
+<li>Last name: <input type="text" name="last_name" /></li>
+<li>Birthday: <input type="text" name="birthday" /></li>
+<li>Instrument: <input type="text" name="instrument" /></li>
+<li>Haircut type: <input type="text" name="haircut_type" /></li>
+
+# Forms with prefixes #########################################################
+
+Sometimes it's necessary to have multiple forms display on the same HTML page,
+or multiple copies of the same form. We can accomplish this with form prefixes.
+Pass the keyword argument 'prefix' to the Form constructor to use this feature.
+This value will be prepended to each HTML form field name. One way to think
+about this is "namespaces for HTML forms". Notice that in the data argument,
+each field's key has the prefix, in this case 'person1', prepended to the
+actual field name.
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     birthday = DateField()
+>>> data = {
+...     'person1-first_name': u'John',
+...     'person1-last_name': u'Lennon',
+...     'person1-birthday': u'1940-10-9'
+... }
+>>> p = Person(data, prefix='person1')
+>>> print p.as_ul()
+<li><label for="id_person1-first_name">First name:</label> <input type="text" name="person1-first_name" value="John" id="id_person1-first_name" /></li>
+<li><label for="id_person1-last_name">Last name:</label> <input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" /></li>
+<li><label for="id_person1-birthday">Birthday:</label> <input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" /></li>
+>>> print p['first_name']
+<input type="text" name="person1-first_name" value="John" id="id_person1-first_name" />
+>>> print p['last_name']
+<input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" />
+>>> print p['birthday']
+<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" />
+>>> p.errors
+{}
+>>> p.is_valid()
+True
+>>> p.clean_data
+{'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)}
+
+Let's try submitting some bad data to make sure form.errors and field.errors
+work as expected.
+>>> data = {
+...     'person1-first_name': u'',
+...     'person1-last_name': u'',
+...     'person1-birthday': u''
+... }
+>>> p = Person(data, prefix='person1')
+>>> p.errors
+{'first_name': [u'This field is required.'], 'last_name': [u'This field is required.'], 'birthday': [u'This field is required.']}
+>>> p['first_name'].errors
+[u'This field is required.']
+>>> p['person1-first_name'].errors
+Traceback (most recent call last):
+...
+KeyError: "Key 'person1-first_name' not found in Form"
+
+In this example, the data doesn't have a prefix, but the form requires it, so
+the form doesn't "see" the fields.
+>>> data = {
+...     'first_name': u'John',
+...     'last_name': u'Lennon',
+...     'birthday': u'1940-10-9'
+... }
+>>> p = Person(data, prefix='person1')
+>>> p.errors
+{'first_name': [u'This field is required.'], 'last_name': [u'This field is required.'], 'birthday': [u'This field is required.']}
+
+With prefixes, a single data dictionary can hold data for multiple instances
+of the same form.
+>>> data = {
+...     'person1-first_name': u'John',
+...     'person1-last_name': u'Lennon',
+...     'person1-birthday': u'1940-10-9',
+...     'person2-first_name': u'Jim',
+...     'person2-last_name': u'Morrison',
+...     'person2-birthday': u'1943-12-8'
+... }
+>>> p1 = Person(data, prefix='person1')
+>>> p1.is_valid()
+True
+>>> p1.clean_data
+{'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)}
+>>> p2 = Person(data, prefix='person2')
+>>> p2.is_valid()
+True
+>>> p2.clean_data
+{'first_name': u'Jim', 'last_name': u'Morrison', 'birthday': datetime.date(1943, 12, 8)}
+
+By default, forms append a hyphen between the prefix and the field name, but a
+form can alter that behavior by implementing the add_prefix() method. This
+method takes a field name and returns the prefixed field, according to
+self.prefix.
+>>> class Person(Form):
+...     first_name = CharField()
+...     last_name = CharField()
+...     birthday = DateField()
+...     def add_prefix(self, field_name):
+...         return self.prefix and '%s-prefix-%s' % (self.prefix, field_name) or field_name
+>>> p = Person(prefix='foo')
+>>> print p.as_ul()
+<li><label for="id_foo-prefix-first_name">First name:</label> <input type="text" name="foo-prefix-first_name" id="id_foo-prefix-first_name" /></li>
+<li><label for="id_foo-prefix-last_name">Last name:</label> <input type="text" name="foo-prefix-last_name" id="id_foo-prefix-last_name" /></li>
+<li><label for="id_foo-prefix-birthday">Birthday:</label> <input type="text" name="foo-prefix-birthday" id="id_foo-prefix-birthday" /></li>
+>>> data = {
+...     'foo-prefix-first_name': u'John',
+...     'foo-prefix-last_name': u'Lennon',
+...     'foo-prefix-birthday': u'1940-10-9'
+... }
+>>> p = Person(data, prefix='foo')
+>>> p.is_valid()
+True
+>>> p.clean_data
+{'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)}
+
+# Forms with NullBooleanFields ################################################
+
+NullBooleanField is a bit of a special case because its presentation (widget)
+is different than its data. This is handled transparently, though.
+
+>>> class Person(Form):
+...     name = CharField()
+...     is_cool = NullBooleanField()
+>>> p = Person({'name': u'Joe'}, auto_id=False)
+>>> print p['is_cool']
+<select name="is_cool">
+<option value="1" selected="selected">Unknown</option>
+<option value="2">Yes</option>
+<option value="3">No</option>
+</select>
+>>> p = Person({'name': u'Joe', 'is_cool': u'1'}, auto_id=False)
+>>> print p['is_cool']
+<select name="is_cool">
+<option value="1" selected="selected">Unknown</option>
+<option value="2">Yes</option>
+<option value="3">No</option>
+</select>
+>>> p = Person({'name': u'Joe', 'is_cool': u'2'}, auto_id=False)
+>>> print p['is_cool']
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2" selected="selected">Yes</option>
+<option value="3">No</option>
+</select>
+>>> p = Person({'name': u'Joe', 'is_cool': u'3'}, auto_id=False)
+>>> print p['is_cool']
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2">Yes</option>
+<option value="3" selected="selected">No</option>
+</select>
+>>> p = Person({'name': u'Joe', 'is_cool': True}, auto_id=False)
+>>> print p['is_cool']
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2" selected="selected">Yes</option>
+<option value="3">No</option>
+</select>
+>>> p = Person({'name': u'Joe', 'is_cool': False}, auto_id=False)
+>>> print p['is_cool']
+<select name="is_cool">
+<option value="1">Unknown</option>
+<option value="2">Yes</option>
+<option value="3" selected="selected">No</option>
+</select>
+
+# Basic form processing in a view #############################################
+
+>>> from django.template import Template, Context
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10)
+...    password1 = CharField(widget=PasswordInput)
+...    password2 = CharField(widget=PasswordInput)
+...    def clean(self):
+...        if self.clean_data.get('password1') and self.clean_data.get('password2') and self.clean_data['password1'] != self.clean_data['password2']:
+...            raise ValidationError(u'Please make sure your passwords match.')
+...        return self.clean_data
+>>> def my_function(method, post_data):
+...     if method == 'POST':
+...         form = UserRegistration(post_data, auto_id=False)
+...     else:
+...         form = UserRegistration(auto_id=False)
+...     if form.is_valid():
+...         return 'VALID: %r' % form.clean_data
+...     t = Template('<form action="" method="post">\n<table>\n{{ form }}\n</table>\n<input type="submit" />\n</form>')
+...     return t.render(Context({'form': form}))
+
+Case 1: GET (an empty form, with no errors).
+>>> print my_function('GET', {})
+<form action="" method="post">
+<table>
+<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" /></td></tr>
+<tr><th>Password1:</th><td><input type="password" name="password1" /></td></tr>
+<tr><th>Password2:</th><td><input type="password" name="password2" /></td></tr>
+</table>
+<input type="submit" />
+</form>
+
+Case 2: POST with erroneous data (a redisplayed form, with errors).
+>>> print my_function('POST', {'username': 'this-is-a-long-username', 'password1': 'foo', 'password2': 'bar'})
+<form action="" method="post">
+<table>
+<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
+<tr><th>Username:</th><td><ul class="errorlist"><li>Ensure this value has at most 10 characters.</li></ul><input type="text" name="username" value="this-is-a-long-username" maxlength="10" /></td></tr>
+<tr><th>Password1:</th><td><input type="password" name="password1" value="foo" /></td></tr>
+<tr><th>Password2:</th><td><input type="password" name="password2" value="bar" /></td></tr>
+</table>
+<input type="submit" />
+</form>
+
+Case 3: POST with valid data (the success message).
+>>> print my_function('POST', {'username': 'adrian', 'password1': 'secret', 'password2': 'secret'})
+VALID: {'username': u'adrian', 'password1': u'secret', 'password2': u'secret'}
+
+# Some ideas for using templates with forms ###################################
+
+>>> class UserRegistration(Form):
+...    username = CharField(max_length=10, help_text="Good luck picking a username that doesn't already exist.")
+...    password1 = CharField(widget=PasswordInput)
+...    password2 = CharField(widget=PasswordInput)
+...    def clean(self):
+...        if self.clean_data.get('password1') and self.clean_data.get('password2') and self.clean_data['password1'] != self.clean_data['password2']:
+...            raise ValidationError(u'Please make sure your passwords match.')
+...        return self.clean_data
+
+You have full flexibility in displaying form fields in a template. Just pass a
+Form instance to the template, and use "dot" access to refer to individual
+fields. Note, however, that this flexibility comes with the responsibility of
+displaying all the errors, including any that might not be associated with a
+particular field.
+>>> t = Template('''<form action="">
+... {{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p>
+... {{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p>
+... {{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p>
+... <input type="submit" />
+... </form>''')
+>>> print t.render(Context({'form': UserRegistration(auto_id=False)}))
+<form action="">
+<p><label>Your username: <input type="text" name="username" maxlength="10" /></label></p>
+<p><label>Password: <input type="password" name="password1" /></label></p>
+<p><label>Password (again): <input type="password" name="password2" /></label></p>
+<input type="submit" />
+</form>
+>>> print t.render(Context({'form': UserRegistration({'username': 'django'}, auto_id=False)}))
+<form action="">
+<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" /></label></p>
+<ul class="errorlist"><li>This field is required.</li></ul><p><label>Password: <input type="password" name="password1" /></label></p>
+<ul class="errorlist"><li>This field is required.</li></ul><p><label>Password (again): <input type="password" name="password2" /></label></p>
+<input type="submit" />
+</form>
+
+Use form.[field].label to output a field's label. You can specify the label for
+a field by using the 'label' argument to a Field class. If you don't specify
+'label', Django will use the field name with underscores converted to spaces,
+and the initial letter capitalized.
+>>> t = Template('''<form action="">
+... <p><label>{{ form.username.label }}: {{ form.username }}</label></p>
+... <p><label>{{ form.password1.label }}: {{ form.password1 }}</label></p>
+... <p><label>{{ form.password2.label }}: {{ form.password2 }}</label></p>
+... <input type="submit" />
+... </form>''')
+>>> print t.render(Context({'form': UserRegistration(auto_id=False)}))
+<form action="">
+<p><label>Username: <input type="text" name="username" maxlength="10" /></label></p>
+<p><label>Password1: <input type="password" name="password1" /></label></p>
+<p><label>Password2: <input type="password" name="password2" /></label></p>
+<input type="submit" />
+</form>
+
+User form.[field].label_tag to output a field's label with a <label> tag
+wrapped around it, but *only* if the given field has an "id" attribute.
+Recall from above that passing the "auto_id" argument to a Form gives each
+field an "id" attribute.
+>>> t = Template('''<form action="">
+... <p>{{ form.username.label_tag }}: {{ form.username }}</p>
+... <p>{{ form.password1.label_tag }}: {{ form.password1 }}</p>
+... <p>{{ form.password2.label_tag }}: {{ form.password2 }}</p>
+... <input type="submit" />
+... </form>''')
+>>> print t.render(Context({'form': UserRegistration(auto_id=False)}))
+<form action="">
+<p>Username: <input type="text" name="username" maxlength="10" /></p>
+<p>Password1: <input type="password" name="password1" /></p>
+<p>Password2: <input type="password" name="password2" /></p>
+<input type="submit" />
+</form>
+>>> print t.render(Context({'form': UserRegistration(auto_id='id_%s')}))
+<form action="">
+<p><label for="id_username">Username</label>: <input id="id_username" type="text" name="username" maxlength="10" /></p>
+<p><label for="id_password1">Password1</label>: <input type="password" name="password1" id="id_password1" /></p>
+<p><label for="id_password2">Password2</label>: <input type="password" name="password2" id="id_password2" /></p>
+<input type="submit" />
+</form>
+
+User form.[field].help_text to output a field's help text. If the given field
+does not have help text, nothing will be output.
+>>> t = Template('''<form action="">
+... <p>{{ form.username.label_tag }}: {{ form.username }}<br />{{ form.username.help_text }}</p>
+... <p>{{ form.password1.label_tag }}: {{ form.password1 }}</p>
+... <p>{{ form.password2.label_tag }}: {{ form.password2 }}</p>
+... <input type="submit" />
+... </form>''')
+>>> print t.render(Context({'form': UserRegistration(auto_id=False)}))
+<form action="">
+<p>Username: <input type="text" name="username" maxlength="10" /><br />Good luck picking a username that doesn't already exist.</p>
+<p>Password1: <input type="password" name="password1" /></p>
+<p>Password2: <input type="password" name="password2" /></p>
+<input type="submit" />
+</form>
+>>> Template('{{ form.password1.help_text }}').render(Context({'form': UserRegistration(auto_id=False)}))
+''
+
+The label_tag() method takes an optional attrs argument: a dictionary of HTML
+attributes to add to the <label> tag.
+>>> f = UserRegistration(auto_id='id_%s')
+>>> for bf in f:
+...     print bf.label_tag(attrs={'class': 'pretty'})
+<label for="id_username" class="pretty">Username</label>
+<label for="id_password1" class="pretty">Password1</label>
+<label for="id_password2" class="pretty">Password2</label>
+
+To display the errors that aren't associated with a particular field -- e.g.,
+the errors caused by Form.clean() -- use {{ form.non_field_errors }} in the
+template. If used on its own, it is displayed as a <ul> (or an empty string, if
+the list of errors is empty). You can also use it in {% if %} statements.
+>>> t = Template('''<form action="">
+... {{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p>
+... {{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p>
+... {{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p>
+... <input type="submit" />
+... </form>''')
+>>> print t.render(Context({'form': UserRegistration({'username': 'django', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)}))
+<form action="">
+<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" /></label></p>
+<p><label>Password: <input type="password" name="password1" value="foo" /></label></p>
+<p><label>Password (again): <input type="password" name="password2" value="bar" /></label></p>
+<input type="submit" />
+</form>
+>>> t = Template('''<form action="">
+... {{ form.non_field_errors }}
+... {{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p>
+... {{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p>
+... {{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p>
+... <input type="submit" />
+... </form>''')
+>>> print t.render(Context({'form': UserRegistration({'username': 'django', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)}))
+<form action="">
+<ul class="errorlist"><li>Please make sure your passwords match.</li></ul>
+<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" /></label></p>
+<p><label>Password: <input type="password" name="password1" value="foo" /></label></p>
+<p><label>Password (again): <input type="password" name="password2" value="bar" /></label></p>
+<input type="submit" />
+</form>
+
+###############
+# Extra stuff #
+###############
+
+The newforms library comes with some extra, higher-level Field and Widget
+classes that demonstrate some of the library's abilities.
+
+# SelectDateWidget ############################################################
+
+>>> from django.newforms.extras import SelectDateWidget
+>>> w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'))
+>>> print w.render('mydate', '')
+<select name="mydate_month">
+<option value="1">January</option>
+<option value="2">February</option>
+<option value="3">March</option>
+<option value="4">April</option>
+<option value="5">May</option>
+<option value="6">June</option>
+<option value="7">July</option>
+<option value="8">August</option>
+<option value="9">September</option>
+<option value="10">October</option>
+<option value="11">November</option>
+<option value="12">December</option>
+</select>
+<select name="mydate_day">
+<option value="1">1</option>
+<option value="2">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+<option value="5">5</option>
+<option value="6">6</option>
+<option value="7">7</option>
+<option value="8">8</option>
+<option value="9">9</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+</select>
+<select name="mydate_year">
+<option value="2007">2007</option>
+<option value="2008">2008</option>
+<option value="2009">2009</option>
+<option value="2010">2010</option>
+<option value="2011">2011</option>
+<option value="2012">2012</option>
+<option value="2013">2013</option>
+<option value="2014">2014</option>
+<option value="2015">2015</option>
+<option value="2016">2016</option>
+</select>
+>>> w.render('mydate', None) == w.render('mydate', '')
+True
+>>> print w.render('mydate', '2010-04-15')
+<select name="mydate_month">
+<option value="1">January</option>
+<option value="2">February</option>
+<option value="3">March</option>
+<option value="4" selected="selected">April</option>
+<option value="5">May</option>
+<option value="6">June</option>
+<option value="7">July</option>
+<option value="8">August</option>
+<option value="9">September</option>
+<option value="10">October</option>
+<option value="11">November</option>
+<option value="12">December</option>
+</select>
+<select name="mydate_day">
+<option value="1">1</option>
+<option value="2">2</option>
+<option value="3">3</option>
+<option value="4">4</option>
+<option value="5">5</option>
+<option value="6">6</option>
+<option value="7">7</option>
+<option value="8">8</option>
+<option value="9">9</option>
+<option value="10">10</option>
+<option value="11">11</option>
+<option value="12">12</option>
+<option value="13">13</option>
+<option value="14">14</option>
+<option value="15" selected="selected">15</option>
+<option value="16">16</option>
+<option value="17">17</option>
+<option value="18">18</option>
+<option value="19">19</option>
+<option value="20">20</option>
+<option value="21">21</option>
+<option value="22">22</option>
+<option value="23">23</option>
+<option value="24">24</option>
+<option value="25">25</option>
+<option value="26">26</option>
+<option value="27">27</option>
+<option value="28">28</option>
+<option value="29">29</option>
+<option value="30">30</option>
+<option value="31">31</option>
+</select>
+<select name="mydate_year">
+<option value="2007">2007</option>
+<option value="2008">2008</option>
+<option value="2009">2009</option>
+<option value="2010" selected="selected">2010</option>
+<option value="2011">2011</option>
+<option value="2012">2012</option>
+<option value="2013">2013</option>
+<option value="2014">2014</option>
+<option value="2015">2015</option>
+<option value="2016">2016</option>
+</select>
+
+# USZipCodeField ##############################################################
+
+USZipCodeField validates that the data is either a five-digit U.S. zip code or
+a zip+4.
+>>> from django.contrib.localflavor.usa.forms import USZipCodeField
+>>> f = USZipCodeField()
+>>> f.clean('60606')
+u'60606'
+>>> f.clean(60606)
+u'60606'
+>>> f.clean('04000')
+u'04000'
+>>> f.clean('4000')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
+>>> f.clean('60606-1234')
+u'60606-1234'
+>>> f.clean('6060-1234')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
+>>> f.clean('60606-')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = USZipCodeField(required=False)
+>>> f.clean('60606')
+u'60606'
+>>> f.clean(60606)
+u'60606'
+>>> f.clean('04000')
+u'04000'
+>>> f.clean('4000')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
+>>> f.clean('60606-1234')
+u'60606-1234'
+>>> f.clean('6060-1234')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
+>>> f.clean('60606-')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+
+# USPhoneNumberField ##########################################################
+
+USPhoneNumberField validates that the data is a valid U.S. phone number,
+including the area code. It's normalized to XXX-XXX-XXXX format.
+>>> from django.contrib.localflavor.usa.forms import USPhoneNumberField
+>>> f = USPhoneNumberField()
+>>> f.clean('312-555-1212')
+u'312-555-1212'
+>>> f.clean('3125551212')
+u'312-555-1212'
+>>> f.clean('312 555-1212')
+u'312-555-1212'
+>>> f.clean('(312) 555-1212')
+u'312-555-1212'
+>>> f.clean('312 555 1212')
+u'312-555-1212'
+>>> f.clean('312.555.1212')
+u'312-555-1212'
+>>> f.clean('312.555-1212')
+u'312-555-1212'
+>>> f.clean(' (312) 555.1212 ')
+u'312-555-1212'
+>>> f.clean('555-1212')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.']
+>>> f.clean('312-55-1212')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = USPhoneNumberField(required=False)
+>>> f.clean('312-555-1212')
+u'312-555-1212'
+>>> f.clean('3125551212')
+u'312-555-1212'
+>>> f.clean('312 555-1212')
+u'312-555-1212'
+>>> f.clean('(312) 555-1212')
+u'312-555-1212'
+>>> f.clean('312 555 1212')
+u'312-555-1212'
+>>> f.clean('312.555.1212')
+u'312-555-1212'
+>>> f.clean('312.555-1212')
+u'312-555-1212'
+>>> f.clean(' (312) 555.1212 ')
+u'312-555-1212'
+>>> f.clean('555-1212')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.']
+>>> f.clean('312-55-1212')
+Traceback (most recent call last):
+...
+ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.']
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+
+# USStateField ################################################################
+
+USStateField validates that the data is either an abbreviation or name of a
+U.S. state.
+>>> from django.contrib.localflavor.usa.forms import USStateField
+>>> f = USStateField()
+>>> f.clean('il')
+u'IL'
+>>> f.clean('IL')
+u'IL'
+>>> f.clean('illinois')
+u'IL'
+>>> f.clean('  illinois ')
+u'IL'
+>>> f.clean(60606)
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a U.S. state or territory.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = USStateField(required=False)
+>>> f.clean('il')
+u'IL'
+>>> f.clean('IL')
+u'IL'
+>>> f.clean('illinois')
+u'IL'
+>>> f.clean('  illinois ')
+u'IL'
+>>> f.clean(60606)
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a U.S. state or territory.']
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+
+# USStateSelect ###############################################################
+
+USStateSelect is a Select widget that uses a list of U.S. states/territories
+as its choices.
+>>> from django.contrib.localflavor.usa.forms import USStateSelect
+>>> w = USStateSelect()
+>>> print w.render('state', 'IL')
+<select name="state">
+<option value="AL">Alabama</option>
+<option value="AK">Alaska</option>
+<option value="AS">American Samoa</option>
+<option value="AZ">Arizona</option>
+<option value="AR">Arkansas</option>
+<option value="CA">California</option>
+<option value="CO">Colorado</option>
+<option value="CT">Connecticut</option>
+<option value="DE">Deleware</option>
+<option value="DC">District of Columbia</option>
+<option value="FM">Federated States of Micronesia</option>
+<option value="FL">Florida</option>
+<option value="GA">Georgia</option>
+<option value="GU">Guam</option>
+<option value="HI">Hawaii</option>
+<option value="ID">Idaho</option>
+<option value="IL" selected="selected">Illinois</option>
+<option value="IN">Indiana</option>
+<option value="IA">Iowa</option>
+<option value="KS">Kansas</option>
+<option value="KY">Kentucky</option>
+<option value="LA">Louisiana</option>
+<option value="ME">Maine</option>
+<option value="MH">Marshall Islands</option>
+<option value="MD">Maryland</option>
+<option value="MA">Massachusetts</option>
+<option value="MI">Michigan</option>
+<option value="MN">Minnesota</option>
+<option value="MS">Mississippi</option>
+<option value="MO">Missouri</option>
+<option value="MT">Montana</option>
+<option value="NE">Nebraska</option>
+<option value="NV">Nevada</option>
+<option value="NH">New Hampshire</option>
+<option value="NJ">New Jersey</option>
+<option value="NM">New Mexico</option>
+<option value="NY">New York</option>
+<option value="NC">North Carolina</option>
+<option value="ND">North Dakota</option>
+<option value="MP">Northern Mariana Islands</option>
+<option value="OH">Ohio</option>
+<option value="OK">Oklahoma</option>
+<option value="OR">Oregon</option>
+<option value="PW">Palau</option>
+<option value="PA">Pennsylvania</option>
+<option value="PR">Puerto Rico</option>
+<option value="RI">Rhode Island</option>
+<option value="SC">South Carolina</option>
+<option value="SD">South Dakota</option>
+<option value="TN">Tennessee</option>
+<option value="TX">Texas</option>
+<option value="UT">Utah</option>
+<option value="VT">Vermont</option>
+<option value="VI">Virgin Islands</option>
+<option value="VA">Virginia</option>
+<option value="WA">Washington</option>
+<option value="WV">West Virginia</option>
+<option value="WI">Wisconsin</option>
+<option value="WY">Wyoming</option>
+</select>
+
+# UKPostcodeField #############################################################
+
+UKPostcodeField validates that the data is a valid UK postcode.
+>>> from django.contrib.localflavor.uk.forms import UKPostcodeField
+>>> f = UKPostcodeField()
+>>> f.clean('BT32 4PX')
+u'BT32 4PX'
+>>> f.clean('GIR 0AA')
+u'GIR 0AA'
+>>> f.clean('BT324PX')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.']
+>>> f.clean('1NV 4L1D')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.']
+>>> f.clean(None)
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+>>> f.clean('')
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
+
+>>> f = UKPostcodeField(required=False)
+>>> f.clean('BT32 4PX')
+u'BT32 4PX'
+>>> f.clean('GIR 0AA')
+u'GIR 0AA'
+>>> f.clean('1NV 4L1D')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.']
+>>> f.clean('BT324PX')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.']
+>>> f.clean(None)
+u''
+>>> f.clean('')
+u''
+
+#################################
+# Tests of underlying functions #
+#################################
+
+# smart_unicode tests
+>>> from django.newforms.util import smart_unicode
+>>> class Test:
+...     def __str__(self):
+...        return 'ŠĐĆŽćžšđ'
+>>> class TestU:
+...     def __str__(self):
+...        return 'Foo'
+...     def __unicode__(self):
+...        return u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
+>>> smart_unicode(Test())
+u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
+>>> smart_unicode(TestU())
+u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
+>>> smart_unicode(1)
+u'1'
+>>> smart_unicode('foo')
+u'foo'
+"""
+
+if __name__ == "__main__":
+    import doctest
+    doctest.testmod()

Added: vendor/django/current/tests/regressiontests/httpwrappers/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/httpwrappers/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/httpwrappers/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/httpwrappers/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/httpwrappers/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,358 @@
+"""
+###################
+# Empty QueryDict #
+###################
+
+>>> q = QueryDict('')
+
+>>> q['foo']
+Traceback (most recent call last):
+...
+MultiValueDictKeyError: "Key 'foo' not found in <MultiValueDict: {}>"
+
+>>> q['something'] = 'bar'
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.get('foo', 'default')
+'default'
+
+>>> q.getlist('foo')
+[]
+
+>>> q.setlist('foo', ['bar', 'baz'])
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.appendlist('foo', ['bar'])
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.has_key('foo')
+False
+
+>>> q.items()
+[]
+
+>>> q.lists()
+[]
+
+>>> q.keys()
+[]
+
+>>> q.values()
+[]
+
+>>> len(q)
+0
+
+>>> q.update({'foo': 'bar'})
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.pop('foo')
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.popitem()
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.clear()
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.setdefault('foo', 'bar')
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.urlencode()
+''
+
+###################################
+# Mutable copy of empty QueryDict #
+###################################
+
+>>> q = q.copy()
+
+>>> q['foo']
+Traceback (most recent call last):
+...
+MultiValueDictKeyError: "Key 'foo' not found in <MultiValueDict: {}>"
+
+>>> q['name'] = 'john'
+
+>>> q['name']
+'john'
+
+>>> q.get('foo', 'default')
+'default'
+
+>>> q.get('name', 'default')
+'john'
+
+>>> q.getlist('name')
+['john']
+
+>>> q.getlist('foo')
+[]
+
+>>> q.setlist('foo', ['bar', 'baz'])
+
+>>> q.get('foo', 'default')
+'baz'
+
+>>> q.getlist('foo')
+['bar', 'baz']
+
+>>> q.appendlist('foo', 'another')
+
+>>> q.getlist('foo')
+['bar', 'baz', 'another']
+
+>>> q['foo']
+'another'
+
+>>> q.has_key('foo')
+True
+
+>>> q.items()
+[('foo', 'another'), ('name', 'john')]
+
+>>> q.lists()
+[('foo', ['bar', 'baz', 'another']), ('name', ['john'])]
+
+>>> q.keys()
+['foo', 'name']
+
+>>> q.values()
+['another', 'john']
+
+>>> len(q)
+2
+
+>>> q.update({'foo': 'hello'})
+
+# Displays last value
+>>> q['foo']
+'hello'
+
+>>> q.get('foo', 'not available')
+'hello'
+
+>>> q.getlist('foo')
+['bar', 'baz', 'another', 'hello']
+
+>>> q.pop('foo')
+['bar', 'baz', 'another', 'hello']
+
+>>> q.get('foo', 'not there')
+'not there'
+
+>>> q.setdefault('foo', 'bar')
+'bar'
+
+>>> q['foo']
+'bar'
+
+>>> q.getlist('foo')
+['bar']
+
+>>> q.urlencode()
+'foo=bar&name=john'
+
+>>> q.clear()
+
+>>> len(q)
+0
+
+#####################################
+# QueryDict with one key/value pair #
+#####################################
+
+>>> q = QueryDict('foo=bar')
+
+>>> q['foo']
+'bar'
+
+>>> q['bar']
+Traceback (most recent call last):
+...
+MultiValueDictKeyError: "Key 'bar' not found in <MultiValueDict: {'foo': ['bar']}>"
+
+>>> q['something'] = 'bar'
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.get('foo', 'default')
+'bar'
+
+>>> q.get('bar', 'default')
+'default'
+
+>>> q.getlist('foo')
+['bar']
+
+>>> q.getlist('bar')
+[]
+
+>>> q.setlist('foo', ['bar', 'baz'])
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.appendlist('foo', ['bar'])
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.has_key('foo')
+True
+
+>>> q.has_key('bar')
+False
+
+>>> q.items()
+[('foo', 'bar')]
+
+>>> q.lists()
+[('foo', ['bar'])]
+
+>>> q.keys()
+['foo']
+
+>>> q.values()
+['bar']
+
+>>> len(q)
+1
+
+>>> q.update({'foo': 'bar'})
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.pop('foo')
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.popitem()
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.clear()
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.setdefault('foo', 'bar')
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.urlencode()
+'foo=bar'
+
+#####################################################
+# QueryDict with two key/value pairs with same keys #
+#####################################################
+
+>>> q = QueryDict('vote=yes&vote=no')
+
+>>> q['vote']
+'no'
+
+>>> q['something'] = 'bar'
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.get('vote', 'default')
+'no'
+
+>>> q.get('foo', 'default')
+'default'
+
+>>> q.getlist('vote')
+['yes', 'no']
+
+>>> q.getlist('foo')
+[]
+
+>>> q.setlist('foo', ['bar', 'baz'])
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.appendlist('foo', ['bar'])
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.has_key('vote')
+True
+
+>>> q.has_key('foo')
+False
+
+>>> q.items()
+[('vote', 'no')]
+
+>>> q.lists()
+[('vote', ['yes', 'no'])]
+
+>>> q.keys()
+['vote']
+
+>>> q.values()
+['no']
+
+>>> len(q)
+1
+
+>>> q.update({'foo': 'bar'})
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.pop('foo')
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.popitem()
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.clear()
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.setdefault('foo', 'bar')
+Traceback (most recent call last):
+...
+AttributeError: This QueryDict instance is immutable
+
+>>> q.urlencode()
+'vote=yes&vote=no'
+
+"""
+
+from django.http import QueryDict
+
+if __name__ == "__main__":
+    import doctest
+    doctest.testmod()

Added: vendor/django/current/tests/regressiontests/humanize/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/humanize/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/humanize/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/humanize/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/humanize/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,52 @@
+import unittest
+from django.template import Template, Context, add_to_builtins
+
+add_to_builtins('django.contrib.humanize.templatetags.humanize')
+
+class HumanizeTests(unittest.TestCase):
+
+    def humanize_tester(self, test_list, result_list, method):
+        # Using max below ensures we go through both lists
+        # However, if the lists are not equal length, this raises an exception
+        for index in xrange(len(max(test_list,result_list))):
+            test_content = test_list[index]
+            t = Template('{{ test_content|%s }}' % method)
+            rendered = t.render(Context(locals())).strip()
+            self.assertEqual(rendered, result_list[index],
+                             msg="""%s test failed, produced %s,
+should've produced %s""" % (method, rendered, result_list[index]))
+    
+    def test_ordinal(self):
+        test_list = ('1','2','3','4','11','12',
+                     '13','101','102','103','111',
+                     'something else')
+        result_list = ('1st', '2nd', '3rd', '4th', '11th',
+                       '12th', '13th', '101st', '102nd', '103rd',
+                       '111th', 'something else')
+
+        self.humanize_tester(test_list, result_list, 'ordinal')
+
+    def test_intcomma(self):
+        test_list = ('100','1000','10123','10311','1000000')
+        result_list = ('100', '1,000', '10,123', '10,311', '1,000,000')
+
+        self.humanize_tester(test_list, result_list, 'intcomma')
+
+    def test_intword(self):
+        test_list = ('100', '1000000', '1200000', '1290000',
+                     '1000000000','2000000000','6000000000000')
+        result_list = ('100', '1.0 million', '1.2 million', '1.3 million',
+                       '1.0 billion', '2.0 billion', '6.0 trillion')
+
+        self.humanize_tester(test_list, result_list, 'intword')
+
+    def test_apnumber(self):
+        test_list = [str(x) for x in xrange(1,11)]
+        result_list = ('one', 'two', 'three', 'four', 'five', 'six',
+                       'seven', 'eight', 'nine', '10')
+
+        self.humanize_tester(test_list, result_list, 'apnumber')
+
+if __name__ == '__main__':
+    unittest.main()
+    

Modified: vendor/django/current/tests/regressiontests/initial_sql_regress/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/initial_sql_regress/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/initial_sql_regress/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -7,7 +7,7 @@
 class Simple(models.Model):
     name = models.CharField(maxlength = 50)
 
-API_TESTS = ""
+__test__ = {'API_TESTS':""}
 
 # NOTE: The format of the included SQL file for this test suite is important.
 # It must end with a trailing newline in order to test the fix for #2161.

Modified: vendor/django/current/tests/regressiontests/initial_sql_regress/sql/simple.sql
===================================================================
--- vendor/django/current/tests/regressiontests/initial_sql_regress/sql/simple.sql	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/initial_sql_regress/sql/simple.sql	2007-07-19 22:25:20 UTC (rev 7717)
@@ -4,4 +4,5 @@
 INSERT INTO initial_sql_regress_simple (name) VALUES ('George');
 INSERT INTO initial_sql_regress_simple (name) VALUES ('Miles O''Brien');
 INSERT INTO initial_sql_regress_simple (name) VALUES ('Semicolon;Man');
+INSERT INTO initial_sql_regress_simple (name) VALUES ('This line has a Windows line ending');
 

Added: vendor/django/current/tests/regressiontests/invalid_admin_options/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/invalid_admin_options/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/invalid_admin_options/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/invalid_admin_options/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,337 @@
+"""
+Admin options
+
+Test invalid and valid admin options to make sure that
+model validation is working properly. 
+"""
+
+from django.db import models
+model_errors = ""
+
+# TODO: Invalid admin options should not cause a metaclass error
+##This should fail gracefully but is causing a metaclass error
+#class BadAdminOption(models.Model):
+#    "Test nonexistent admin option"
+#    name = models.CharField(maxlength=30)
+#    
+#    class Admin:
+#        nonexistent = 'option'
+#
+#model_errors += """invalid_admin_options.badadminoption: "admin" attribute, if given, must be set to a models.AdminOptions() instance.
+#"""
+        
+class ListDisplayBadOne(models.Model):
+    "Test list_display, list_display must be a list or tuple"
+    first_name = models.CharField(maxlength=30)
+
+    class Admin:
+        list_display = 'first_name'
+
+model_errors += """invalid_admin_options.listdisplaybadone: "admin.list_display", if given, must be set to a list or tuple.
+"""
+
+class ListDisplayBadTwo(models.Model):
+    "Test list_display, list_display items must be attributes, methods or properties."
+    first_name = models.CharField(maxlength=30)
+
+    class Admin:
+        list_display = ['first_name','nonexistent']
+
+model_errors += """invalid_admin_options.listdisplaybadtwo: "admin.list_display" refers to 'nonexistent', which isn't an attribute, method or property.
+"""        
+class ListDisplayBadThree(models.Model):
+    "Test list_display, list_display items can not be a ManyToManyField."
+    first_name = models.CharField(maxlength=30)
+    nick_names = models.ManyToManyField('ListDisplayGood')
+
+    class Admin:
+        list_display = ['first_name','nick_names']
+        
+model_errors += """invalid_admin_options.listdisplaybadthree: "admin.list_display" doesn't support ManyToManyFields ('nick_names').
+""" 
+      
+class ListDisplayGood(models.Model):
+    "Test list_display, Admin list_display can be a attribute, method or property."
+    first_name = models.CharField(maxlength=30)
+    
+    def _last_name(self):
+        return self.first_name
+    last_name = property(_last_name)
+    
+    def full_name(self):
+        return "%s %s" % (self.first_name, self.last_name)
+
+    class Admin:
+        list_display = ['first_name','last_name','full_name']
+       
+class ListDisplayLinksBadOne(models.Model):
+    "Test list_display_links, item must be included in list_display."
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        list_display = ['last_name']
+        list_display_links = ['first_name']
+
+model_errors += """invalid_admin_options.listdisplaylinksbadone: "admin.list_display_links" refers to 'first_name', which is not defined in "admin.list_display".
+"""
+
+class ListDisplayLinksBadTwo(models.Model):
+    "Test list_display_links, must be a list or tuple."
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        list_display = ['first_name','last_name']
+        list_display_links = 'last_name'    
+
+model_errors += """invalid_admin_options.listdisplaylinksbadtwo: "admin.list_display_links", if given, must be set to a list or tuple.
+"""
+
+# TODO: Fix list_display_links validation or remove the check for list_display
+## This is failing but the validation which should fail is not.
+#class ListDisplayLinksBadThree(models.Model):
+#    "Test list_display_links, must define list_display to use list_display_links."
+#    first_name = models.CharField(maxlength=30)
+#    last_name = models.CharField(maxlength=30)
+#    
+#    class Admin:
+#        list_display_links = ('first_name',)
+#
+#model_errors += """invalid_admin_options.listdisplaylinksbadthree: "admin.list_display" must be defined for "admin.list_display_links" to be used.
+#"""
+        
+class ListDisplayLinksGood(models.Model):
+    "Test list_display_links, Admin list_display_list can be a attribute, method or property."
+    first_name = models.CharField(maxlength=30)
+    
+    def _last_name(self):
+        return self.first_name
+    last_name = property(_last_name)
+    
+    def full_name(self):
+        return "%s %s" % (self.first_name, self.last_name)
+
+    class Admin:
+        list_display = ['first_name','last_name','full_name']
+        list_display_links = ['first_name','last_name','full_name']
+
+class ListFilterBadOne(models.Model):
+    "Test list_filter, must be a list or tuple."
+    first_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        list_filter = 'first_name'     
+
+model_errors += """invalid_admin_options.listfilterbadone: "admin.list_filter", if given, must be set to a list or tuple.
+"""
+
+class ListFilterBadTwo(models.Model):
+    "Test list_filter, must be a field not a property or method."
+    first_name = models.CharField(maxlength=30)
+    
+    def _last_name(self):
+        return self.first_name
+    last_name = property(_last_name)
+    
+    def full_name(self):
+        return "%s %s" % (self.first_name, self.last_name)
+
+    class Admin:
+        list_filter = ['first_name','last_name','full_name']
+
+model_errors += """invalid_admin_options.listfilterbadtwo: "admin.list_filter" refers to 'last_name', which isn't a field.
+invalid_admin_options.listfilterbadtwo: "admin.list_filter" refers to 'full_name', which isn't a field.
+"""
+
+class DateHierarchyBadOne(models.Model):
+    "Test date_hierarchy, must be a date or datetime field."
+    first_name = models.CharField(maxlength=30)
+    birth_day = models.DateField()
+    
+    class Admin:
+        date_hierarchy = 'first_name'
+        
+# TODO: Date Hierarchy needs to check if field is a date/datetime field.
+#model_errors += """invalid_admin_options.datehierarchybadone: "admin.date_hierarchy" refers to 'first_name', which isn't a date field or datetime field.
+#"""
+
+class DateHierarchyBadTwo(models.Model):
+    "Test date_hieracrhy, must be a field."
+    first_name = models.CharField(maxlength=30)
+    birth_day = models.DateField()
+    
+    class Admin:
+        date_hierarchy = 'nonexistent'          
+
+model_errors += """invalid_admin_options.datehierarchybadtwo: "admin.date_hierarchy" refers to 'nonexistent', which isn't a field.
+"""
+
+class DateHierarchyGood(models.Model):
+    "Test date_hieracrhy, must be a field."
+    first_name = models.CharField(maxlength=30)
+    birth_day = models.DateField()
+    
+    class Admin:
+        date_hierarchy = 'birth_day' 
+      
+class SearchFieldsBadOne(models.Model):
+    "Test search_fields, must be a list or tuple."
+    first_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        search_fields = ('nonexistent')         
+
+# TODO: Add search_fields validation
+#model_errors += """invalid_admin_options.seacrhfieldsbadone: "admin.search_fields", if given, must be set to a list or tuple.
+#"""
+      
+class SearchFieldsBadTwo(models.Model):
+    "Test search_fields, must be a field."
+    first_name = models.CharField(maxlength=30)
+
+    def _last_name(self):
+        return self.first_name
+    last_name = property(_last_name)
+    
+    class Admin:
+        search_fields = ['first_name','last_name']         
+
+# TODO: Add search_fields validation
+#model_errors += """invalid_admin_options.seacrhfieldsbadone: "admin.search_fields" refers to 'last_name', which isn't a field.
+#"""
+
+class SearchFieldsGood(models.Model):
+    "Test search_fields, must be a list or tuple."
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        search_fields = ['first_name','last_name']
+
+
+class JsBadOne(models.Model):
+    "Test js, must be a list or tuple"
+    name = models.CharField(maxlength=30)
+    
+    class Admin:
+        js = 'test.js'
+        
+# TODO: Add a js validator
+#model_errors += """invalid_admin_options.jsbadone: "admin.js", if given, must be set to a list or tuple.
+#"""
+
+class SaveAsBad(models.Model):
+    "Test save_as, should be True or False"
+    name = models.CharField(maxlength=30)
+    
+    class Admin:
+        save_as = 'not True or False'
+
+# TODO: Add a save_as validator.       
+#model_errors += """invalid_admin_options.saveasbad: "admin.save_as", if given, must be set to True or False.
+#"""
+
+class SaveOnTopBad(models.Model):
+    "Test save_on_top, should be True or False"
+    name = models.CharField(maxlength=30)
+    
+    class Admin:
+        save_on_top = 'not True or False'
+
+# TODO: Add a save_on_top validator.       
+#model_errors += """invalid_admin_options.saveontopbad: "admin.save_on_top", if given, must be set to True or False.
+#"""
+
+class ListSelectRelatedBad(models.Model):
+    "Test list_select_related, should be True or False"
+    name = models.CharField(maxlength=30)
+    
+    class Admin:
+        list_select_related = 'not True or False'
+
+# TODO: Add a list_select_related validator.       
+#model_errors += """invalid_admin_options.listselectrelatebad: "admin.list_select_related", if given, must be set to True or False.
+#"""
+
+class ListPerPageBad(models.Model):
+    "Test list_per_page, should be a positive integer value."
+    name = models.CharField(maxlength=30)
+    
+    class Admin:
+        list_per_page = 89.3
+
+# TODO: Add a list_per_page validator.       
+#model_errors += """invalid_admin_options.listperpagebad: "admin.list_per_page", if given, must be a positive integer.
+#"""
+
+class FieldsBadOne(models.Model):
+    "Test fields, should be a tuple"
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        fields = 'not a tuple'
+
+# TODO: Add a fields validator.       
+#model_errors += """invalid_admin_options.fieldsbadone: "admin.fields", if given, must be a tuple.
+#"""
+
+class FieldsBadTwo(models.Model):
+    """Test fields, 'fields' dict option is required."""
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        fields = ('Name', {'description': 'this fieldset needs fields'})
+        
+# TODO: Add a fields validator.       
+#model_errors += """invalid_admin_options.fieldsbadtwo: "admin.fields" each fieldset must include a 'fields' dict.
+#"""
+
+class FieldsBadThree(models.Model):
+    """Test fields, 'classes' and 'description' are the only allowable extra dict options."""
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        fields = ('Name', {'fields': ('first_name','last_name'),'badoption': 'verybadoption'})
+
+# TODO: Add a fields validator.       
+#model_errors += """invalid_admin_options.fieldsbadthree: "admin.fields" fieldset options must be either 'classes' or 'description'.
+#"""
+
+class FieldsGood(models.Model):
+    "Test fields, working example"
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    birth_day = models.DateField()
+    
+    class Admin:
+        fields = (
+                  ('Name', {'fields': ('first_name','last_name'),'classes': 'collapse'}),
+                  (None, {'fields': ('birth_day',),'description': 'enter your b-day'})
+                  )
+                  
+class OrderingBad(models.Model):
+    "Test ordering, must be a field."
+    first_name = models.CharField(maxlength=30)
+    last_name = models.CharField(maxlength=30)
+    
+    class Admin:
+        ordering = 'nonexistent'
+
+# TODO: Add a ordering validator.       
+#model_errors += """invalid_admin_options.orderingbad: "admin.ordering" refers to 'nonexistent', which isn't a field.
+#"""
+
+## TODO: Add a manager validator, this should fail gracefully.
+#class ManagerBad(models.Model):
+#    "Test manager, must be a manager object."
+#    first_name = models.CharField(maxlength=30)
+#    
+#    class Admin:
+#        manager = 'nonexistent'
+#       
+#model_errors += """invalid_admin_options.managerbad: "admin.manager" refers to 'nonexistent', which isn't a Manager().
+#"""
\ No newline at end of file

Modified: vendor/django/current/tests/regressiontests/many_to_one_regress/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/many_to_one_regress/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/many_to_one_regress/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,13 +1,34 @@
 from django.db import models
 
+# If ticket #1578 ever slips back in, these models will not be able to be
+# created (the field names being lower-cased versions of their opposite
+# classes is important here).
+
 class First(models.Model):
     second = models.IntegerField()
 
 class Second(models.Model):
     first = models.ForeignKey(First, related_name = 'the_first')
 
-# If ticket #1578 ever slips back in, these models will not be able to be
-# created (the field names being lower-cased versions of their opposite
-# classes is important here).
+# Protect against repetition of #1839, #2415 and #2536.
+class Third(models.Model):
+    name = models.CharField(maxlength=20)
+    third = models.ForeignKey('self', null=True, related_name='child_set')
 
-API_TESTS = ""
+class Parent(models.Model):
+    name = models.CharField(maxlength=20)
+    bestchild = models.ForeignKey('Child', null=True, related_name='favored_by')
+
+class Child(models.Model):
+    name = models.CharField(maxlength=20)
+    parent = models.ForeignKey(Parent)
+
+
+__test__ = {'API_TESTS':"""
+>>> Third.AddManipulator().save(dict(id='3', name='An example', another=None)) 
+<Third: Third object>
+>>> parent = Parent(name = 'fred')
+>>> parent.save()
+>>> Child.AddManipulator().save(dict(name='bam-bam', parent=parent.id))
+<Child: Child object>
+"""}

Added: vendor/django/current/tests/regressiontests/markup/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/markup/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/markup/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/markup/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/markup/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,69 @@
+# Quick tests for the markup templatetags (django.contrib.markup)
+
+from django.template import Template, Context, add_to_builtins
+import re
+import unittest
+
+add_to_builtins('django.contrib.markup.templatetags.markup')
+
+class Templates(unittest.TestCase):
+    def test_textile(self):
+        try:
+            import textile
+        except ImportError:
+            textile = None
+
+        textile_content = """Paragraph 1
+
+Paragraph 2 with "quotes" and @code@"""
+
+        t = Template("{{ textile_content|textile }}")
+        rendered = t.render(Context(locals())).strip()
+        if textile:
+            self.assertEqual(rendered, """<p>Paragraph 1</p>
+
+<p>Paragraph 2 with &#8220;quotes&#8221; and <code>code</code></p>""")
+        else:
+            self.assertEqual(rendered, textile_content)
+
+    def test_markdown(self):
+        try:
+            import markdown
+        except ImportError:
+            markdown = None
+
+        markdown_content = """Paragraph 1
+
+## An h2"""
+
+        t = Template("{{ markdown_content|markdown }}")
+        rendered = t.render(Context(locals())).strip()
+        if markdown:
+            pattern = re.compile("""<p>Paragraph 1\s*</p>\s*<h2>\s*An h2</h2>""")
+            self.assert_(pattern.match(rendered))
+        else:
+            self.assertEqual(rendered, markdown_content)
+
+    def test_docutils(self):
+        try:
+            import docutils
+        except ImportError:
+            docutils = None
+
+        rest_content = """Paragraph 1
+
+Paragraph 2 with a link_
+
+.. _link: http://www.example.com/"""
+
+        t = Template("{{ rest_content|restructuredtext }}")
+        rendered = t.render(Context(locals())).strip()
+        if docutils:
+            self.assertEqual(rendered, """<p>Paragraph 1</p>
+<p>Paragraph 2 with a <a class="reference" href="http://www.example.com/">link</a></p>""")
+        else:
+            self.assertEqual(rendered, rest_content)
+
+
+if __name__ == '__main__':
+    unittest.main()

Added: vendor/django/current/tests/regressiontests/null_queries/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/null_queries/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/null_queries/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/null_queries/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,54 @@
+from django.db import models
+
+class Poll(models.Model):
+    question = models.CharField(maxlength=200)
+
+    def __str__(self):
+        return "Q: %s " % self.question
+
+class Choice(models.Model):
+    poll = models.ForeignKey(Poll)
+    choice = models.CharField(maxlength=200)
+
+    def __str__(self):
+        return "Choice: %s in poll %s" % (self.choice, self.poll)
+
+__test__ = {'API_TESTS':"""
+# Regression test for the use of None as a query value. None is interpreted as 
+# an SQL NULL, but only in __exact queries.
+# Set up some initial polls and choices
+>>> p1 = Poll(question='Why?')
+>>> p1.save()
+>>> c1 = Choice(poll=p1, choice='Because.')
+>>> c1.save()
+>>> c2 = Choice(poll=p1, choice='Why Not?')
+>>> c2.save()
+
+# Exact query with value None returns nothing (=NULL in sql)
+>>> Choice.objects.filter(id__exact=None)
+[]
+
+# Valid query, but fails because foo isn't a keyword
+>>> Choice.objects.filter(foo__exact=None) 
+Traceback (most recent call last):
+...
+TypeError: Cannot resolve keyword 'foo' into field
+
+# Can't use None on anything other than __exact
+>>> Choice.objects.filter(id__gt=None)
+Traceback (most recent call last):
+...
+ValueError: Cannot use None as a query value
+
+# Can't use None on anything other than __exact
+>>> Choice.objects.filter(foo__gt=None)
+Traceback (most recent call last):
+...
+ValueError: Cannot use None as a query value
+
+# Related managers use __exact=None implicitly if the object hasn't been saved.
+>>> p2 = Poll(question="How?")
+>>> p2.choice_set.all()
+[]
+
+"""}

Modified: vendor/django/current/tests/regressiontests/one_to_one_regress/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/one_to_one_regress/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/one_to_one_regress/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -22,7 +22,7 @@
     def __str__(self):
         return "Favorites for %s" % self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Regression test for #1064 and #1506: Check that we create models via the m2m
 # relation if the remote model has a OneToOneField.
 >>> p1 = Place(name='Demon Dogs', address='944 W. Fullerton')
@@ -34,4 +34,4 @@
 >>> f.restaurants = [r]
 >>> f.restaurants.all()
 [<Restaurant: Demon Dogs the restaurant>]
-"""
+"""}

Added: vendor/django/current/tests/regressiontests/serializers_regress/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/serializers_regress/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/serializers_regress/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/serializers_regress/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,187 @@
+"""
+A test spanning all the capabilities of all the serializers.
+
+This class sets up a model for each model field type 
+(except for image types, because of the PIL dependency).
+"""
+
+from django.db import models
+from django.contrib.contenttypes.models import ContentType
+
+# The following classes are for testing basic data 
+# marshalling, including NULL values.
+
+class BooleanData(models.Model):
+    data = models.BooleanField(null=True)
+    
+class CharData(models.Model):
+    data = models.CharField(maxlength=30, null=True)
+
+class DateData(models.Model):
+    data = models.DateField(null=True)
+
+class DateTimeData(models.Model):
+    data = models.DateTimeField(null=True)
+
+class EmailData(models.Model):
+    data = models.EmailField(null=True)
+
+class FileData(models.Model):
+    data = models.FileField(null=True, upload_to='/foo/bar')
+
+class FilePathData(models.Model):
+    data = models.FilePathField(null=True)
+
+class FloatData(models.Model):
+    data = models.FloatField(null=True, decimal_places=3, max_digits=5)
+
+class IntegerData(models.Model):
+    data = models.IntegerField(null=True)
+
+# class ImageData(models.Model):
+#    data = models.ImageField(null=True)
+
+class IPAddressData(models.Model):
+    data = models.IPAddressField(null=True)
+
+class NullBooleanData(models.Model):
+    data = models.NullBooleanField(null=True)
+
+class PhoneData(models.Model):
+    data = models.PhoneNumberField(null=True)
+
+class PositiveIntegerData(models.Model):
+    data = models.PositiveIntegerField(null=True)
+
+class PositiveSmallIntegerData(models.Model):
+    data = models.PositiveSmallIntegerField(null=True)
+
+class SlugData(models.Model):
+    data = models.SlugField(null=True)
+
+class SmallData(models.Model):
+    data = models.SmallIntegerField(null=True)
+
+class TextData(models.Model):
+    data = models.TextField(null=True)
+
+class TimeData(models.Model):
+    data = models.TimeField(null=True)
+
+class USStateData(models.Model):
+    data = models.USStateField(null=True)
+
+class XMLData(models.Model):
+    data = models.XMLField(null=True)
+    
+class Tag(models.Model):
+    """A tag on an item."""
+    data = models.SlugField()
+    content_type = models.ForeignKey(ContentType)
+    object_id = models.PositiveIntegerField()
+
+    content_object = models.GenericForeignKey()
+
+    class Meta:
+        ordering = ["data"]
+
+class GenericData(models.Model):
+    data = models.CharField(maxlength=30)
+
+    tags = models.GenericRelation(Tag)
+    
+# The following test classes are all for validation
+# of related objects; in particular, forward, backward,
+# and self references.
+    
+class Anchor(models.Model):
+    """This is a model that can be used as 
+    something for other models to point at"""
+    
+    data = models.CharField(maxlength=30)
+    
+class FKData(models.Model):
+    data = models.ForeignKey(Anchor, null=True)
+    
+class M2MData(models.Model):
+    data = models.ManyToManyField(Anchor, null=True)
+    
+class O2OData(models.Model):
+    data = models.OneToOneField(Anchor, null=True)
+
+class FKSelfData(models.Model):
+    data = models.ForeignKey('self', null=True)
+    
+class M2MSelfData(models.Model):
+    data = models.ManyToManyField('self', null=True, symmetrical=False)
+
+# The following test classes are for validating the
+# deserialization of objects that use a user-defined
+# field as the primary key.
+# Some of these data types have been commented out
+# because they can't be used as a primary key on one
+# or all database backends.
+
+class BooleanPKData(models.Model):
+    data = models.BooleanField(primary_key=True)
+    
+class CharPKData(models.Model):
+    data = models.CharField(maxlength=30, primary_key=True)
+
+# class DatePKData(models.Model):
+#    data = models.DateField(primary_key=True)
+
+# class DateTimePKData(models.Model):
+#    data = models.DateTimeField(primary_key=True)
+
+class EmailPKData(models.Model):
+    data = models.EmailField(primary_key=True)
+
+class FilePKData(models.Model):
+    data = models.FileField(primary_key=True, upload_to='/foo/bar')
+
+class FilePathPKData(models.Model):
+    data = models.FilePathField(primary_key=True)
+
+class FloatPKData(models.Model):
+    data = models.FloatField(primary_key=True, decimal_places=3, max_digits=5)
+
+class IntegerPKData(models.Model):
+    data = models.IntegerField(primary_key=True)
+
+# class ImagePKData(models.Model):
+#    data = models.ImageField(primary_key=True)
+
+class IPAddressPKData(models.Model):
+    data = models.IPAddressField(primary_key=True)
+
+class NullBooleanPKData(models.Model):
+    data = models.NullBooleanField(primary_key=True)
+
+class PhonePKData(models.Model):
+    data = models.PhoneNumberField(primary_key=True)
+
+class PositiveIntegerPKData(models.Model):
+    data = models.PositiveIntegerField(primary_key=True)
+
+class PositiveSmallIntegerPKData(models.Model):
+    data = models.PositiveSmallIntegerField(primary_key=True)
+
+class SlugPKData(models.Model):
+    data = models.SlugField(primary_key=True)
+
+class SmallPKData(models.Model):
+    data = models.SmallIntegerField(primary_key=True)
+
+# class TextPKData(models.Model):
+#     data = models.TextField(primary_key=True)
+
+# class TimePKData(models.Model):
+#    data = models.TimeField(primary_key=True)
+
+class USStatePKData(models.Model):
+    data = models.USStateField(primary_key=True)
+
+# class XMLPKData(models.Model):
+#     data = models.XMLField(primary_key=True)
+

Added: vendor/django/current/tests/regressiontests/serializers_regress/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/serializers_regress/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/serializers_regress/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,263 @@
+"""
+A test spanning all the capabilities of all the serializers.
+
+This class defines sample data and a dynamically generated
+test case that is capable of testing the capabilities of 
+the serializers. This includes all valid data values, plus
+forward, backwards and self references.
+"""
+
+
+import unittest, datetime
+
+from django.utils.functional import curry
+from django.core import serializers
+from django.db import transaction
+from django.core import management
+
+from models import *
+
+# A set of functions that can be used to recreate
+# test data objects of various kinds
+def data_create(pk, klass, data):
+    instance = klass(id=pk)
+    instance.data = data
+    instance.save()    
+    return instance
+
+def generic_create(pk, klass, data):
+    instance = klass(id=pk)
+    instance.data = data[0]
+    instance.save()
+    for tag in data[1:]:
+        instance.tags.create(data=tag)
+    return instance
+    
+def fk_create(pk, klass, data):
+    instance = klass(id=pk)
+    setattr(instance, 'data_id', data)
+    instance.save()
+    return instance
+    
+def m2m_create(pk, klass, data):
+    instance = klass(id=pk)
+    instance.save()
+    instance.data = data
+    return instance
+
+def o2o_create(pk, klass, data):
+    instance = klass()
+    instance.data_id = data
+    instance.save()
+    return instance
+
+def pk_create(pk, klass, data):
+    instance = klass()
+    instance.data = data
+    instance.save()
+    return instance
+
+# A set of functions that can be used to compare
+# test data objects of various kinds
+def data_compare(testcase, pk, klass, data):
+    instance = klass.objects.get(id=pk)
+    testcase.assertEqual(data, instance.data, 
+                         "Objects with PK=%d not equal; expected '%s' (%s), got '%s' (%s)" % (pk,data, type(data), instance.data, type(instance.data)))
+
+def generic_compare(testcase, pk, klass, data):
+    instance = klass.objects.get(id=pk)
+    testcase.assertEqual(data[0], instance.data)
+    testcase.assertEqual(data[1:], [t.data for t in instance.tags.all()])
+    
+def fk_compare(testcase, pk, klass, data):
+    instance = klass.objects.get(id=pk)
+    testcase.assertEqual(data, instance.data_id)
+
+def m2m_compare(testcase, pk, klass, data):
+    instance = klass.objects.get(id=pk)
+    testcase.assertEqual(data, [obj.id for obj in instance.data.all()])
+
+def o2o_compare(testcase, pk, klass, data):
+    instance = klass.objects.get(data=data)
+    testcase.assertEqual(data, instance.data_id)
+
+def pk_compare(testcase, pk, klass, data):
+    instance = klass.objects.get(data=data)
+    testcase.assertEqual(data, instance.data)
+        
+# Define some data types. Each data type is
+# actually a pair of functions; one to create
+# and one to compare objects of that type
+data_obj = (data_create, data_compare)
+generic_obj = (generic_create, generic_compare)
+fk_obj = (fk_create, fk_compare)
+m2m_obj = (m2m_create, m2m_compare)
+o2o_obj = (o2o_create, o2o_compare)
+pk_obj = (pk_create, pk_compare)
+
+test_data = [
+    # Format: (data type, PK value, Model Class, data)  
+    (data_obj, 1, BooleanData, True),
+    (data_obj, 2, BooleanData, False),
+    (data_obj, 10, CharData, "Test Char Data"),
+    (data_obj, 11, CharData, ""),
+    (data_obj, 12, CharData, "None"),
+    (data_obj, 13, CharData, "null"),
+    (data_obj, 14, CharData, "NULL"),
+    (data_obj, 15, CharData, None),
+    (data_obj, 20, DateData, datetime.date(2006,6,16)),
+    (data_obj, 21, DateData, None),
+    (data_obj, 30, DateTimeData, datetime.datetime(2006,6,16,10,42,37)),
+    (data_obj, 31, DateTimeData, None),
+    (data_obj, 40, EmailData, "hovercraft at example.com"),
+    (data_obj, 41, EmailData, None),
+    (data_obj, 50, FileData, 'file:///foo/bar/whiz.txt'),
+    (data_obj, 51, FileData, None),
+    (data_obj, 60, FilePathData, "/foo/bar/whiz.txt"),
+    (data_obj, 61, FilePathData, None),
+    (data_obj, 70, FloatData, 12.345),
+    (data_obj, 71, FloatData, -12.345),
+    (data_obj, 72, FloatData, 0.0),
+    (data_obj, 73, FloatData, None),
+    (data_obj, 80, IntegerData, 123456789),
+    (data_obj, 81, IntegerData, -123456789),
+    (data_obj, 82, IntegerData, 0),
+    (data_obj, 83, IntegerData, None),
+    #(XX, ImageData
+    (data_obj, 90, IPAddressData, "127.0.0.1"),
+    (data_obj, 91, IPAddressData, None),
+    (data_obj, 100, NullBooleanData, True),
+    (data_obj, 101, NullBooleanData, False),
+    (data_obj, 102, NullBooleanData, None),
+    (data_obj, 110, PhoneData, "212-634-5789"),
+    (data_obj, 111, PhoneData, None),
+    (data_obj, 120, PositiveIntegerData, 123456789),
+    (data_obj, 121, PositiveIntegerData, None),
+    (data_obj, 130, PositiveSmallIntegerData, 12),
+    (data_obj, 131, PositiveSmallIntegerData, None),
+    (data_obj, 140, SlugData, "this-is-a-slug"),
+    (data_obj, 141, SlugData, None),
+    (data_obj, 150, SmallData, 12), 
+    (data_obj, 151, SmallData, -12), 
+    (data_obj, 152, SmallData, 0), 
+    (data_obj, 153, SmallData, None), 
+    (data_obj, 160, TextData, """This is a long piece of text.
+It contains line breaks.
+Several of them.
+The end."""),
+    (data_obj, 161, TextData, ""),
+    (data_obj, 162, TextData, None),
+    (data_obj, 170, TimeData, datetime.time(10,42,37)),
+    (data_obj, 171, TimeData, None),
+    (data_obj, 180, USStateData, "MA"),
+    (data_obj, 181, USStateData, None),
+    (data_obj, 190, XMLData, "<foo></foo>"),
+    (data_obj, 191, XMLData, None),
+
+    (generic_obj, 200, GenericData, ['Generic Object 1', 'tag1', 'tag2']),
+    (generic_obj, 201, GenericData, ['Generic Object 2', 'tag2', 'tag3']),
+
+    (data_obj, 300, Anchor, "Anchor 1"),
+    (data_obj, 301, Anchor, "Anchor 2"),
+
+    (fk_obj, 400, FKData, 300), # Post reference
+    (fk_obj, 401, FKData, 500), # Pre reference
+    (fk_obj, 402, FKData, None), # Empty reference
+
+    (m2m_obj, 410, M2MData, []), # Empty set
+    (m2m_obj, 411, M2MData, [300,301]), # Post reference
+    (m2m_obj, 412, M2MData, [500,501]), # Pre reference
+    (m2m_obj, 413, M2MData, [300,301,500,501]), # Pre and Post reference
+
+    (o2o_obj, None, O2OData, 300), # Post reference
+    (o2o_obj, None, O2OData, 500), # Pre reference
+
+    (fk_obj, 430, FKSelfData, 431), # Pre reference
+    (fk_obj, 431, FKSelfData, 430), # Post reference
+    (fk_obj, 432, FKSelfData, None), # Empty reference
+
+    (m2m_obj, 440, M2MSelfData, []),
+    (m2m_obj, 441, M2MSelfData, []),
+    (m2m_obj, 442, M2MSelfData, [440, 441]),
+    (m2m_obj, 443, M2MSelfData, [445, 446]),
+    (m2m_obj, 444, M2MSelfData, [440, 441, 445, 446]),
+    (m2m_obj, 445, M2MSelfData, []),
+    (m2m_obj, 446, M2MSelfData, []),
+
+    (data_obj, 500, Anchor, "Anchor 3"),
+    (data_obj, 501, Anchor, "Anchor 4"),
+
+    (pk_obj, 601, BooleanPKData, True),
+    (pk_obj, 602, BooleanPKData, False),
+    (pk_obj, 610, CharPKData, "Test Char PKData"),
+#     (pk_obj, 620, DatePKData, datetime.date(2006,6,16)),
+#     (pk_obj, 630, DateTimePKData, datetime.datetime(2006,6,16,10,42,37)),
+    (pk_obj, 640, EmailPKData, "hovercraft at example.com"),
+    (pk_obj, 650, FilePKData, 'file:///foo/bar/whiz.txt'),
+    (pk_obj, 660, FilePathPKData, "/foo/bar/whiz.txt"),
+    (pk_obj, 670, FloatPKData, 12.345),
+    (pk_obj, 671, FloatPKData, -12.345),
+    (pk_obj, 672, FloatPKData, 0.0),
+    (pk_obj, 680, IntegerPKData, 123456789),
+    (pk_obj, 681, IntegerPKData, -123456789),
+    (pk_obj, 682, IntegerPKData, 0),
+#     (XX, ImagePKData
+    (pk_obj, 690, IPAddressPKData, "127.0.0.1"),
+    (pk_obj, 700, NullBooleanPKData, True),
+    (pk_obj, 701, NullBooleanPKData, False),
+    (pk_obj, 710, PhonePKData, "212-634-5789"),
+    (pk_obj, 720, PositiveIntegerPKData, 123456789),
+    (pk_obj, 730, PositiveSmallIntegerPKData, 12),
+    (pk_obj, 740, SlugPKData, "this-is-a-slug"),
+    (pk_obj, 750, SmallPKData, 12), 
+    (pk_obj, 751, SmallPKData, -12), 
+    (pk_obj, 752, SmallPKData, 0), 
+#     (pk_obj, 760, TextPKData, """This is a long piece of text.
+# It contains line breaks.
+# Several of them.
+# The end."""),
+#    (pk_obj, 770, TimePKData, datetime.time(10,42,37)),
+    (pk_obj, 780, USStatePKData, "MA"),
+#     (pk_obj, 790, XMLPKData, "<foo></foo>"),
+]
+    
+# Dynamically create serializer tests to ensure that all
+# registered serializers are automatically tested.
+class SerializerTests(unittest.TestCase):
+    pass
+
+def serializerTest(format, self):
+    # Clear the database first
+    management.flush(verbosity=0, interactive=False)    
+
+    # Create all the objects defined in the test data
+    objects = []
+    transaction.enter_transaction_management()
+    transaction.managed(True)
+    for (func, pk, klass, datum) in test_data:
+        objects.append(func[0](pk, klass, datum))
+    transaction.commit()
+    transaction.leave_transaction_management()
+
+    # Add the generic tagged objects to the object list 
+    objects.extend(Tag.objects.all())
+    
+    # Serialize the test database
+    serialized_data = serializers.serialize(format, objects, indent=2)
+
+    # Flush the database and recreate from the serialized data
+    management.flush(verbosity=0, interactive=False)    
+    transaction.enter_transaction_management()
+    transaction.managed(True)
+    for obj in serializers.deserialize(format, serialized_data):
+        obj.save()
+    transaction.commit()
+    transaction.leave_transaction_management()
+
+    # Assert that the deserialized data is the same 
+    # as the original source
+    for (func, pk, klass, datum) in test_data:
+        func[1](self, pk, klass, datum)
+    
+for format in serializers.get_serializer_formats():
+    setattr(SerializerTests, 'test_'+format+'_serializer', curry(serializerTest, format))

Modified: vendor/django/current/tests/regressiontests/string_lookup/models.py
===================================================================
--- vendor/django/current/tests/regressiontests/string_lookup/models.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/string_lookup/models.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -34,7 +34,7 @@
     def __str__(self):
         return "Base %s" % self.name
 
-API_TESTS = """
+__test__ = {'API_TESTS':"""
 # Regression test for #1661 and #1662: Check that string form referencing of models works, 
 # both as pre and post reference, on all RelatedField types.
 
@@ -66,4 +66,4 @@
 
 >>> child1.parent
 <Base: Base Base1>
-"""
+"""}

Added: vendor/django/current/tests/regressiontests/templates/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/templates/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/templates/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/templates/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/templates/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,757 @@
+# -*- coding: utf-8 -*-
+from django.conf import settings
+
+if __name__ == '__main__':
+    # When running this file in isolation, we need to set up the configuration
+    # before importing 'template'.
+    settings.configure()
+
+from django import template
+from django.template import loader
+from django.utils.translation import activate, deactivate, install
+from django.utils.tzinfo import LocalTimezone
+from datetime import datetime, timedelta
+import unittest
+
+#################################
+# Custom template tag for tests #
+#################################
+
+register = template.Library()
+
+class EchoNode(template.Node):
+    def __init__(self, contents):
+        self.contents = contents
+
+    def render(self, context):
+        return " ".join(self.contents)
+
+def do_echo(parser, token):
+    return EchoNode(token.contents.split()[1:])
+
+register.tag("echo", do_echo)
+
+template.libraries['django.templatetags.testtags'] = register
+
+#####################################
+# Helper objects for template tests #
+#####################################
+
+class SomeException(Exception):
+    silent_variable_failure = True
+
+class SomeOtherException(Exception):
+    pass
+
+class SomeClass:
+    def __init__(self):
+        self.otherclass = OtherClass()
+
+    def method(self):
+        return "SomeClass.method"
+
+    def method2(self, o):
+        return o
+
+    def method3(self):
+        raise SomeException
+
+    def method4(self):
+        raise SomeOtherException
+
+class OtherClass:
+    def method(self):
+        return "OtherClass.method"
+
+class UnicodeInStrClass:
+    "Class whose __str__ returns a Unicode object."
+    def __str__(self):
+        return u'ŠĐĆŽćžšđ'
+
+class Templates(unittest.TestCase):
+    def test_templates(self):
+        # NOW and NOW_tz are used by timesince tag tests.
+        NOW = datetime.now()
+        NOW_tz = datetime.now(LocalTimezone(datetime.now()))
+
+        # SYNTAX --
+        # 'template_name': ('template contents', 'context dict', 'expected string output' or Exception class)
+        TEMPLATE_TESTS = {
+
+            ### BASIC SYNTAX ##########################################################
+
+            # Plain text should go through the template parser untouched
+            'basic-syntax01': ("something cool", {}, "something cool"),
+
+            # Variables should be replaced with their value in the current context
+            'basic-syntax02': ("{{ headline }}", {'headline':'Success'}, "Success"),
+
+            # More than one replacement variable is allowed in a template
+            'basic-syntax03': ("{{ first }} --- {{ second }}", {"first" : 1, "second" : 2}, "1 --- 2"),
+
+            # Fail silently when a variable is not found in the current context
+            'basic-syntax04': ("as{{ missing }}df", {}, ("asdf","asINVALIDdf")),
+
+            # A variable may not contain more than one word
+            'basic-syntax06': ("{{ multi word variable }}", {}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError for empty variable tags
+            'basic-syntax07': ("{{ }}",        {}, template.TemplateSyntaxError),
+            'basic-syntax08': ("{{        }}", {}, template.TemplateSyntaxError),
+
+            # Attribute syntax allows a template to call an object's attribute
+            'basic-syntax09': ("{{ var.method }}", {"var": SomeClass()}, "SomeClass.method"),
+
+            # Multiple levels of attribute access are allowed
+            'basic-syntax10': ("{{ var.otherclass.method }}", {"var": SomeClass()}, "OtherClass.method"),
+
+            # Fail silently when a variable's attribute isn't found
+            'basic-syntax11': ("{{ var.blech }}", {"var": SomeClass()}, ("","INVALID")),
+
+            # Raise TemplateSyntaxError when trying to access a variable beginning with an underscore
+            'basic-syntax12': ("{{ var.__dict__ }}", {"var": SomeClass()}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError when trying to access a variable containing an illegal character
+            'basic-syntax13': ("{{ va>r }}", {}, template.TemplateSyntaxError),
+            'basic-syntax14': ("{{ (var.r) }}", {}, template.TemplateSyntaxError),
+            'basic-syntax15': ("{{ sp%am }}", {}, template.TemplateSyntaxError),
+            'basic-syntax16': ("{{ eggs! }}", {}, template.TemplateSyntaxError),
+            'basic-syntax17': ("{{ moo? }}", {}, template.TemplateSyntaxError),
+
+            # Attribute syntax allows a template to call a dictionary key's value
+            'basic-syntax18': ("{{ foo.bar }}", {"foo" : {"bar" : "baz"}}, "baz"),
+
+            # Fail silently when a variable's dictionary key isn't found
+            'basic-syntax19': ("{{ foo.spam }}", {"foo" : {"bar" : "baz"}}, ("","INVALID")),
+
+            # Fail silently when accessing a non-simple method
+            'basic-syntax20': ("{{ var.method2 }}", {"var": SomeClass()}, ("","INVALID")),
+
+            # 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"),
+
+            # Fail silently when the list index is out of range.
+            'list-index02': ("{{ var.5 }}", {"var": ["first item", "second item"]}, ("", "INVALID")),
+
+            # Fail silently when the variable is not a subscriptable object.
+            'list-index03': ("{{ var.1 }}", {"var": None}, ("", "INVALID")),
+
+            # Fail silently when variable is a dict without the specified key.
+            'list-index04': ("{{ var.1 }}", {"var": {}}, ("", "INVALID")),
+
+            # Dictionary lookup wins out when dict's key is a string.
+            'list-index05': ("{{ var.1 }}", {"var": {'1': "hello"}}, "hello"),
+
+            # But list-index lookup wins out when dict's key is an int, which
+            # behind the scenes is really a dictionary lookup (for a dict)
+            # after converting the key to an int.
+            'list-index06': ("{{ var.1 }}", {"var": {1: "hello"}}, "hello"),
+
+            # Dictionary lookup wins out when there is a string and int version of the key.
+            'list-index07': ("{{ var.1 }}", {"var": {'1': "hello", 1: "world"}}, "hello"),
+            
+            # Basic filter usage
+            'basic-syntax21': ("{{ var|upper }}", {"var": "Django is the greatest!"}, "DJANGO IS THE GREATEST!"),
+
+            # Chained filters
+            'basic-syntax22': ("{{ var|upper|lower }}", {"var": "Django is the greatest!"}, "django is the greatest!"),
+
+            # Raise TemplateSyntaxError for space between a variable and filter pipe
+            'basic-syntax23': ("{{ var |upper }}", {}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError for space after a filter pipe
+            'basic-syntax24': ("{{ var| upper }}", {}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError for a nonexistent filter
+            'basic-syntax25': ("{{ var|does_not_exist }}", {}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError when trying to access a filter containing an illegal character
+            'basic-syntax26': ("{{ var|fil(ter) }}", {}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError for invalid block tags
+            'basic-syntax27': ("{% nothing_to_see_here %}", {}, template.TemplateSyntaxError),
+
+            # Raise TemplateSyntaxError for empty block tags
+            'basic-syntax28': ("{% %}", {}, template.TemplateSyntaxError),
+
+            # Chained filters, with an argument to the first one
+            'basic-syntax29': ('{{ var|removetags:"b i"|upper|lower }}', {"var": "<b><i>Yes</i></b>"}, "yes"),
+
+            # Escaped string as argument
+            'basic-syntax30': (r'{{ var|default_if_none:" endquote\" hah" }}', {"var": None}, ' endquote" hah'),
+
+            # Variable as argument
+            'basic-syntax31': (r'{{ var|default_if_none:var2 }}', {"var": None, "var2": "happy"}, 'happy'),
+
+            # Default argument testing
+            'basic-syntax32': (r'{{ var|yesno:"yup,nup,mup" }} {{ var|yesno }}', {"var": True}, 'yup yes'),
+
+            # Fail silently for methods that raise an exception with a "silent_variable_failure" attribute
+            'basic-syntax33': (r'1{{ var.method3 }}2', {"var": SomeClass()}, ("12", "1INVALID2")),
+
+            # In methods that raise an exception without a "silent_variable_attribute" set to True,
+            # the exception propagates
+            'basic-syntax34': (r'1{{ var.method4 }}2', {"var": SomeClass()}, SomeOtherException),
+
+            # Escaped backslash in argument
+            'basic-syntax35': (r'{{ var|default_if_none:"foo\bar" }}', {"var": None}, r'foo\bar'),
+
+            # Escaped backslash using known escape char
+            'basic-syntax35': (r'{{ var|default_if_none:"foo\now" }}', {"var": None}, r'foo\now'),
+
+            # Empty strings can be passed as arguments to filters
+            'basic-syntax36': (r'{{ var|join:"" }}', {'var': ['a', 'b', 'c']}, 'abc'),
+
+            # If a variable has a __str__() that returns a Unicode object, the value
+            # will be converted to a bytestring.
+            'basic-syntax37': (r'{{ var }}', {'var': UnicodeInStrClass()}, '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91'),
+
+            ### COMMENT SYNTAX ########################################################
+            'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
+            'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"),
+
+            # Comments can contain invalid stuff.
+            'comment-syntax03': ("foo{#  {% if %}  #}", {}, "foo"),
+            'comment-syntax04': ("foo{#  {% endblock %}  #}", {}, "foo"),
+            'comment-syntax05': ("foo{#  {% somerandomtag %}  #}", {}, "foo"),
+            'comment-syntax06': ("foo{# {% #}", {}, "foo"),
+            'comment-syntax07': ("foo{# %} #}", {}, "foo"),
+            'comment-syntax08': ("foo{# %} #}bar", {}, "foobar"),
+            'comment-syntax09': ("foo{# {{ #}", {}, "foo"),
+            'comment-syntax10': ("foo{# }} #}", {}, "foo"),
+            'comment-syntax11': ("foo{# { #}", {}, "foo"),
+            'comment-syntax12': ("foo{# } #}", {}, "foo"),
+
+            ### COMMENT TAG ###########################################################
+            'comment-tag01': ("{% comment %}this is hidden{% endcomment %}hello", {}, "hello"),
+            'comment-tag02': ("{% comment %}this is hidden{% endcomment %}hello{% comment %}foo{% endcomment %}", {}, "hello"),
+
+            # Comment tag can contain invalid stuff.
+            'comment-tag03': ("foo{% comment %} {% if %} {% endcomment %}", {}, "foo"),
+            'comment-tag04': ("foo{% comment %} {% endblock %} {% endcomment %}", {}, "foo"),
+            'comment-tag05': ("foo{% comment %} {% somerandomtag %} {% endcomment %}", {}, "foo"),
+
+            ### CYCLE TAG #############################################################
+            'cycle01': ('{% cycle a %}', {}, template.TemplateSyntaxError),
+            'cycle02': ('{% cycle a,b,c as abc %}{% cycle abc %}', {}, 'ab'),
+            'cycle03': ('{% cycle a,b,c as abc %}{% cycle abc %}{% cycle abc %}', {}, 'abc'),
+            'cycle04': ('{% cycle a,b,c as abc %}{% cycle abc %}{% cycle abc %}{% cycle abc %}', {}, 'abca'),
+            'cycle05': ('{% cycle %}', {}, template.TemplateSyntaxError),
+            'cycle06': ('{% cycle a %}', {}, template.TemplateSyntaxError),
+            'cycle07': ('{% cycle a,b,c as foo %}{% cycle bar %}', {}, template.TemplateSyntaxError),
+            'cycle08': ('{% cycle a,b,c as foo %}{% cycle foo %}{{ foo }}{{ foo }}{% cycle foo %}{{ foo }}', {}, 'abbbcc'),
+
+            ### EXCEPTIONS ############################################################
+
+            # Raise exception for invalid template name
+            'exception01': ("{% extends 'nonexistent' %}", {}, template.TemplateSyntaxError),
+
+            # Raise exception for invalid template name (in variable)
+            'exception02': ("{% extends nonexistent %}", {}, template.TemplateSyntaxError),
+
+            # Raise exception for extra {% extends %} tags
+            'exception03': ("{% extends 'inheritance01' %}{% block first %}2{% endblock %}{% extends 'inheritance16' %}", {}, template.TemplateSyntaxError),
+
+            # Raise exception for custom tags used in child with {% load %} tag in parent, not in child
+            'exception04': ("{% extends 'inheritance17' %}{% block first %}{% echo 400 %}5678{% endblock %}", {}, template.TemplateSyntaxError),
+
+            ### FILTER TAG ############################################################
+            'filter01': ('{% filter upper %}{% endfilter %}', {}, ''),
+            'filter02': ('{% filter upper %}django{% endfilter %}', {}, 'DJANGO'),
+            'filter03': ('{% filter upper|lower %}django{% endfilter %}', {}, 'django'),
+
+            ### FIRSTOF TAG ###########################################################
+            'firstof01': ('{% firstof a b c %}', {'a':0,'b':0,'c':0}, ''),
+            'firstof02': ('{% firstof a b c %}', {'a':1,'b':0,'c':0}, '1'),
+            'firstof03': ('{% firstof a b c %}', {'a':0,'b':2,'c':0}, '2'),
+            'firstof04': ('{% firstof a b c %}', {'a':0,'b':0,'c':3}, '3'),
+            'firstof05': ('{% firstof a b c %}', {'a':1,'b':2,'c':3}, '1'),
+            'firstof06': ('{% firstof %}', {}, template.TemplateSyntaxError),
+
+            ### FOR TAG ###############################################################
+            'for-tag01': ("{% for val in values %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "123"),
+            'for-tag02': ("{% for val in values reversed %}{{ val }}{% endfor %}", {"values": [1, 2, 3]}, "321"),
+            'for-tag-vars01': ("{% for val in values %}{{ forloop.counter }}{% endfor %}", {"values": [6, 6, 6]}, "123"),
+            'for-tag-vars02': ("{% for val in values %}{{ forloop.counter0 }}{% endfor %}", {"values": [6, 6, 6]}, "012"),
+            'for-tag-vars03': ("{% for val in values %}{{ forloop.revcounter }}{% endfor %}", {"values": [6, 6, 6]}, "321"),
+            'for-tag-vars04': ("{% for val in values %}{{ forloop.revcounter0 }}{% endfor %}", {"values": [6, 6, 6]}, "210"),
+
+            ### IF TAG ################################################################
+            'if-tag01': ("{% if foo %}yes{% else %}no{% endif %}", {"foo": True}, "yes"),
+            'if-tag02': ("{% if foo %}yes{% else %}no{% endif %}", {"foo": False}, "no"),
+            'if-tag03': ("{% if foo %}yes{% else %}no{% endif %}", {}, "no"),
+
+            # AND
+            'if-tag-and01': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+            'if-tag-and02': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+            'if-tag-and03': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+            'if-tag-and04': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+            'if-tag-and05': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False}, 'no'),
+            'if-tag-and06': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'bar': False}, 'no'),
+            'if-tag-and07': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True}, 'no'),
+            'if-tag-and08': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'bar': True}, 'no'),
+
+            # OR
+            'if-tag-or01': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+            'if-tag-or02': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+            'if-tag-or03': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+            'if-tag-or04': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+            'if-tag-or05': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False}, 'no'),
+            'if-tag-or06': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': False}, 'no'),
+            'if-tag-or07': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True}, 'yes'),
+            'if-tag-or08': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': True}, 'yes'),
+
+            # TODO: multiple ORs
+
+            # NOT
+            'if-tag-not01': ("{% if not foo %}no{% else %}yes{% endif %}", {'foo': True}, 'yes'),
+            'if-tag-not02': ("{% if not %}yes{% else %}no{% endif %}", {'foo': True}, 'no'),
+            'if-tag-not03': ("{% if not %}yes{% else %}no{% endif %}", {'not': True}, 'yes'),
+            'if-tag-not04': ("{% if not not %}no{% else %}yes{% endif %}", {'not': True}, 'yes'),
+            'if-tag-not05': ("{% if not not %}no{% else %}yes{% endif %}", {}, 'no'),
+
+            'if-tag-not06': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {}, 'no'),
+            'if-tag-not07': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+            'if-tag-not08': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+            'if-tag-not09': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+            'if-tag-not10': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+
+            'if-tag-not11': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {}, 'no'),
+            'if-tag-not12': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+            'if-tag-not13': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+            'if-tag-not14': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+            'if-tag-not15': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+
+            'if-tag-not16': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+            'if-tag-not17': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+            'if-tag-not18': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+            'if-tag-not19': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+            'if-tag-not20': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+            'if-tag-not21': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+            'if-tag-not22': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+            'if-tag-not23': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+            'if-tag-not24': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+            'if-tag-not25': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+            'if-tag-not26': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+            'if-tag-not27': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+            'if-tag-not28': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+            'if-tag-not29': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+            'if-tag-not30': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+            'if-tag-not31': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+            'if-tag-not32': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+            'if-tag-not33': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+            'if-tag-not34': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+            'if-tag-not35': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+            # AND and OR raises a TemplateSyntaxError
+            'if-tag-error01': ("{% if foo or bar and baz %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, template.TemplateSyntaxError),
+            'if-tag-error02': ("{% if foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+            'if-tag-error03': ("{% if foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+            'if-tag-error04': ("{% if not foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+            'if-tag-error05': ("{% if not foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+
+            ### IFCHANGED TAG #########################################################
+            'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,2,3) }, '123'),
+            'ifchanged02': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,3) }, '13'),
+            'ifchanged03': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,1) }, '1'),
+            'ifchanged04': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 2, 3), 'numx': (2, 2, 2)}, '122232'),
+            'ifchanged05': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (1, 2, 3)}, '1123123123'),
+            'ifchanged06': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2)}, '1222'),
+            'ifchanged07': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% for y in numy %}{% ifchanged %}{{ y }}{% endifchanged %}{% endfor %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2), 'numy': (3, 3, 3)}, '1233323332333'),
+
+            # Test one parameter given to ifchanged.
+            'ifchanged-param01': ('{% for n in num %}{% ifchanged n %}..{% endifchanged %}{{ n }}{% endfor %}', { 'num': (1,2,3) }, '..1..2..3'),
+            'ifchanged-param02': ('{% for n in num %}{% for x in numx %}{% ifchanged n %}..{% endifchanged %}{{ x }}{% endfor %}{% endfor %}', { 'num': (1,2,3), 'numx': (5,6,7) }, '..567..567..567'),
+
+            # Test multiple parameters to ifchanged.
+            'ifchanged-param03': ('{% for n in num %}{{ n }}{% for x in numx %}{% ifchanged x n %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1,1,2), 'numx': (5,6,6) }, '156156256'),
+
+            # Test a date+hour like construct, where the hour of the last day
+            # is the same but the date had changed, so print the hour anyway.
+            'ifchanged-param04': ('{% for d in days %}{% ifchanged %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},] }, '112323'),
+
+            # Logically the same as above, just written with explicit
+            # ifchanged for the day.
+            'ifchanged-param04': ('{% for d in days %}{% ifchanged d.day %}{{ d.day }}{% endifchanged %}{% for h in d.hours %}{% ifchanged d.day h %}{{ h }}{% endifchanged %}{% endfor %}{% endfor %}', {'days':[{'day':1, 'hours':[1,2,3]},{'day':2, 'hours':[3]},] }, '112323'),
+
+            ### IFEQUAL TAG ###########################################################
+            'ifequal01': ("{% ifequal a b %}yes{% endifequal %}", {"a": 1, "b": 2}, ""),
+            'ifequal02': ("{% ifequal a b %}yes{% endifequal %}", {"a": 1, "b": 1}, "yes"),
+            'ifequal03': ("{% ifequal a b %}yes{% else %}no{% endifequal %}", {"a": 1, "b": 2}, "no"),
+            'ifequal04': ("{% ifequal a b %}yes{% else %}no{% endifequal %}", {"a": 1, "b": 1}, "yes"),
+            'ifequal05': ("{% ifequal a 'test' %}yes{% else %}no{% endifequal %}", {"a": "test"}, "yes"),
+            'ifequal06': ("{% ifequal a 'test' %}yes{% else %}no{% endifequal %}", {"a": "no"}, "no"),
+            'ifequal07': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {"a": "test"}, "yes"),
+            'ifequal08': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {"a": "no"}, "no"),
+            'ifequal09': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {}, "no"),
+            'ifequal10': ('{% ifequal a b %}yes{% else %}no{% endifequal %}', {}, "yes"),
+
+            # SMART SPLITTING
+            'ifequal-split01': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {}, "no"),
+            'ifequal-split02': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {'a': 'foo'}, "no"),
+            'ifequal-split03': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {'a': 'test man'}, "yes"),
+            'ifequal-split04': ("{% ifequal a 'test man' %}yes{% else %}no{% endifequal %}", {'a': 'test man'}, "yes"),
+            'ifequal-split05': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': ''}, "no"),
+            'ifequal-split06': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': 'i "love" you'}, "yes"),
+            'ifequal-split07': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': 'i love you'}, "no"),
+            'ifequal-split08': (r"{% ifequal a 'I\'m happy' %}yes{% else %}no{% endifequal %}", {'a': "I'm happy"}, "yes"),
+            'ifequal-split09': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slash\man"}, "yes"),
+            'ifequal-split10': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slashman"}, "no"),
+
+            # NUMERIC RESOLUTION
+            'ifequal-numeric01': ('{% ifequal x 5 %}yes{% endifequal %}', {'x': '5'}, ''),
+            'ifequal-numeric02': ('{% ifequal x 5 %}yes{% endifequal %}', {'x': 5}, 'yes'),
+            'ifequal-numeric03': ('{% ifequal x 5.2 %}yes{% endifequal %}', {'x': 5}, ''),
+            'ifequal-numeric04': ('{% ifequal x 5.2 %}yes{% endifequal %}', {'x': 5.2}, 'yes'),
+            'ifequal-numeric05': ('{% ifequal x 0.2 %}yes{% endifequal %}', {'x': .2}, 'yes'),
+            'ifequal-numeric06': ('{% ifequal x .2 %}yes{% endifequal %}', {'x': .2}, 'yes'),
+            'ifequal-numeric07': ('{% ifequal x 2. %}yes{% endifequal %}', {'x': 2}, ''),
+            'ifequal-numeric08': ('{% ifequal x "5" %}yes{% endifequal %}', {'x': 5}, ''),
+            'ifequal-numeric09': ('{% ifequal x "5" %}yes{% endifequal %}', {'x': '5'}, 'yes'),
+            'ifequal-numeric10': ('{% ifequal x -5 %}yes{% endifequal %}', {'x': -5}, 'yes'),
+            'ifequal-numeric11': ('{% ifequal x -5.2 %}yes{% endifequal %}', {'x': -5.2}, 'yes'),
+            'ifequal-numeric12': ('{% ifequal x +5 %}yes{% endifequal %}', {'x': 5}, 'yes'),
+
+            ### IFNOTEQUAL TAG ########################################################
+            'ifnotequal01': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 2}, "yes"),
+            'ifnotequal02': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 1}, ""),
+            'ifnotequal03': ("{% ifnotequal a b %}yes{% else %}no{% endifnotequal %}", {"a": 1, "b": 2}, "yes"),
+            'ifnotequal04': ("{% ifnotequal a b %}yes{% else %}no{% endifnotequal %}", {"a": 1, "b": 1}, "no"),
+
+            ### INCLUDE TAG ###########################################################
+            'include01': ('{% include "basic-syntax01" %}', {}, "something cool"),
+            'include02': ('{% include "basic-syntax02" %}', {'headline': 'Included'}, "Included"),
+            'include03': ('{% include template_name %}', {'template_name': 'basic-syntax02', 'headline': 'Included'}, "Included"),
+            'include04': ('a{% include "nonexistent" %}b', {}, "ab"),
+
+            ### NAMED ENDBLOCKS #######################################################
+
+            # Basic test
+            'namedendblocks01': ("1{% block first %}_{% block second %}2{% endblock second %}_{% endblock first %}3", {}, '1_2_3'),
+
+            # Unbalanced blocks
+            'namedendblocks02': ("1{% block first %}_{% block second %}2{% endblock first %}_{% endblock second %}3", {}, template.TemplateSyntaxError),
+            'namedendblocks03': ("1{% block first %}_{% block second %}2{% endblock %}_{% endblock second %}3", {}, template.TemplateSyntaxError),
+            'namedendblocks04': ("1{% block first %}_{% block second %}2{% endblock second %}_{% endblock third %}3", {}, template.TemplateSyntaxError),
+            'namedendblocks05': ("1{% block first %}_{% block second %}2{% endblock first %}", {}, template.TemplateSyntaxError),
+
+            # Mixed named and unnamed endblocks
+            'namedendblocks06': ("1{% block first %}_{% block second %}2{% endblock %}_{% endblock first %}3", {}, '1_2_3'),
+            'namedendblocks07': ("1{% block first %}_{% block second %}2{% endblock second %}_{% endblock %}3", {}, '1_2_3'),
+
+            ### INHERITANCE ###########################################################
+
+            # Standard template with no inheritance
+            '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'),
+
+            # Three-level with no redefinitions on third level
+            'inheritance03': ("{% extends 'inheritance02' %}", {}, '1234'),
+
+            # Two-level with no redefinitions on second level
+            'inheritance04': ("{% extends 'inheritance01' %}", {}, '1_3_'),
+
+            # Two-level with double quotes instead of single quotes
+            'inheritance05': ('{% extends "inheritance02" %}', {}, '1234'),
+
+            # Three-level with variable parent-template name
+            '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'),
+
+            # 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_'),
+
+            # Three-level with space NOT in a block -- should be ignored
+            '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'),
+
+            # Three-level with this level providing one and second level providing the other
+            'inheritance12': ("{% extends 'inheritance07' %}{% block first %}2{% endblock %}", {}, '1235'),
+
+            # Three-level with this level overriding second level
+            '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_'),
+
+            # A block within another block
+            'inheritance15': ("{% extends 'inheritance01' %}{% block first %}2{% block inner %}inner{% endblock %}{% endblock %}", {}, '12inner3_'),
+
+            # A block within another block (level 2)
+            'inheritance16': ("{% extends 'inheritance15' %}{% block inner %}out{% endblock %}", {}, '12out3_'),
+
+            # {% load %} tag (parent -- setup for exception04)
+            'inheritance17': ("{% load testtags %}{% block first %}1234{% endblock %}", {}, '1234'),
+
+            # {% load %} tag (standard usage, without inheritance)
+            'inheritance18': ("{% load testtags %}{% echo this that theother %}5678", {}, 'this that theother5678'),
+
+            # {% load %} tag (within a child template)
+            '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_'),
+
+            # 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_'),
+
+            # Three-level inheritance with {{ block.super }} from parent and grandparent
+            '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'),
+
+            # Inheritance from local context with variable parent template
+            'inheritance25': ("{% extends context_template.1 %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {'context_template': [template.Template("Wrong"), template.Template("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}")]}, '1234'),
+
+            ### I18N ##################################################################
+
+            # {% spaceless %} tag
+            'spaceless01': ("{% spaceless %} <b>    <i> text </i>    </b> {% endspaceless %}", {}, "<b> <i> text </i> </b>"),
+            'spaceless02': ("{% spaceless %} <b> \n <i> text </i> \n </b> {% endspaceless %}", {}, "<b> <i> text </i> </b>"),
+            'spaceless03': ("{% spaceless %}<b><i>text</i></b>{% endspaceless %}", {}, "<b><i>text</i></b>"),
+
+            # simple translation of a string delimited by '
+            'i18n01': ("{% load i18n %}{% trans 'xxxyyyxxx' %}", {}, "xxxyyyxxx"),
+
+            # simple translation of a string delimited by "
+            'i18n02': ('{% load i18n %}{% trans "xxxyyyxxx" %}', {}, "xxxyyyxxx"),
+
+            # simple translation of a variable
+            'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': 'xxxyyyxxx'}, "xxxyyyxxx"),
+
+            # simple translation of a variable and filter
+            'i18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'XXXYYYXXX'}, "xxxyyyxxx"),
+
+            # simple translation of a string with interpolation
+            'i18n05': ('{% load i18n %}{% blocktrans %}xxx{{ anton }}xxx{% endblocktrans %}', {'anton': 'yyy'}, "xxxyyyxxx"),
+
+            # simple translation of a string to german
+            '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"),
+
+            # translation of plural form
+            'i18n08': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}plural{% endblocktrans %}', {'number': 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"),
+
+            # translation of a variable with a translated filter
+            'i18n10': ('{{ bool|yesno:_("ja,nein") }}', {'bool': True}, 'ja'),
+
+            # translation of a variable with a non-translated filter
+            'i18n11': ('{{ bool|yesno:"ja,nein" }}', {'bool': True}, 'ja'),
+
+            # 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'),
+
+            ### HANDLING OF TEMPLATE_TAG_IF_INVALID ###################################
+
+            'invalidstr01': ('{{ var|default:"Foo" }}', {}, ('Foo','INVALID')),
+            'invalidstr02': ('{{ var|default_if_none:"Foo" }}', {}, ('','INVALID')),
+            'invalidstr03': ('{% for v in var %}({{ v }}){% endfor %}', {}, ''),
+            'invalidstr04': ('{% if var %}Yes{% else %}No{% endif %}', {}, 'No'),
+            'invalidstr04': ('{% if var|default:"Foo" %}Yes{% else %}No{% endif %}', {}, 'Yes'),
+
+            ### MULTILINE #############################################################
+
+            'multiline01': ("""
+                            Hello,
+                            boys.
+                            How
+                            are
+                            you
+                            gentlemen.
+                            """,
+                            {},
+                            """
+                            Hello,
+                            boys.
+                            How
+                            are
+                            you
+                            gentlemen.
+                            """),
+
+            ### REGROUP TAG ###########################################################
+            'regroup01': ('{% regroup data by bar as grouped %}' + \
+                          '{% for group in grouped %}' + \
+                          '{{ group.grouper }}:' + \
+                          '{% for item in group.list %}' + \
+                          '{{ item.foo }}' + \
+                          '{% endfor %},' + \
+                          '{% endfor %}',
+                          {'data': [ {'foo':'c', 'bar':1},
+                                     {'foo':'d', 'bar':1},
+                                     {'foo':'a', 'bar':2},
+                                     {'foo':'b', 'bar':2},
+                                     {'foo':'x', 'bar':3}  ]},
+                          '1:cd,2:ab,3:x,'),
+
+            # Test for silent failure when target variable isn't found
+            'regroup02': ('{% regroup data by bar as grouped %}' + \
+                          '{% for group in grouped %}' + \
+                          '{{ group.grouper }}:' + \
+                          '{% for item in group.list %}' + \
+                          '{{ item.foo }}' + \
+                          '{% endfor %},' + \
+                          '{% endfor %}',
+                          {}, ''),
+
+            ### TEMPLATETAG TAG #######################################################
+            'templatetag01': ('{% templatetag openblock %}', {}, '{%'),
+            'templatetag02': ('{% templatetag closeblock %}', {}, '%}'),
+            'templatetag03': ('{% templatetag openvariable %}', {}, '{{'),
+            'templatetag04': ('{% templatetag closevariable %}', {}, '}}'),
+            'templatetag05': ('{% templatetag %}', {}, template.TemplateSyntaxError),
+            'templatetag06': ('{% templatetag foo %}', {}, template.TemplateSyntaxError),
+            'templatetag07': ('{% templatetag openbrace %}', {}, '{'),
+            'templatetag08': ('{% templatetag closebrace %}', {}, '}'),
+            'templatetag09': ('{% templatetag openbrace %}{% templatetag openbrace %}', {}, '{{'),
+            'templatetag10': ('{% templatetag closebrace %}{% templatetag closebrace %}', {}, '}}'),
+            'templatetag11': ('{% templatetag opencomment %}', {}, '{#'),
+            'templatetag12': ('{% templatetag closecomment %}', {}, '#}'),
+
+            ### WIDTHRATIO TAG ########################################################
+            'widthratio01': ('{% widthratio a b 0 %}', {'a':50,'b':100}, '0'),
+            'widthratio02': ('{% widthratio a b 100 %}', {'a':0,'b':0}, ''),
+            'widthratio03': ('{% widthratio a b 100 %}', {'a':0,'b':100}, '0'),
+            'widthratio04': ('{% widthratio a b 100 %}', {'a':50,'b':100}, '50'),
+            'widthratio05': ('{% widthratio a b 100 %}', {'a':100,'b':100}, '100'),
+
+            # 62.5 should round to 63
+            'widthratio06': ('{% widthratio a b 100 %}', {'a':50,'b':80}, '63'),
+
+            # 71.4 should round to 71
+            'widthratio07': ('{% widthratio a b 100 %}', {'a':50,'b':70}, '71'),
+
+            # Raise exception if we don't have 3 args, last one an integer
+            'widthratio08': ('{% widthratio %}', {}, template.TemplateSyntaxError),
+            'widthratio09': ('{% widthratio a b %}', {'a':50,'b':100}, template.TemplateSyntaxError),
+            'widthratio10': ('{% widthratio a b 100.0 %}', {'a':50,'b':100}, template.TemplateSyntaxError),
+
+            ### NOW TAG ########################################################
+            # Simple case
+            'now01' : ('{% now "j n Y"%}', {}, str(datetime.now().day) + ' ' + str(datetime.now().month) + ' ' + str(datetime.now().year)),
+
+            # Check parsing of escaped and special characters
+            'now02' : ('{% now "j "n" Y"%}', {}, template.TemplateSyntaxError),
+        #    'now03' : ('{% now "j \"n\" Y"%}', {}, str(datetime.now().day) + '"' + str(datetime.now().month) + '"' + str(datetime.now().year)),
+        #    'now04' : ('{% now "j \nn\n Y"%}', {}, str(datetime.now().day) + '\n' + str(datetime.now().month) + '\n' + str(datetime.now().year))
+
+            ### TIMESINCE TAG ##################################################
+            # Default compare with datetime.now()
+            'timesince01' : ('{{ a|timesince }}', {'a':datetime.now() + timedelta(minutes=-1, seconds = -10)}, '1 minute'),
+            'timesince02' : ('{{ a|timesince }}', {'a':(datetime.now() - timedelta(days=1, minutes = 1))}, '1 day'),
+            'timesince03' : ('{{ a|timesince }}', {'a':(datetime.now() -
+                timedelta(hours=1, minutes=25, seconds = 10))}, '1 hour, 25 minutes'),
+
+            # Compare to a given parameter
+            'timesince04' : ('{{ a|timesince:b }}', {'a':NOW + timedelta(days=2), 'b':NOW + timedelta(days=1)}, '1 day'),
+            'timesince05' : ('{{ a|timesince:b }}', {'a':NOW + timedelta(days=2, minutes=1), 'b':NOW + timedelta(days=2)}, '1 minute'),
+
+            # Check that timezone is respected
+            'timesince06' : ('{{ a|timesince:b }}', {'a':NOW_tz + timedelta(hours=8), 'b':NOW_tz}, '8 hours'),
+
+            ### TIMEUNTIL TAG ##################################################
+            # Default compare with datetime.now()
+            'timeuntil01' : ('{{ a|timeuntil }}', {'a':datetime.now() + timedelta(minutes=2, seconds = 10)}, '2 minutes'),
+            'timeuntil02' : ('{{ a|timeuntil }}', {'a':(datetime.now() + timedelta(days=1, seconds = 10))}, '1 day'),
+            'timeuntil03' : ('{{ a|timeuntil }}', {'a':(datetime.now() + timedelta(hours=8, minutes=10, seconds = 10))}, '8 hours, 10 minutes'),
+
+            # Compare to a given parameter
+            'timeuntil04' : ('{{ a|timeuntil:b }}', {'a':NOW - timedelta(days=1), 'b':NOW - timedelta(days=2)}, '1 day'),
+            'timeuntil05' : ('{{ a|timeuntil:b }}', {'a':NOW - timedelta(days=2), 'b':NOW - timedelta(days=2, minutes=1)}, '1 minute'),
+
+            ### URL TAG ########################################################
+            # Successes
+            'url01' : ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),
+            'url02' : ('{% url regressiontests.templates.views.client_action client.id,action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
+            'url03' : ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'),
+
+            # Failures
+            'url04' : ('{% url %}', {}, template.TemplateSyntaxError),
+            'url05' : ('{% url no_such_view %}', {}, ''),
+            'url06' : ('{% url regressiontests.templates.views.client no_such_param="value" %}', {}, ''),
+        }
+
+        # Register our custom template loader.
+        def test_template_loader(template_name, template_dirs=None):
+            "A custom template loader that loads the unit-test templates."
+            try:
+                return (TEMPLATE_TESTS[template_name][0] , "test:%s" % template_name)
+            except KeyError:
+                raise template.TemplateDoesNotExist, template_name
+
+        old_template_loaders = loader.template_source_loaders
+        loader.template_source_loaders = [test_template_loader]
+
+        failures = []
+        tests = TEMPLATE_TESTS.items()
+        tests.sort()
+
+        # Turn TEMPLATE_DEBUG off, because tests assume that.
+        old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, False
+
+        # Set TEMPLATE_STRING_IF_INVALID to a known string
+        old_invalid = settings.TEMPLATE_STRING_IF_INVALID
+
+        for name, vals in tests:
+            install()
+
+            if isinstance(vals[2], tuple):
+                normal_string_result = vals[2][0]
+                invalid_string_result = vals[2][1]
+            else:
+                normal_string_result = vals[2]
+                invalid_string_result = vals[2]
+
+            if 'LANGUAGE_CODE' in vals[1]:
+                activate(vals[1]['LANGUAGE_CODE'])
+            else:
+                activate('en-us')
+
+            for invalid_str, result in [('', normal_string_result),
+                                        ('INVALID', invalid_string_result)]:
+                settings.TEMPLATE_STRING_IF_INVALID = invalid_str
+                try:
+                    output = loader.get_template(name).render(template.Context(vals[1]))
+                except Exception, e:
+                    if e.__class__ != result:
+                        failures.append("Template test (TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Got %s, exception: %s" % (invalid_str, name, e.__class__, e))
+                    continue
+                if output != result:
+                    failures.append("Template test (TEMPLATE_STRING_IF_INVALID='%s'): %s -- FAILED. Expected %r, got %r" % (invalid_str, name, result, output))
+
+            if 'LANGUAGE_CODE' in vals[1]:
+                deactivate()
+
+        loader.template_source_loaders = old_template_loaders
+        deactivate()
+        settings.TEMPLATE_DEBUG = old_td
+        settings.TEMPLATE_STRING_IF_INVALID = old_invalid
+
+        self.assertEqual(failures, [], '\n'.join(failures))
+
+if __name__ == "__main__":
+    unittest.main()

Added: vendor/django/current/tests/regressiontests/templates/urls.py
===================================================================
--- vendor/django/current/tests/regressiontests/templates/urls.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/templates/urls.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,10 @@
+from django.conf.urls.defaults import *
+from regressiontests.templates import views
+
+urlpatterns = patterns('',
+
+    # Test urls for testing reverse lookups
+    (r'^$', views.index),
+    (r'^client/(\d+)/$', views.client),
+    (r'^client/(\d+)/(?P<action>[^/]+)/$', views.client_action),
+)

Added: vendor/django/current/tests/regressiontests/templates/views.py
===================================================================
--- vendor/django/current/tests/regressiontests/templates/views.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/templates/views.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,10 @@
+# Fake views for testing url reverse lookup
+
+def index(request):
+    pass
+
+def client(request, id):
+    pass
+
+def client_action(request, id, action):
+    pass

Added: vendor/django/current/tests/regressiontests/urlpatterns_reverse/__init__.py
===================================================================

Added: vendor/django/current/tests/regressiontests/urlpatterns_reverse/models.py
===================================================================

Added: vendor/django/current/tests/regressiontests/urlpatterns_reverse/tests.py
===================================================================
--- vendor/django/current/tests/regressiontests/urlpatterns_reverse/tests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/regressiontests/urlpatterns_reverse/tests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,39 @@
+"Unit tests for reverse URL lookup"
+
+from django.core.urlresolvers import reverse_helper, NoReverseMatch
+import re, unittest
+
+test_data = (
+    ('^places/(\d+)/$', 'places/3/', [3], {}),
+    ('^places/(\d+)/$', 'places/3/', ['3'], {}),
+    ('^places/(\d+)/$', NoReverseMatch, ['a'], {}),
+    ('^places/(\d+)/$', NoReverseMatch, [], {}),
+    ('^places/(?P<id>\d+)/$', 'places/3/', [], {'id': 3}),
+    ('^people/(?P<name>\w+)/$', 'people/adrian/', ['adrian'], {}),
+    ('^people/(?P<name>\w+)/$', 'people/adrian/', [], {'name': 'adrian'}),
+    ('^people/(?P<name>\w+)/$', NoReverseMatch, ['name with spaces'], {}),
+    ('^people/(?P<name>\w+)/$', NoReverseMatch, [], {'name': 'name with spaces'}),
+    ('^people/(?P<name>\w+)/$', NoReverseMatch, [], {}),
+    ('^hardcoded/$', 'hardcoded/', [], {}),
+    ('^hardcoded/$', 'hardcoded/', ['any arg'], {}),
+    ('^hardcoded/$', 'hardcoded/', [], {'kwarg': 'foo'}),
+    ('^people/(?P<state>\w\w)/(?P<name>\w+)/$', 'people/il/adrian/', [], {'state': 'il', 'name': 'adrian'}),
+    ('^people/(?P<state>\w\w)/(?P<name>\d)/$', NoReverseMatch, [], {'state': 'il', 'name': 'adrian'}),
+    ('^people/(?P<state>\w\w)/(?P<name>\w+)/$', NoReverseMatch, [], {'state': 'il'}),
+    ('^people/(?P<state>\w\w)/(?P<name>\w+)/$', NoReverseMatch, [], {'name': 'adrian'}),
+    ('^people/(?P<state>\w\w)/(\w+)/$', NoReverseMatch, ['il'], {'name': 'adrian'}),
+    ('^people/(?P<state>\w\w)/(\w+)/$', 'people/il/adrian/', ['adrian'], {'state': 'il'}),
+)
+
+class URLPatternReverse(unittest.TestCase):
+    def test_urlpattern_reverse(self):
+        for regex, expected, args, kwargs in test_data:
+            try:
+                got = reverse_helper(re.compile(regex), *args, **kwargs)
+            except NoReverseMatch, e:
+                self.assertEqual(expected, NoReverseMatch)
+            else:
+                self.assertEquals(got, expected)
+
+if __name__ == "__main__":
+    run_tests(1)

Modified: vendor/django/current/tests/runtests.py
===================================================================
--- vendor/django/current/tests/runtests.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/runtests.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -1,24 +1,13 @@
 #!/usr/bin/env python
 
-import os, re, sys, time, traceback
+import os, sys, traceback
+import unittest
 
-# doctest is included in the same package as this module, because this testing
-# framework uses features only available in the Python 2.4 version of doctest,
-# and Django aims to work with Python 2.3+.
-import doctest
-
 MODEL_TESTS_DIR_NAME = 'modeltests'
-OTHER_TESTS_DIR = "othertests"
 REGRESSION_TESTS_DIR_NAME = 'regressiontests'
 TEST_DATABASE_NAME = 'django_test_db'
+TEST_TEMPLATE_DIR = 'templates'
 
-error_list = []
-def log_error(model_name, title, description):
-    error_list.append({
-        'title': "%r module: %s" % (model_name, title),
-        'description': description,
-    })
-
 MODEL_TEST_DIR = os.path.join(os.path.dirname(__file__), MODEL_TESTS_DIR_NAME)
 REGRESSION_TEST_DIR = os.path.join(os.path.dirname(__file__), REGRESSION_TESTS_DIR_NAME)
 
@@ -37,258 +26,129 @@
     models = []
     for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR):
         for f in os.listdir(dirpath):
-            if f.startswith('__init__') or f.startswith('.') or f.startswith('sql'):
+            if f.startswith('__init__') or f.startswith('.') or f.startswith('sql') or f.startswith('invalid'):
                 continue
             models.append((loc, f))
     return models
 
-class DjangoDoctestRunner(doctest.DocTestRunner):
-    def __init__(self, verbosity_level, *args, **kwargs):
-        self.verbosity_level = verbosity_level
-        doctest.DocTestRunner.__init__(self, *args, **kwargs)
-        self._checker = DjangoDoctestOutputChecker()
-        self.optionflags = doctest.ELLIPSIS
+def get_invalid_models():
+    models = []
+    for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR):
+        for f in os.listdir(dirpath):
+            if f.startswith('__init__') or f.startswith('.') or f.startswith('sql'):
+                continue
+            if f.startswith('invalid'):
+                models.append((loc, f))
+    return models
 
-    def report_start(self, out, test, example):
-        if self.verbosity_level > 1:
-            out("  >>> %s\n" % example.source.strip())
+class InvalidModelTestCase(unittest.TestCase):
+    def __init__(self, model_label):
+        unittest.TestCase.__init__(self)
+        self.model_label = model_label
 
-    def report_failure(self, out, test, example, got):
-        log_error(test.name, "API test failed",
-            "Code: %r\nLine: %s\nExpected: %r\nGot: %r" % (example.source.strip(), example.lineno, example.want, got))
-
-    def report_unexpected_exception(self, out, test, example, exc_info):
-        from django.db import transaction
-        tb = ''.join(traceback.format_exception(*exc_info)[1:])
-        log_error(test.name, "API test raised an exception",
-            "Code: %r\nLine: %s\nException: %s" % (example.source.strip(), example.lineno, tb))
-        # Rollback, in case of database errors. Otherwise they'd have
-        # side effects on other tests.
-        transaction.rollback_unless_managed()
-
-normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
-
-class DjangoDoctestOutputChecker(doctest.OutputChecker):
-    def check_output(self, want, got, optionflags):
-        ok = doctest.OutputChecker.check_output(self, want, got, optionflags)
-
-        # Doctest does an exact string comparison of output, which means long
-        # integers aren't equal to normal integers ("22L" vs. "22"). The
-        # following code normalizes long integers so that they equal normal
-        # integers.
-        if not ok:
-            return normalize_long_ints(want) == normalize_long_ints(got)
-        return ok
-
-class TestRunner:
-    def __init__(self, verbosity_level=0, which_tests=None):
-        self.verbosity_level = verbosity_level
-        self.which_tests = which_tests
-
-    def output(self, required_level, message):
-        if self.verbosity_level > required_level - 1:
-            print message
-
-    def run_tests(self):
-        from django.conf import settings
-
-        # An empty access of the settings to force the default options to be
-        # installed prior to assigning to them.
-        settings.INSTALLED_APPS
-
-        # Manually set INSTALLED_APPS to point to the test models.
-        settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS + ['.'.join(a) for a in get_test_models()]
-
-        # Manually set DEBUG and USE_I18N.
-        settings.DEBUG = False
-        settings.USE_I18N = True
-
-        from django.db import connection
+    def runTest(self):
         from django.core import management
-        import django.db.models
+        from django.db.models.loading import load_app
+        from cStringIO import StringIO
 
-        # Determine which models we're going to test.
-        test_models = get_test_models()
-        if 'othertests' in self.which_tests:
-            self.which_tests.remove('othertests')
-            run_othertests = True
-            if not self.which_tests:
-                test_models = []
-        else:
-            run_othertests = not self.which_tests
+        try:
+            module = load_app(self.model_label)
+        except Exception, e:
+            self.fail('Unable to load invalid model module')
 
-        if self.which_tests:
-            # Only run the specified tests.
-            bad_models = [m for m in self.which_tests if (MODEL_TESTS_DIR_NAME, m) not in test_models and (REGRESSION_TESTS_DIR_NAME, m) not in test_models]
-            if bad_models:
-                sys.stderr.write("Models not found: %s\n" % bad_models)
-                sys.exit(1)
-            else:
-                all_tests = []
-                for test in self.which_tests:
-                    for loc in MODEL_TESTS_DIR_NAME, REGRESSION_TESTS_DIR_NAME:
-                        if (loc, test) in test_models:
-                            all_tests.append((loc, test))
-                test_models = all_tests
+        s = StringIO()
+        count = management.get_validation_errors(s, module)
+        s.seek(0)
+        error_log = s.read()
+        actual = error_log.split('\n')
+        expected = module.model_errors.split('\n')
 
-        self.output(0, "Running tests with database %r" % settings.DATABASE_ENGINE)
+        unexpected = [err for err in actual if err not in expected]
+        missing = [err for err in expected if err not in actual]
 
-        # If we're using SQLite, it's more convenient to test against an
-        # in-memory database.
-        if settings.DATABASE_ENGINE == "sqlite3":
-            global TEST_DATABASE_NAME
-            TEST_DATABASE_NAME = ":memory:"
-        else:
-            # Create the test database and connect to it. We need to autocommit
-            # if the database supports it because PostgreSQL doesn't allow
-            # CREATE/DROP DATABASE statements within transactions.
-            cursor = connection.cursor()
-            self._set_autocommit(connection)
-            self.output(1, "Creating test database")
-            try:
-                cursor.execute("CREATE DATABASE %s" % TEST_DATABASE_NAME)
-            except Exception, e:
-                sys.stderr.write("Got an error creating the test database: %s\n" % e)
-                confirm = raw_input("It appears the test database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_DATABASE_NAME)
-                if confirm == 'yes':
-                    cursor.execute("DROP DATABASE %s" % TEST_DATABASE_NAME)
-                    cursor.execute("CREATE DATABASE %s" % TEST_DATABASE_NAME)
-                else:
-                    print "Tests cancelled."
-                    return
-        connection.close()
-        old_database_name = settings.DATABASE_NAME
-        settings.DATABASE_NAME = TEST_DATABASE_NAME
+        self.assert_(not unexpected, "Unexpected Errors: " + '\n'.join(unexpected))
+        self.assert_(not missing, "Missing Errors: " + '\n'.join(missing))
 
-        # Initialize the test database.
-        cursor = connection.cursor()
+def django_tests(verbosity, tests_to_run):
+    from django.conf import settings
 
-        from django.db.models.loading import load_app
-        # Install the core always installed apps
-        for app in ALWAYS_INSTALLED_APPS:
-            self.output(1, "Installing contrib app %s" % app)
-            mod = load_app(app)
-            management.install(mod)
+    old_installed_apps = settings.INSTALLED_APPS
+    old_test_database_name = settings.TEST_DATABASE_NAME
+    old_root_urlconf = settings.ROOT_URLCONF
+    old_template_dirs = settings.TEMPLATE_DIRS
+    old_use_i18n = settings.USE_I18N
+    old_middleware_classes = settings.MIDDLEWARE_CLASSES
 
-        # Run the tests for each test model.
-        self.output(1, "Running app tests")
-        for model_dir, model_name in test_models:
-            self.output(1, "%s model: Importing" % model_name)
-            try:
-                mod = load_app(model_dir + '.' + model_name)
-            except Exception, e:
-                log_error(model_name, "Error while importing", ''.join(traceback.format_exception(*sys.exc_info())[1:]))
-                continue
+    # Redirect some settings for the duration of these tests.
+    settings.TEST_DATABASE_NAME = TEST_DATABASE_NAME
+    settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS
+    settings.ROOT_URLCONF = 'urls'
+    settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), TEST_TEMPLATE_DIR),)
+    settings.USE_I18N = True
+    settings.MIDDLEWARE_CLASSES = (
+        'django.contrib.sessions.middleware.SessionMiddleware',
+        'django.contrib.auth.middleware.AuthenticationMiddleware',
+        'django.middleware.common.CommonMiddleware',
+    )
 
-            if not getattr(mod, 'error_log', None):
-                # Model is not marked as an invalid model
-                self.output(1, "%s.%s model: Installing" % (model_dir, model_name))
-                management.install(mod)
+    # Load all the ALWAYS_INSTALLED_APPS.
+    # (This import statement is intentionally delayed until after we
+    # access settings because of the USE_I18N dependency.)
+    from django.db.models.loading import get_apps, load_app
+    get_apps()
 
-                # Run the API tests.
-                p = doctest.DocTestParser()
-                test_namespace = dict([(m._meta.object_name, m) \
-                                        for m in django.db.models.get_models(mod)])
-                dtest = p.get_doctest(mod.API_TESTS, test_namespace, model_name, None, None)
-                # Manually set verbose=False, because "-v" command-line parameter
-                # has side effects on doctest TestRunner class.
-                runner = DjangoDoctestRunner(verbosity_level=verbosity_level, verbose=False)
-                self.output(1, "%s.%s model: Running tests" % (model_dir, model_name))
-                runner.run(dtest, clear_globs=True, out=sys.stdout.write)
-            else:
-                # Check that model known to be invalid is invalid for the right reasons.
-                self.output(1, "%s.%s model: Validating" % (model_dir, model_name))
+    # Load all the test model apps.
+    test_models = []
+    for model_dir, model_name in get_test_models():
+        model_label = '.'.join([model_dir, model_name])
+        try:
+            # if the model was named on the command line, or
+            # no models were named (i.e., run all), import
+            # this model and add it to the list to test.
+            if not tests_to_run or model_name in tests_to_run:
+                if verbosity >= 1:
+                    print "Importing model %s" % model_name
+                mod = load_app(model_label)
+                settings.INSTALLED_APPS.append(model_label)
+                test_models.append(mod)
+        except Exception, e:
+            sys.stderr.write("Error while importing %s:" % model_name + ''.join(traceback.format_exception(*sys.exc_info())[1:]))
+            continue
 
-                from cStringIO import StringIO
-                s = StringIO()
-                count = management.get_validation_errors(s, mod)
-                s.seek(0)
-                error_log = s.read()
-                actual = error_log.split('\n')
-                expected = mod.error_log.split('\n')
+    # Add tests for invalid models.
+    extra_tests = []
+    for model_dir, model_name in get_invalid_models():
+        model_label = '.'.join([model_dir, model_name])
+        if not tests_to_run or model_name in tests_to_run:
+            extra_tests.append(InvalidModelTestCase(model_label))
 
-                unexpected = [err for err in actual if err not in expected]
-                missing = [err for err in expected if err not in actual]
+    # Run the test suite, including the extra validation tests.
+    from django.test.simple import run_tests
+    failures = run_tests(test_models, verbosity, extra_tests=extra_tests)
+    if failures:
+        sys.exit(failures)
 
-                if unexpected or missing:
-                    unexpected_log = '\n'.join(unexpected)
-                    missing_log = '\n'.join(missing)
-                    log_error(model_name,
-                        "Validator found %d validation errors, %d expected" % (count, len(expected) - 1),
-                        "Missing errors:\n%s\n\nUnexpected errors:\n%s" % (missing_log, unexpected_log))
+    # Restore the old settings.
+    settings.INSTALLED_APPS = old_installed_apps
+    settings.TESTS_DATABASE_NAME = old_test_database_name
+    settings.ROOT_URLCONF = old_root_urlconf
+    settings.TEMPLATE_DIRS = old_template_dirs
+    settings.USE_I18N = old_use_i18n
+    settings.MIDDLEWARE_CLASSES = old_middleware_classes
 
-        if run_othertests:
-            # Run the non-model tests in the other tests dir
-            self.output(1, "Running other tests")
-            other_tests_dir = os.path.join(os.path.dirname(__file__), OTHER_TESTS_DIR)
-            test_modules = [f[:-3] for f in os.listdir(other_tests_dir) if f.endswith('.py') and not f.startswith('__init__')]
-            for module in test_modules:
-                self.output(1, "%s module: Importing" % module)
-                try:
-                    mod = __import__("othertests." + module, '', '', [''])
-                except Exception, e:
-                    log_error(module, "Error while importing", ''.join(traceback.format_exception(*sys.exc_info())[1:]))
-                    continue
-                if mod.__doc__:
-                    p = doctest.DocTestParser()
-                    dtest = p.get_doctest(mod.__doc__, mod.__dict__, module, None, None)
-                    runner = DjangoDoctestRunner(verbosity_level=verbosity_level, verbose=False)
-                    self.output(1, "%s module: running tests" % module)
-                    runner.run(dtest, clear_globs=True, out=sys.stdout.write)
-                if hasattr(mod, "run_tests") and callable(mod.run_tests):
-                    self.output(1, "%s module: running tests" % module)
-                    try:
-                        mod.run_tests(verbosity_level)
-                    except Exception, e:
-                        log_error(module, "Exception running tests", ''.join(traceback.format_exception(*sys.exc_info())[1:]))
-                        continue
-
-        # Unless we're using SQLite, remove the test database to clean up after
-        # ourselves. Connect to the previous database (not the test database)
-        # to do so, because it's not allowed to delete a database while being
-        # connected to it.
-        if settings.DATABASE_ENGINE != "sqlite3":
-            connection.close()
-            settings.DATABASE_NAME = old_database_name
-            cursor = connection.cursor()
-            self.output(1, "Deleting test database")
-            self._set_autocommit(connection)
-            time.sleep(1) # To avoid "database is being accessed by other users" errors.
-            cursor.execute("DROP DATABASE %s" % TEST_DATABASE_NAME)
-
-        # Display output.
-        if error_list:
-            for d in error_list:
-                print
-                print d['title']
-                print "=" * len(d['title'])
-                print d['description']
-            print "%s error%s:" % (len(error_list), len(error_list) != 1 and 's' or '')
-        else:
-            print "All tests passed."
-
-    def _set_autocommit(self, connection):
-        """
-        Make sure a connection is in autocommit mode.
-        """
-        if hasattr(connection.connection, "autocommit"):
-            connection.connection.autocommit(True)
-        elif hasattr(connection.connection, "set_isolation_level"):
-            connection.connection.set_isolation_level(0)
-
 if __name__ == "__main__":
     from optparse import OptionParser
     usage = "%prog [options] [model model model ...]"
     parser = OptionParser(usage=usage)
-    parser.add_option('-v', help='How verbose should the output be? Choices are 0, 1 and 2, where 2 is most verbose. Default is 0.',
-        type='choice', choices=['0', '1', '2'])
+    parser.add_option('-v','--verbosity', action='store', dest='verbosity', default='0',
+        type='choice', choices=['0', '1', '2'],
+        help='Verbosity level; 0=minimal output, 1=normal output, 2=all output')
     parser.add_option('--settings',
         help='Python path to settings module, e.g. "myproject.settings". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.')
     options, args = parser.parse_args()
-    verbosity_level = 0
-    if options.v:
-        verbosity_level = int(options.v)
     if options.settings:
         os.environ['DJANGO_SETTINGS_MODULE'] = options.settings
-    t = TestRunner(verbosity_level, args)
-    t.run_tests()
+    elif "DJANGO_SETTINGS_MODULE" not in os.environ:
+        parser.error("DJANGO_SETTINGS_MODULE is not set in the environment. "
+                      "Set it or use --settings.")
+    django_tests(int(options.verbosity), args)

Added: vendor/django/current/tests/templates/404.html
===================================================================
--- vendor/django/current/tests/templates/404.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/templates/404.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1 @@
+Django Internal Tests: 404 Error
\ No newline at end of file

Added: vendor/django/current/tests/templates/500.html
===================================================================
--- vendor/django/current/tests/templates/500.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/templates/500.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1 @@
+Django Internal Tests: 500 Error
\ No newline at end of file

Added: vendor/django/current/tests/templates/login.html
===================================================================
--- vendor/django/current/tests/templates/login.html	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/templates/login.html	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,19 @@
+<html>
+<head></head>
+<body>
+<h1>Django Internal Tests: Login</h1>
+{% if form.has_errors %}
+<p>Your username and password didn't match. Please try again.</p>
+{% endif %}
+
+<form method="post" action=".">
+<table>
+<tr><td><label for="id_username">Username:</label></td><td>{{ form.username }}</td></tr>
+<tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr>
+</table>
+
+<input type="submit" value="login" />
+<input type="hidden" name="next" value="{{ next }}" />
+</form>
+</body>
+</html>
\ No newline at end of file

Added: vendor/django/current/tests/urls.py
===================================================================
--- vendor/django/current/tests/urls.py	2007-07-19 21:26:33 UTC (rev 7716)
+++ vendor/django/current/tests/urls.py	2007-07-19 22:25:20 UTC (rev 7717)
@@ -0,0 +1,13 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+    # test_client modeltest urls
+    (r'^test_client/', include('modeltests.test_client.urls')),
+
+    # Always provide the auth system login and logout views
+    (r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
+    (r'^accounts/logout/$', 'django.contrib.auth.views.logout'),
+
+    # test urlconf for {% url %} template tag
+    (r'^url_tag/', include('regressiontests.templates.urls')),
+)



More information about the cig-commits mailing list