From 374735c9eff0c375f5aef9431c529d0cdbbfebe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uro=C5=A1=20Trebec?= Date: Thu, 15 Mar 2007 03:25:47 +0000 Subject: [full-history]: Merged revisions 3642-4724 via svnmerge from http://code.djangoproject.com/svn/django/trunk git-svn-id: http://code.djangoproject.com/svn/django/branches/full-history@4732 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- AUTHORS | 72 +- MANIFEST.in | 10 + README | 4 +- django/bin/compile-messages.py | 22 +- django/bin/daily_cleanup.py | 15 +- django/bin/make-messages.py | 4 +- django/conf/__init__.py | 11 +- django/conf/global_settings.py | 43 +- django/conf/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 31909 bytes django/conf/locale/ca/LC_MESSAGES/django.po | 2383 +++++++++++++ django/conf/locale/ca/LC_MESSAGES/djangojs.mo | Bin 0 -> 1520 bytes django/conf/locale/ca/LC_MESSAGES/djangojs.po | 121 + django/conf/locale/cs/LC_MESSAGES/django.mo | Bin 33632 -> 37754 bytes django/conf/locale/cs/LC_MESSAGES/django.po | 732 ++-- django/conf/locale/da/LC_MESSAGES/django.mo | Bin 16153 -> 32010 bytes django/conf/locale/da/LC_MESSAGES/django.po | 708 ++-- django/conf/locale/de/LC_MESSAGES/django.mo | Bin 32926 -> 40423 bytes django/conf/locale/de/LC_MESSAGES/django.po | 3061 +++++++++-------- django/conf/locale/de/LC_MESSAGES/djangojs.mo | Bin 1460 -> 1569 bytes django/conf/locale/de/LC_MESSAGES/djangojs.po | 20 +- django/conf/locale/el/LC_MESSAGES/django.mo | Bin 8187 -> 15668 bytes django/conf/locale/el/LC_MESSAGES/django.po | 264 +- django/conf/locale/el/LC_MESSAGES/djangojs.mo | Bin 0 -> 1810 bytes django/conf/locale/el/LC_MESSAGES/djangojs.po | 109 + django/conf/locale/en/LC_MESSAGES/django.mo | Bin 536 -> 627 bytes django/conf/locale/en/LC_MESSAGES/django.po | 672 ++-- django/conf/locale/es/LC_MESSAGES/django.mo | Bin 28941 -> 40248 bytes django/conf/locale/es/LC_MESSAGES/django.po | 3456 ++++++++++--------- django/conf/locale/es_AR/LC_MESSAGES/django.mo | Bin 33953 -> 40281 bytes django/conf/locale/es_AR/LC_MESSAGES/django.po | 987 ++++-- django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 1566 -> 1576 bytes django/conf/locale/es_AR/LC_MESSAGES/djangojs.po | 41 +- django/conf/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 34867 bytes django/conf/locale/fi/LC_MESSAGES/django.po | 2036 +++++++++++ django/conf/locale/fi/LC_MESSAGES/djangojs.mo | Bin 0 -> 1529 bytes django/conf/locale/fi/LC_MESSAGES/djangojs.po | 110 + django/conf/locale/fr/LC_MESSAGES/django.mo | Bin 32919 -> 39707 bytes django/conf/locale/fr/LC_MESSAGES/django.po | 3530 ++++++++++--------- django/conf/locale/it/LC_MESSAGES/django.mo | Bin 32320 -> 40468 bytes django/conf/locale/it/LC_MESSAGES/django.po | 3413 ++++++++++--------- django/conf/locale/it/LC_MESSAGES/djangojs.mo | Bin 1613 -> 1643 bytes django/conf/locale/it/LC_MESSAGES/djangojs.po | 96 +- django/conf/locale/ja/LC_MESSAGES/django.mo | Bin 33761 -> 43571 bytes django/conf/locale/ja/LC_MESSAGES/django.po | 923 +++-- django/conf/locale/ja/LC_MESSAGES/djangojs.mo | Bin 1560 -> 1604 bytes django/conf/locale/ja/LC_MESSAGES/djangojs.po | 44 +- django/conf/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 57878 bytes django/conf/locale/kn/LC_MESSAGES/django.po | 2533 ++++++++++++++ django/conf/locale/kn/LC_MESSAGES/djangojs.mo | Bin 0 -> 2205 bytes django/conf/locale/kn/LC_MESSAGES/djangojs.po | 116 + django/conf/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 26751 bytes django/conf/locale/lv/LC_MESSAGES/django.po | 2326 +++++++++++++ django/conf/locale/lv/LC_MESSAGES/djangojs.mo | Bin 0 -> 367 bytes django/conf/locale/lv/LC_MESSAGES/djangojs.po | 118 + django/conf/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 50847 bytes django/conf/locale/mk/LC_MESSAGES/django.po | 2320 +++++++++++++ django/conf/locale/mk/LC_MESSAGES/djangojs.mo | Bin 0 -> 1921 bytes django/conf/locale/mk/LC_MESSAGES/djangojs.po | 119 + django/conf/locale/nl/LC_MESSAGES/django.mo | Bin 32146 -> 38004 bytes django/conf/locale/nl/LC_MESSAGES/django.po | 780 +++-- django/conf/locale/no/LC_MESSAGES/django.mo | Bin 23238 -> 27469 bytes django/conf/locale/no/LC_MESSAGES/django.po | 273 +- django/conf/locale/no/LC_MESSAGES/djangojs.mo | Bin 1432 -> 1492 bytes django/conf/locale/no/LC_MESSAGES/djangojs.po | 11 +- django/conf/locale/pl/LC_MESSAGES/django.mo | Bin 23926 -> 28373 bytes django/conf/locale/pl/LC_MESSAGES/django.po | 96 +- django/conf/locale/pt_BR/LC_MESSAGES/django.mo | Bin 27702 -> 28462 bytes django/conf/locale/pt_BR/LC_MESSAGES/django.po | 181 +- django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo | Bin 1530 -> 1537 bytes django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po | 12 +- django/conf/locale/ru/LC_MESSAGES/django.mo | Bin 34467 -> 42820 bytes django/conf/locale/ru/LC_MESSAGES/django.po | 506 +-- django/conf/locale/sl/LC_MESSAGES/django.mo | Bin 33224 -> 32469 bytes django/conf/locale/sl/LC_MESSAGES/django.po | 265 +- django/conf/locale/sr/LC_MESSAGES/django.mo | Bin 29583 -> 32246 bytes django/conf/locale/sr/LC_MESSAGES/django.po | 695 ++-- django/conf/locale/sr/LC_MESSAGES/djangojs.mo | Bin 1699 -> 1669 bytes django/conf/locale/sr/LC_MESSAGES/djangojs.po | 13 +- django/conf/locale/sv/LC_MESSAGES/django.mo | Bin 29118 -> 39640 bytes django/conf/locale/sv/LC_MESSAGES/django.po | 3452 ++++++++++--------- django/conf/locale/sv/LC_MESSAGES/djangojs.mo | Bin 905 -> 1680 bytes django/conf/locale/sv/LC_MESSAGES/djangojs.po | 89 +- django/conf/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 35017 bytes django/conf/locale/te/LC_MESSAGES/django.po | 2106 ++++++++++++ django/conf/locale/te/LC_MESSAGES/djangojs.mo | Bin 0 -> 2206 bytes django/conf/locale/te/LC_MESSAGES/djangojs.po | 110 + django/conf/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 37149 bytes django/conf/locale/tr/LC_MESSAGES/django.po | 2209 ++++++++++++ django/conf/locale/tr/LC_MESSAGES/djangojs.mo | Bin 0 -> 1508 bytes django/conf/locale/tr/LC_MESSAGES/djangojs.po | 109 + django/conf/locale/zh_CN/LC_MESSAGES/django.mo | Bin 30798 -> 30798 bytes django/conf/locale/zh_CN/LC_MESSAGES/django.po | 4 +- django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo | Bin 1513 -> 1505 bytes django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po | 28 +- django/conf/project_template/settings.py | 9 +- django/conf/project_template/urls.py | 2 +- django/conf/urls/admin_password_reset.py | 6 - django/conf/urls/registration.py | 19 - django/contrib/admin/media/css/forms.css | 2 +- django/contrib/admin/media/css/global.css | 2 +- .../admin/media/js/admin/DateTimeShortcuts.js | 11 +- django/contrib/admin/media/js/core.js | 8 + django/contrib/admin/media/js/dateparse.js | 2 +- django/contrib/admin/media/js/urlify.js | 2 +- .../templates/admin/auth/user/change_password.html | 52 + django/contrib/admin/templates/admin/base.html | 5 +- .../contrib/admin/templates/admin/change_form.html | 2 + .../contrib/admin/templates/admin/change_list.html | 2 + django/contrib/admin/templates/admin/login.html | 2 +- .../contrib/admin/templates/admin/search_form.html | 2 +- .../admin/templates/admin_doc/model_detail.html | 2 +- .../admin/templates/admin_doc/view_detail.html | 2 +- django/contrib/admin/templatetags/admin_list.py | 45 +- django/contrib/admin/templatetags/admin_modify.py | 18 +- django/contrib/admin/urls.py | 2 + django/contrib/admin/views/auth.py | 46 +- django/contrib/admin/views/decorators.py | 2 +- django/contrib/admin/views/doc.py | 24 +- django/contrib/admin/views/main.py | 48 +- django/contrib/admin/views/template.py | 12 +- django/contrib/auth/__init__.py | 2 +- django/contrib/auth/create_superuser.py | 1 + django/contrib/auth/decorators.py | 8 + django/contrib/auth/forms.py | 54 +- django/contrib/auth/handlers/modpython.py | 31 +- django/contrib/auth/management.py | 8 +- django/contrib/auth/middleware.py | 9 +- django/contrib/auth/models.py | 23 +- django/contrib/auth/views.py | 8 +- django/contrib/comments/models.py | 2 +- django/contrib/comments/views/comments.py | 36 +- django/contrib/contenttypes/management.py | 15 +- django/contrib/contenttypes/models.py | 24 +- django/contrib/csrf/middleware.py | 2 +- django/contrib/flatpages/views.py | 5 +- django/contrib/formtools/__init__.py | 0 django/contrib/formtools/preview.py | 165 + .../formtools/templates/formtools/form.html | 15 + .../formtools/templates/formtools/preview.html | 36 + django/contrib/humanize/templatetags/humanize.py | 17 +- django/contrib/localflavor/__init__.py | 0 django/contrib/localflavor/uk/__init__.py | 0 django/contrib/localflavor/uk/forms.py | 19 + django/contrib/localflavor/usa/__init__.py | 0 django/contrib/localflavor/usa/forms.py | 59 + django/contrib/localflavor/usa/us_states.py | 239 ++ django/contrib/sessions/middleware.py | 9 +- django/contrib/sitemaps/__init__.py | 90 + django/contrib/sitemaps/templates/sitemap.xml | 13 + .../contrib/sitemaps/templates/sitemap_index.xml | 4 + django/contrib/sitemaps/views.py | 30 + django/contrib/sites/management.py | 5 +- django/contrib/syndication/feeds.py | 2 + django/core/cache/__init__.py | 2 +- django/core/cache/backends/dummy.py | 6 +- django/core/context_processors.py | 6 +- django/core/handlers/base.py | 48 +- django/core/handlers/modpython.py | 54 +- django/core/handlers/wsgi.py | 61 +- django/core/mail.py | 43 +- django/core/management.py | 565 ++- django/core/paginator.py | 75 +- django/core/serializers/__init__.py | 14 +- django/core/serializers/base.py | 60 +- django/core/serializers/json.py | 4 +- django/core/serializers/python.py | 16 +- django/core/serializers/pyyaml.py | 36 + django/core/serializers/xml_serializer.py | 45 +- django/core/servers/basehttp.py | 9 +- django/core/servers/fastcgi.py | 21 +- django/core/urlresolvers.py | 20 +- django/core/validators.py | 98 +- django/core/xheaders.py | 5 +- django/db/__init__.py | 12 +- django/db/backends/ado_mssql/base.py | 23 +- django/db/backends/ado_mssql/creation.py | 1 - django/db/backends/dummy/base.py | 6 + django/db/backends/mysql/base.py | 124 +- django/db/backends/mysql/client.py | 29 +- django/db/backends/mysql/creation.py | 1 - django/db/backends/mysql/introspection.py | 3 +- django/db/backends/oracle/base.py | 29 +- django/db/backends/oracle/creation.py | 1 - django/db/backends/postgresql/base.py | 115 +- django/db/backends/postgresql/creation.py | 1 - django/db/backends/postgresql_psycopg2/base.py | 101 +- django/db/backends/sqlite3/base.py | 55 +- django/db/backends/sqlite3/creation.py | 1 - django/db/backends/util.py | 10 +- django/db/models/__init__.py | 5 + django/db/models/base.py | 123 +- django/db/models/fields/__init__.py | 188 +- django/db/models/fields/generic.py | 6 +- django/db/models/fields/related.py | 136 +- django/db/models/loading.py | 2 +- django/db/models/manager.py | 8 +- django/db/models/manipulators.py | 31 +- django/db/models/query.py | 245 +- django/db/models/related.py | 20 +- django/dispatch/dispatcher.py | 118 +- django/forms/__init__.py | 996 +----- django/http/__init__.py | 37 +- django/middleware/common.py | 11 +- django/middleware/doc.py | 9 +- django/middleware/gzip.py | 1 + django/newforms/__init__.py | 17 + django/newforms/extras/__init__.py | 1 + django/newforms/extras/widgets.py | 59 + django/newforms/fields.py | 492 +++ django/newforms/forms.py | 309 ++ django/newforms/models.py | 190 ++ django/newforms/util.py | 74 + django/newforms/widgets.py | 353 ++ django/oldforms/__init__.py | 1015 ++++++ django/shortcuts/__init__.py | 15 +- django/template/__init__.py | 86 +- django/template/context.py | 5 +- django/template/defaultfilters.py | 137 +- django/template/defaulttags.py | 183 +- django/template/loader.py | 8 +- django/template/loader_tags.py | 6 +- django/template/loaders/app_directories.py | 4 +- django/templatetags/__init__.py | 2 +- django/test/__init__.py | 6 + django/test/client.py | 248 ++ django/test/doctest.py | 2669 +++++++++++++++ django/test/signals.py | 1 + django/test/simple.py | 88 + django/test/testcases.py | 50 + django/test/utils.py | 110 + django/utils/datastructures.py | 53 +- django/utils/dateformat.py | 23 +- django/utils/feedgenerator.py | 16 +- django/utils/functional.py | 4 +- django/utils/itercompat.py | 31 + django/utils/simplejson/LICENSE.txt | 2 +- django/utils/simplejson/__init__.py | 47 +- django/utils/simplejson/decoder.py | 6 +- django/utils/simplejson/encoder.py | 98 +- django/utils/simplejson/jsonfilter.py | 40 + django/utils/simplejson/scanner.py | 2 +- django/utils/text.py | 97 +- django/views/debug.py | 26 +- django/views/defaults.py | 4 +- django/views/generic/create_update.py | 12 +- django/views/generic/list_detail.py | 10 +- django/views/generic/simple.py | 12 +- django/views/i18n.py | 6 +- django/views/static.py | 2 +- docs/add_ons.txt | 49 +- docs/admin_css.txt | 4 +- docs/apache_auth.txt | 6 +- docs/api_stability.txt | 50 +- docs/authentication.txt | 260 +- docs/cache.txt | 2 +- docs/contributing.txt | 272 +- docs/csrf.txt | 37 +- docs/databases.txt | 162 + docs/db-api.txt | 124 +- docs/design_philosophies.txt | 2 +- docs/distributions.txt | 76 + docs/django-admin.txt | 231 +- docs/email.txt | 14 +- docs/faq.txt | 73 +- docs/fastcgi.txt | 19 +- docs/flatpages.txt | 14 +- docs/forms.txt | 142 +- docs/generic_views.txt | 90 +- docs/i18n.txt | 31 +- docs/install.txt | 67 +- docs/legacy_databases.txt | 20 +- docs/middleware.txt | 15 +- docs/model-api.txt | 112 +- docs/modpython.txt | 7 +- docs/newforms.txt | 874 +++++ docs/outputting_csv.txt | 6 +- docs/outputting_pdf.txt | 4 +- docs/overview.txt | 4 +- docs/redirects.txt | 16 +- docs/release_notes_0.95.txt | 2 +- docs/request_response.txt | 123 +- docs/serialization.txt | 31 +- docs/sessions.txt | 23 +- docs/settings.txt | 201 +- docs/sitemaps.txt | 321 ++ docs/sites.txt | 21 +- docs/static_files.txt | 10 +- docs/syndication_feeds.txt | 65 +- docs/templates.txt | 138 +- docs/templates_python.txt | 199 +- docs/testing.txt | 546 +++ docs/tutorial01.txt | 26 +- docs/tutorial02.txt | 20 +- docs/tutorial03.txt | 19 +- docs/tutorial04.txt | 27 +- docs/url_dispatch.txt | 21 +- extras/django_bash_completion | 50 +- ez_setup.py | 217 -- scripts/rpm-install.sh | 19 + setup.cfg | 4 + setup.py | 60 +- tests/doctest.py | 2665 --------------- tests/modeltests/basic/models.py | 38 +- tests/modeltests/choices/models.py | 4 +- tests/modeltests/custom_columns/models.py | 96 +- tests/modeltests/custom_managers/models.py | 4 +- tests/modeltests/custom_methods/models.py | 4 +- tests/modeltests/custom_pk/models.py | 8 +- tests/modeltests/empty/models.py | 4 +- tests/modeltests/field_defaults/models.py | 4 +- tests/modeltests/fixtures/__init__.py | 2 + tests/modeltests/fixtures/fixtures/fixture1.json | 18 + tests/modeltests/fixtures/fixtures/fixture2.json | 18 + tests/modeltests/fixtures/fixtures/fixture2.xml | 11 + tests/modeltests/fixtures/fixtures/fixture3.xml | 11 + .../modeltests/fixtures/fixtures/initial_data.json | 10 + tests/modeltests/fixtures/models.py | 88 + tests/modeltests/generic_relations/models.py | 38 +- tests/modeltests/get_latest/models.py | 12 +- tests/modeltests/get_object_or_404/__init__.py | 0 tests/modeltests/get_object_or_404/models.py | 86 + tests/modeltests/get_or_create/models.py | 4 +- tests/modeltests/invalid_models/models.py | 39 +- tests/modeltests/lookup/models.py | 43 +- tests/modeltests/m2m_and_m2o/models.py | 4 +- tests/modeltests/m2m_intermediary/models.py | 4 +- tests/modeltests/m2m_multiple/models.py | 4 +- tests/modeltests/m2m_recursive/models.py | 4 +- tests/modeltests/m2o_recursive/models.py | 4 +- tests/modeltests/m2o_recursive2/models.py | 4 +- tests/modeltests/manipulators/models.py | 4 +- tests/modeltests/many_to_many/models.py | 30 +- tests/modeltests/many_to_one/models.py | 4 +- tests/modeltests/many_to_one_null/models.py | 4 +- tests/modeltests/model_forms/__init__.py | 0 tests/modeltests/model_forms/models.py | 464 +++ tests/modeltests/model_inheritance/models.py | 4 +- tests/modeltests/mutually_referential/models.py | 4 +- tests/modeltests/one_to_one/models.py | 18 +- tests/modeltests/or_lookups/models.py | 19 +- tests/modeltests/ordering/models.py | 4 +- tests/modeltests/pagination/models.py | 17 +- tests/modeltests/properties/models.py | 4 +- tests/modeltests/reserved_names/models.py | 4 +- tests/modeltests/reverse_lookup/models.py | 4 +- tests/modeltests/save_delete_hooks/models.py | 4 +- tests/modeltests/select_related/__init__.py | 0 tests/modeltests/select_related/models.py | 152 + tests/modeltests/serializers/models.py | 45 +- tests/modeltests/str/models.py | 4 +- tests/modeltests/test_client/__init__.py | 0 .../modeltests/test_client/fixtures/testdata.json | 20 + tests/modeltests/test_client/models.py | 136 + tests/modeltests/test_client/urls.py | 12 + tests/modeltests/test_client/views.py | 68 + tests/modeltests/transactions/models.py | 6 +- tests/modeltests/validation/models.py | 8 +- tests/othertests/__init__.py | 0 tests/othertests/cache.py | 60 - tests/othertests/dateformat.py | 80 - tests/othertests/db_typecasts.py | 51 - tests/othertests/defaultfilters.py | 361 -- tests/othertests/httpwrappers.py | 358 -- tests/othertests/markup.py | 70 - tests/othertests/templates.py | 634 ---- tests/othertests/urlpatterns_reverse.py | 47 - tests/regressiontests/bug639/__init__.py | 0 tests/regressiontests/bug639/models.py | 16 + tests/regressiontests/bug639/test.jpg | Bin 0 -> 1780 bytes tests/regressiontests/bug639/tests.py | 42 + tests/regressiontests/cache/__init__.py | 0 tests/regressiontests/cache/models.py | 0 tests/regressiontests/cache/tests.py | 71 + tests/regressiontests/datastructures/__init__.py | 0 tests/regressiontests/datastructures/models.py | 0 tests/regressiontests/datastructures/tests.py | 65 + tests/regressiontests/dateformat/__init__.py | 0 tests/regressiontests/dateformat/models.py | 0 tests/regressiontests/dateformat/tests.py | 86 + tests/regressiontests/db_typecasts/__init__.py | 0 tests/regressiontests/db_typecasts/models.py | 0 tests/regressiontests/db_typecasts/tests.py | 56 + tests/regressiontests/defaultfilters/__init__.py | 0 tests/regressiontests/defaultfilters/models.py | 0 tests/regressiontests/defaultfilters/tests.py | 446 +++ tests/regressiontests/dispatch/__init__.py | 2 + tests/regressiontests/dispatch/models.py | 0 tests/regressiontests/dispatch/tests/__init__.py | 7 + .../dispatch/tests/test_dispatcher.py | 144 + .../dispatch/tests/test_robustapply.py | 34 + .../regressiontests/dispatch/tests/test_saferef.py | 77 + tests/regressiontests/forms/__init__.py | 0 tests/regressiontests/forms/models.py | 0 tests/regressiontests/forms/tests.py | 3585 ++++++++++++++++++++ tests/regressiontests/httpwrappers/__init__.py | 0 tests/regressiontests/httpwrappers/models.py | 0 tests/regressiontests/httpwrappers/tests.py | 358 ++ tests/regressiontests/humanize/__init__.py | 0 tests/regressiontests/humanize/models.py | 0 tests/regressiontests/humanize/tests.py | 52 + .../regressiontests/initial_sql_regress/models.py | 2 +- .../initial_sql_regress/sql/simple.sql | 1 + .../invalid_admin_options/__init__.py | 0 .../invalid_admin_options/models.py | 337 ++ .../regressiontests/many_to_one_regress/models.py | 29 +- tests/regressiontests/markup/__init__.py | 0 tests/regressiontests/markup/models.py | 0 tests/regressiontests/markup/tests.py | 69 + tests/regressiontests/null_queries/__init__.py | 0 tests/regressiontests/null_queries/models.py | 54 + tests/regressiontests/one_to_one_regress/models.py | 4 +- .../serializers_regress/__init__.py | 0 .../regressiontests/serializers_regress/models.py | 170 + tests/regressiontests/serializers_regress/tests.py | 243 ++ tests/regressiontests/string_lookup/models.py | 4 +- tests/regressiontests/templates/__init__.py | 0 tests/regressiontests/templates/models.py | 0 tests/regressiontests/templates/tests.py | 757 +++++ tests/regressiontests/templates/urls.py | 10 + tests/regressiontests/templates/views.py | 10 + .../urlpatterns_reverse/__init__.py | 0 .../regressiontests/urlpatterns_reverse/models.py | 0 tests/regressiontests/urlpatterns_reverse/tests.py | 39 + tests/runtests.py | 362 +- tests/templates/404.html | 1 + tests/templates/500.html | 1 + tests/templates/login.html | 19 + tests/urls.py | 13 + 428 files changed, 52547 insertions(+), 18349 deletions(-) create mode 100644 MANIFEST.in create mode 100644 django/conf/locale/ca/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/ca/LC_MESSAGES/django.po create mode 100644 django/conf/locale/ca/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/ca/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/el/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/el/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/fi/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/fi/LC_MESSAGES/django.po create mode 100644 django/conf/locale/fi/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/fi/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/kn/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/kn/LC_MESSAGES/django.po create mode 100644 django/conf/locale/kn/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/kn/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/lv/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/lv/LC_MESSAGES/django.po create mode 100644 django/conf/locale/lv/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/lv/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/mk/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/mk/LC_MESSAGES/django.po create mode 100644 django/conf/locale/mk/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/mk/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/te/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/te/LC_MESSAGES/django.po create mode 100644 django/conf/locale/te/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/te/LC_MESSAGES/djangojs.po create mode 100644 django/conf/locale/tr/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/tr/LC_MESSAGES/django.po create mode 100644 django/conf/locale/tr/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/tr/LC_MESSAGES/djangojs.po delete mode 100644 django/conf/urls/admin_password_reset.py delete mode 100644 django/conf/urls/registration.py create mode 100644 django/contrib/admin/templates/admin/auth/user/change_password.html create mode 100644 django/contrib/formtools/__init__.py create mode 100644 django/contrib/formtools/preview.py create mode 100644 django/contrib/formtools/templates/formtools/form.html create mode 100644 django/contrib/formtools/templates/formtools/preview.html create mode 100644 django/contrib/localflavor/__init__.py create mode 100644 django/contrib/localflavor/uk/__init__.py create mode 100644 django/contrib/localflavor/uk/forms.py create mode 100644 django/contrib/localflavor/usa/__init__.py create mode 100644 django/contrib/localflavor/usa/forms.py create mode 100644 django/contrib/localflavor/usa/us_states.py create mode 100644 django/contrib/sitemaps/__init__.py create mode 100644 django/contrib/sitemaps/templates/sitemap.xml create mode 100644 django/contrib/sitemaps/templates/sitemap_index.xml create mode 100644 django/contrib/sitemaps/views.py create mode 100644 django/core/serializers/pyyaml.py create mode 100644 django/newforms/__init__.py create mode 100644 django/newforms/extras/__init__.py create mode 100644 django/newforms/extras/widgets.py create mode 100644 django/newforms/fields.py create mode 100644 django/newforms/forms.py create mode 100644 django/newforms/models.py create mode 100644 django/newforms/util.py create mode 100644 django/newforms/widgets.py create mode 100644 django/oldforms/__init__.py create mode 100644 django/test/__init__.py create mode 100644 django/test/client.py create mode 100644 django/test/doctest.py create mode 100644 django/test/signals.py create mode 100644 django/test/simple.py create mode 100644 django/test/testcases.py create mode 100644 django/test/utils.py create mode 100644 django/utils/itercompat.py create mode 100644 django/utils/simplejson/jsonfilter.py create mode 100644 docs/databases.txt create mode 100644 docs/distributions.txt create mode 100644 docs/newforms.txt create mode 100644 docs/sitemaps.txt create mode 100644 docs/testing.txt delete mode 100644 ez_setup.py create mode 100644 scripts/rpm-install.sh create mode 100644 setup.cfg delete mode 100644 tests/doctest.py create mode 100644 tests/modeltests/fixtures/__init__.py create mode 100644 tests/modeltests/fixtures/fixtures/fixture1.json create mode 100644 tests/modeltests/fixtures/fixtures/fixture2.json create mode 100644 tests/modeltests/fixtures/fixtures/fixture2.xml create mode 100644 tests/modeltests/fixtures/fixtures/fixture3.xml create mode 100644 tests/modeltests/fixtures/fixtures/initial_data.json create mode 100644 tests/modeltests/fixtures/models.py create mode 100644 tests/modeltests/get_object_or_404/__init__.py create mode 100644 tests/modeltests/get_object_or_404/models.py create mode 100644 tests/modeltests/model_forms/__init__.py create mode 100644 tests/modeltests/model_forms/models.py create mode 100644 tests/modeltests/select_related/__init__.py create mode 100644 tests/modeltests/select_related/models.py create mode 100644 tests/modeltests/test_client/__init__.py create mode 100644 tests/modeltests/test_client/fixtures/testdata.json create mode 100644 tests/modeltests/test_client/models.py create mode 100644 tests/modeltests/test_client/urls.py create mode 100644 tests/modeltests/test_client/views.py delete mode 100644 tests/othertests/__init__.py delete mode 100644 tests/othertests/cache.py delete mode 100644 tests/othertests/dateformat.py delete mode 100644 tests/othertests/db_typecasts.py delete mode 100644 tests/othertests/defaultfilters.py delete mode 100644 tests/othertests/httpwrappers.py delete mode 100644 tests/othertests/markup.py delete mode 100644 tests/othertests/templates.py delete mode 100644 tests/othertests/urlpatterns_reverse.py create mode 100644 tests/regressiontests/bug639/__init__.py create mode 100644 tests/regressiontests/bug639/models.py create mode 100644 tests/regressiontests/bug639/test.jpg create mode 100644 tests/regressiontests/bug639/tests.py create mode 100644 tests/regressiontests/cache/__init__.py create mode 100644 tests/regressiontests/cache/models.py create mode 100644 tests/regressiontests/cache/tests.py create mode 100644 tests/regressiontests/datastructures/__init__.py create mode 100644 tests/regressiontests/datastructures/models.py create mode 100644 tests/regressiontests/datastructures/tests.py create mode 100644 tests/regressiontests/dateformat/__init__.py create mode 100644 tests/regressiontests/dateformat/models.py create mode 100644 tests/regressiontests/dateformat/tests.py create mode 100644 tests/regressiontests/db_typecasts/__init__.py create mode 100644 tests/regressiontests/db_typecasts/models.py create mode 100644 tests/regressiontests/db_typecasts/tests.py create mode 100644 tests/regressiontests/defaultfilters/__init__.py create mode 100644 tests/regressiontests/defaultfilters/models.py create mode 100644 tests/regressiontests/defaultfilters/tests.py create mode 100644 tests/regressiontests/dispatch/__init__.py create mode 100644 tests/regressiontests/dispatch/models.py create mode 100644 tests/regressiontests/dispatch/tests/__init__.py create mode 100644 tests/regressiontests/dispatch/tests/test_dispatcher.py create mode 100644 tests/regressiontests/dispatch/tests/test_robustapply.py create mode 100644 tests/regressiontests/dispatch/tests/test_saferef.py create mode 100644 tests/regressiontests/forms/__init__.py create mode 100644 tests/regressiontests/forms/models.py create mode 100644 tests/regressiontests/forms/tests.py create mode 100644 tests/regressiontests/httpwrappers/__init__.py create mode 100644 tests/regressiontests/httpwrappers/models.py create mode 100644 tests/regressiontests/httpwrappers/tests.py create mode 100644 tests/regressiontests/humanize/__init__.py create mode 100644 tests/regressiontests/humanize/models.py create mode 100644 tests/regressiontests/humanize/tests.py create mode 100644 tests/regressiontests/invalid_admin_options/__init__.py create mode 100644 tests/regressiontests/invalid_admin_options/models.py create mode 100644 tests/regressiontests/markup/__init__.py create mode 100644 tests/regressiontests/markup/models.py create mode 100644 tests/regressiontests/markup/tests.py create mode 100644 tests/regressiontests/null_queries/__init__.py create mode 100644 tests/regressiontests/null_queries/models.py create mode 100644 tests/regressiontests/serializers_regress/__init__.py create mode 100644 tests/regressiontests/serializers_regress/models.py create mode 100644 tests/regressiontests/serializers_regress/tests.py create mode 100644 tests/regressiontests/templates/__init__.py create mode 100644 tests/regressiontests/templates/models.py create mode 100644 tests/regressiontests/templates/tests.py create mode 100644 tests/regressiontests/templates/urls.py create mode 100644 tests/regressiontests/templates/views.py create mode 100644 tests/regressiontests/urlpatterns_reverse/__init__.py create mode 100644 tests/regressiontests/urlpatterns_reverse/models.py create mode 100644 tests/regressiontests/urlpatterns_reverse/tests.py create mode 100644 tests/templates/404.html create mode 100644 tests/templates/500.html create mode 100644 tests/templates/login.html create mode 100644 tests/urls.py diff --git a/AUTHORS b/AUTHORS index e52fb46b47..760ffdd21e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -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 , who originally created Django with @@ -42,18 +41,23 @@ And here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS -- people who have submitted patches, reported bugs, added translations, helped answer newbie questions, and generally made Django that much better: - akaihola + adurdin@gmail.com Andreas + andy@jadedplanet.net + ant9000@netwise.it David Ascher Arthur Jiri Barton Ned Batchelder Shannon -jj Behrens + Esdras Beleza James Bennett + Ben Paul Bissex Simon Blanchard Andrew Brehaut - andy@jadedplanet.net + brut.alll@gmail.com + Jonathan Buchanan Antonio Cavedoni C8E Chris Chamberlin @@ -62,85 +66,139 @@ answer newbie questions, and generally made Django that much better: Ian Clelland crankycoder@gmail.com Matt Croydon + Jure Cuhalev + dackze+django@gmail.com + Dirk Datzert Jonathan Daugherty (cygnus) + dave@thebarproject.com Jason Davies (Esaj) Alex Dedul deric@monowerks.com dne@mayonnaise.net + Maximillian Dornseif Jeremy Dunck Andy Dustman Clint Ecker + Enrico + Ludvig Ericson + Dirk Eschler + Marc Fargas + favo@exoweb.net + Eric Floehr + Jorge Gajon gandalf@owca.info Baishampayan Ghose martin.glueck@gmail.com Simon Greenhill + Owen Griffiths Espen Grindhaug + Brian Harring Brant Harris + Hawkeye + Joe Heck + Joel Heenan hipertracker@gmail.com Ian Holsman Kieran Holland Robert Rock Howard Jason Huggins + Tom Insam + Baurzhan Ismagulov jcrasta@gmail.com Michael Josephson jpellerin@gmail.com junzhang.jn@gmail.com + Antti Kaihola + Ben Dean Kawamura Garth Kidd kilian Sune Kirkeby + Bastian Kleineidam Cameron Knight (ckknight) + Meir Kriheli Bruce Kroeze Joseph Kocherhans konrad@gwu.edu lakin.wecker@gmail.com Stuart Langridge + Nicola Larosa Eugene Lazutkin + Jeong-Min Lee Christopher Lenz + lerouxb@gmail.com + Waylan Limberg limodou + mattmcc Martin Maney + masonsimon+django@gmail.com Manuzhai - Petar Marić + Petar Marić mark@junklight.com + Yasushi Masuda mattycakes@gmail.com Jason McBrayer + mccutchen@gmail.com michael.mcewan@gmail.com - mir@noris.de + mikko@sorl.net + mitakummaa@gmail.com mmarshall Eric Moritz Robin Munn + Robert Myers Nebojša Dorđević + Fraser Nevett Sam Newman Neal Norwitz oggie rob Jay Parlar + pavithran s pgross@thoughtworks.com phaedo phil@produxion.net + phil.h.smith@gmail.com Gustavo Picon Luke Plant plisk Daniel Poelzleithner J. Rademaker + Michael Radziej + ramiro Brian Ray + remco@diji.biz rhettg@gmail.com Oliver Rutherfurd Ivan Sagalaev (Maniac) David Schein + scott@staplefish.com + serbaut@gmail.com + Pete Shinners + SmileyChris + smurf@smurf.noris.de sopel - Thomas Steinacher + Georgi Stanojevski + Thomas Steinacher + nowell strite Radek Švarz Swaroop C H Aaron Swartz + Tyson Tate Tom Tobin - Tom Insam Joe Topjian + torne-django@wolfpuppy.org.uk Karen Tracey + Makoto Tsuyuki Amit Upadhyay Geert Vanderkelen + viestards.lists@gmail.com Milton Waddams + wam-djangobug@wamber.net + Dan Watson + Chris Wesseling Rachel Willmer + Gary Wilson wojtek ye7cakf02@sneakemail.com + ymasuda@ethercube.com Cheng Zhang A big THANK YOU goes to: diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000000..11b60bcc14 --- /dev/null +++ b/MANIFEST.in @@ -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 * diff --git a/README b/README index d52451d3ba..084f863a1e 100644 --- a/README +++ b/README @@ -25,10 +25,10 @@ http://code.djangoproject.com/newticket 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: diff --git a/django/bin/compile-messages.py b/django/bin/compile-messages.py index 07dcce7bf6..f2193d3122 100755 --- a/django/bin/compile-messages.py +++ b/django/bin/compile-messages.py @@ -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')): @@ -14,6 +15,9 @@ def compile_messages(): print "This script should be run from the Django SVN tree or your project or app tree." sys.exit(1) + 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'): @@ -26,8 +30,20 @@ def compile_messages(): # See http://cyberelk.net/tim/articles/cmdline/ar01s02.html os.environ['djangocompilemo'] = pf + '.mo' os.environ['djangocompilepo'] = pf + '.po' - cmd = 'msgfmt -o "$djangocompilemo" "$djangocompilepo"' + if sys.platform == 'win32': # Different shell-variable syntax + cmd = 'msgfmt -o "%djangocompilemo%" "%djangocompilepo%"' + else: + 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() diff --git a/django/bin/daily_cleanup.py b/django/bin/daily_cleanup.py index 6eb5c17feb..3b83583d73 100644 --- a/django/bin/daily_cleanup.py +++ b/django/bin/daily_cleanup.py @@ -1,16 +1,19 @@ -"Daily cleanup file" +#!/usr/bin/env python -from django.db import backend, connection, transaction +""" +Daily cleanup job. + +Can be run as a cronjob to clean out old data from the database (only expired +sessions at the moment). +""" -DOCUMENTATION_DIRECTORY = '/home/html/documentation/' +from django.db import backend, connection, transaction 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__": diff --git a/django/bin/make-messages.py b/django/bin/make-messages.py index 557cb5eeec..34fb68dcfe 100755 --- a/django/bin/make-messages.py +++ b/django/bin/make-messages.py @@ -81,7 +81,7 @@ def make_messages(): 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 @@ def make_messages(): 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() diff --git a/django/conf/__init__.py b/django/conf/__init__.py index 1a04bbfb02..021ecc8131 100644 --- a/django/conf/__init__.py +++ b/django/conf/__init__.py @@ -7,6 +7,7 @@ a list of all possible variables. """ import os +import time # Needed for Windows from django.conf import global_settings ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE" @@ -77,7 +78,7 @@ class Settings(object): 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 @@ class Settings(object): 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 @@ class Settings(object): 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) diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 4ea694d064..02a882fd99 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -25,7 +25,7 @@ ADMINS = () 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 @@ LANGUAGE_CODE = 'en-us' 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 @@ LANGUAGES = ( ('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,12 @@ LANGUAGES = ( ('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-br', gettext_noop('Brazilian')), ('ro', gettext_noop('Romanian')), ('ru', gettext_noop('Russian')), @@ -63,6 +69,8 @@ LANGUAGES = ( ('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 +100,13 @@ SERVER_EMAIL = 'root@localhost' 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 +230,14 @@ YEAR_MONTH_FORMAT = 'F Y' # 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 # ############## @@ -271,6 +280,10 @@ CACHE_MIDDLEWARE_KEY_PREFIX = '' 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 @@ -296,3 +309,21 @@ BANNED_IPS = () ################## 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 = () diff --git a/django/conf/locale/ca/LC_MESSAGES/django.mo b/django/conf/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..00cc135c2d Binary files /dev/null and b/django/conf/locale/ca/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ca/LC_MESSAGES/django.po b/django/conf/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 0000000000..212ecda34a --- /dev/null +++ b/django/conf/locale/ca/LC_MESSAGES/django.po @@ -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 Crdenes Medina , 2005. +# Ricardo Javier Cardenes Medina , 2005. +# Marc Fargas , 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 \n" +"Language-Team: \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 vlid." + +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "Separi mltiples 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 ms 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 vlids. El valor %(value)r s " +"invlid." +msgstr[1] "" +"Si us plau, introdueixi IDs de %(self)s vlids. Els valors %(value)r sn " +"invlids." + +#: 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 vlida 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 vlida en format YYYY-MM-DD HH:MM." + +#: db/models/fields/__init__.py:625 +msgid "Enter a valid filename." +msgstr "Introdueixi un nom de fitxer vlid." + +#: 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 "Gals" + +#: conf/global_settings.py:44 +msgid "Danish" +msgstr "Dans" + +#: 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 "Angls" + +#: 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 "Dans" + +#: conf/global_settings.py:51 +msgid "French" +msgstr "Francs" + +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "Galleg" + +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "Hngar" + +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "Hebreu" + +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "Islands" + +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "Itali" + +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "Japons" + +#: conf/global_settings.py:58 +msgid "Latvian" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Macedonian" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Dutch" +msgstr "Holands" + +#: conf/global_settings.py:61 +msgid "Norwegian" +msgstr "Norueg" + +#: conf/global_settings.py:62 +#, fuzzy +msgid "Polish" +msgstr "Angls" + +#: conf/global_settings.py:63 +msgid "Brazilian" +msgstr "Brasileny" + +#: conf/global_settings.py:64 +msgid "Romanian" +msgstr "Rumans" + +#: conf/global_settings.py:65 +msgid "Russian" +msgstr "Rs" + +#: 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 "Xins simplificat" + +#: conf/global_settings.py:74 +msgid "Traditional Chinese" +msgstr "Xins 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 vlida; %(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 nmero enter entre -32,768 i 32,767." + +#: oldforms/__init__.py:735 +msgid "Enter a positive number." +msgstr "Introdueixi un nmero positiu." + +#: oldforms/__init__.py:745 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Introdueixi un nmero 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 " +"sn necessries 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 vlids. Tingui en " +"compte que tots dos camps son sensibles a majscules i minscules." + +#: 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 "perms" + +#: 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 "adrea de correu electrnic" + +#: contrib/auth/models.py:94 +msgid "password" +msgstr "contrasenya" + +#: contrib/auth/models.py:94 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" + +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "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 "ttol" + +#: 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, noms els usuaris registrats podran veure la pgina." + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "pgina esttica" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "pgines esttiques" + +#: 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 "encapalament" + +#: 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 vlida" + +#: 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 pblic" + +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 +msgid "IP address" +msgstr "Adrea 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 "adrea 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 annims no poden votar" + +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "ID del comentari invlid" + +#: 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 "Noms 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 ms dels caps requerits no ha estat sotms" + +#: 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 parmetre 'target' invlid -- el ID del " +"objecte era invlid" + +#: 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 "" +"

By %s:

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

    Per %s:

    \n" +"
      \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "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" +"

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

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

      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 pgina 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).

      \n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Documentaci d'aquesta pgina" + +#: 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 pgina 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 inequvoc de les " +"pgines 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 pgina d'administraci de pgines 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 pgina 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 (500)" +msgstr "Error del servidor (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Hi ha hagut un error. S'ha informat als administradors del lloc per correu " +"electrnic y hauria d'arreglar-se en breu. Grcies per la seva pacincia." + +#: 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 "Histric" + +#: 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 segents:" + +#: 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 segents 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 pgina" + +#: 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 pgina 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 perms 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 %(username)s." +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 "Grcies 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 pgina:" + +#: 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 "Grcies 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'adrea de correu electrnic 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 adrea de correu " +"electrnic i crearem una nova que li enviarem per correu." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Adrea de correu electrnic:" + +#: 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 ms %(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 ms %(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 histric: %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 " +"pgina 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 adrea 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 pgina" + +#: 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 "Adrea de correu electrnic" + +#: 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 "Nmero 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 "Nmero de telfon" + +#: 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 majscules)" + +#: 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 nmero 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 potncia 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 vlid." + +#: newforms/fields.py:190 +#, fuzzy +msgid "Enter a valid time." +msgstr "Introdueixi un nom de fitxer vlid." + +#: newforms/fields.py:226 +#, fuzzy +msgid "Enter a valid date/time." +msgstr "Introdueixi un nom de fitxer vlid." + +#: newforms/fields.py:240 +#, fuzzy +msgid "Enter a valid value." +msgstr "Introdueixi un nom de fitxer vlid." + +#: newforms/fields.py:269 core/validators.py:161 +msgid "Enter a valid e-mail address." +msgstr "Introdueixi una adrea de correu vlida." + +#: newforms/fields.py:287 newforms/fields.py:309 +#, fuzzy +msgid "Enter a valid URL." +msgstr "Introdueixi un nom de fitxer vlid." + +#: newforms/fields.py:311 +#, fuzzy +msgid "This URL appears to be a broken link." +msgstr "La URL %ss 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 vlida; %(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 vlid." + +#: newforms/fields.py:386 +#, fuzzy, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Esculli una opci vlida; %(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 noms nmeros, 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 noms lletres, nmeros, 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 noms lletres, nmeros, guions, guions baixos, i " +"barres (/)." + +#: core/validators.py:76 +msgid "Uppercase letters are not allowed here." +msgstr "No es permeten majscules aqu." + +#: core/validators.py:80 +msgid "Lowercase letters are not allowed here." +msgstr "No es permeten minscules aqu." + +#: core/validators.py:87 +msgid "Enter only digits separated by commas." +msgstr "Introdueixi noms dgits separats per comes." + +#: core/validators.py:99 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Introdueixi adreces de correu electrnic vlides separades per comes." + +#: core/validators.py:103 +msgid "Please enter a valid IP address." +msgstr "Per favor introdueixi una adrea IP vlida." + +#: 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 numrics." + +#: core/validators.py:115 +msgid "This value can't be comprised solely of digits." +msgstr "Aquest valor no pot contenir noms dgits." + +#: core/validators.py:124 +msgid "Only alphabetical characters are allowed here." +msgstr "Noms s'admeted caracters alfabtics 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 vlida 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 vilda. 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 vlida." + +#: core/validators.py:188 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" +"El nmeros de telfon han de guardar-se en el format XXX-XXX-XXXX. \"%s\" no " +"s vlid." + +#: 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 vlid." + +#: core/validators.py:200 +msgid "A valid URL is required." +msgstr "Es precisa d'una URL vlida." + +#: core/validators.py:214 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Es precisa HTML vlid. Els errors especfics sn:\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 %ss un enlla trencat." + +#: core/validators.py:251 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Introdueixi una abreviatura vlida 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 potncia de %s." + +#: core/validators.py:366 +#, fuzzy, python-format +msgid "This value must be at least %s." +msgstr "Aquest valor ha de ser una potncia 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 potncia de %s." + +#: core/validators.py:404 +#, python-format +msgid "This value must be a power of %s." +msgstr "Aquest valor ha de ser una potncia de %s." + +#: core/validators.py:415 +msgid "Please enter a valid decimal number." +msgstr "Si us plau, introdueixi un nmero decimal vlid." + +#: 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 nmero decimal vlid amb no ms de %s digit." +msgstr[1] "" +"Si us plau, introdueixi un nmero decimal vlid amb no ms 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 nmero decimal vlid amb no ms de %s digit." +msgstr[1] "" +"Si us plau, introdueixi un nmero decimal vlid amb no ms 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 nmero decimal vlid amb no ms de %s digit " +"decimal." +msgstr[1] "" +"Si us plau, introdueixi un nmero decimal vlid amb no ms 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 mnim, %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 mxim %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 vlid." + +#: 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 vlida." + +#: 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 " +"comena 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 comena en la linea %(line)s no est perms en aquest " +"contexte. (La linea comena 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 vlido. (La linea " +"comena 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 vlida. (La lnea " +"comena 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 ms atributs requerits.(La " +"linea comena 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 vlid. " +"(La linea comena per \"%(start)s\".)" + +#~ msgid "Have you forgotten your password?" +#~ msgstr "Ha oblidat la seva clau?" + +#~ msgid "Use '[algo]$[salt]$[hexdigest]'" +#~ msgstr "Utilitzi '[algo]$[salt]$[hexdigest]'" diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.mo b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..412c2eb876 Binary files /dev/null and b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.po b/django/conf/locale/ca/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..8903957b86 --- /dev/null +++ b/django/conf/locale/ca/LC_MESSAGES/djangojs.po @@ -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 , 2005. +# Marc Fargas , 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 \n" +"Language-Team: \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 "Cancellar" + +#: 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 "" diff --git a/django/conf/locale/cs/LC_MESSAGES/django.mo b/django/conf/locale/cs/LC_MESSAGES/django.mo index 8984023810..c2f04edb81 100644 Binary files a/django/conf/locale/cs/LC_MESSAGES/django.mo and b/django/conf/locale/cs/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/cs/LC_MESSAGES/django.po b/django/conf/locale/cs/LC_MESSAGES/django.po index cdbb124c94..0dcc31394c 100644 --- a/django/conf/locale/cs/LC_MESSAGES/django.po +++ b/django/conf/locale/cs/LC_MESSAGES/django.po @@ -8,15 +8,14 @@ msgstr "" "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 \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 @@ msgid "is public" 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 @@ msgstr "Neplatné ID komentáře" 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 @@ msgstr[2] "" "\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 @@ msgstr "" "\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 @@ msgid "Username:" 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 @@ msgstr "Zapomenuté heslo?" 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 @@ msgstr "Volitelné" 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 @@ msgstr "" #: 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 @@ msgstr "log záznam" 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 @@ msgstr "Dokumentace" #: 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 @@ msgstr "Změnit heslo" #: 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 @@ msgstr "Je nám líto, ale vyžádaná stránka nebyla nalezena." 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 @@ msgstr "%(name)s: přidat" msgid "Have you forgotten your password?" msgstr "Zapomněl(a) jste své heslo?" -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 msgid "Welcome," msgstr "Vítejte," @@ -782,13 +863,13 @@ msgstr "Smazat" #: 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 @@ msgstr "Ano, jsem si jist" #: 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 @@ msgstr "Uložit a pokračovat v úpravách" 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 @@ msgstr "přesměrovat na" 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 @@ msgid "template name" 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 @@ msgstr "statická stránka" 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 @@ msgstr "web" 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[0] "minuta" 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 @@ msgstr "" "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[0] "Mluvte slušně! Slovo %s zde není přípustné." 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,7 +1925,15 @@ msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou celkem." 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." @@ -1739,64 +1941,79 @@ msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou 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 @@ msgstr "%(optname)s s tímto %(fieldname)s již existuje." #: 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[0] "Prosíme, vložte platná %(self)s ID. Hodnota %(value)r není platn 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[0] "Ujistěte se, že Váš text má méně než %s znak." 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" - diff --git a/django/conf/locale/da/LC_MESSAGES/django.mo b/django/conf/locale/da/LC_MESSAGES/django.mo index 668f02cbef..9f86e56407 100644 Binary files a/django/conf/locale/da/LC_MESSAGES/django.mo and b/django/conf/locale/da/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/da/LC_MESSAGES/django.po b/django/conf/locale/da/LC_MESSAGES/django.po index 9bf20cf833..7688907694 100644 --- a/django/conf/locale/da/LC_MESSAGES/django.po +++ b/django/conf/locale/da/LC_MESSAGES/django.po @@ -1,104 +1,100 @@ -# SOME DESCRIPTIVE TITLE. +# translation of django.po to Dansk +# Rune Rønde Laursen , 2006. # Copyright (C) 2005 and beyond # This file is distributed under the same license as the PACKAGE package. # Morten Bagai , Nov 2005. -# -# +# Rune Rønde Laursen , 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 \n" -"Language-Team: Danish\n" +"PO-Revision-Date: 2006-09-24 10:34+0200\n" +"Last-Translator: Rune Rønde Laursen \n" +"Language-Team: Dansk \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 @@ msgid "" "\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 @@ msgid "" "\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 @@ msgid_plural "" "\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 @@ msgid "" "\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 @@ msgid "Password:" 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 @@ msgstr "Log ud" #: 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 @@ msgid "" "

      By %s:

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

        Af %s:

        \n" +"
          \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 @@ msgstr "handlingstid" #: 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 @@ msgstr "logmeddelelser" #: 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 @@ msgstr "Log ind" 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 @@ msgstr "" #: 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 @@ msgstr "" #: 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 @@ msgstr "Serverfejl (500)" 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 @@ msgstr "Siden blev ikke fundet" #: 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 @@ msgstr "Tilføj" #: 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 @@ msgstr "Ingen tilgængelige" #: 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 forgotten your password?" @@ -780,12 +769,12 @@ msgstr "Har du glemt din adgangskode?" #: 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 @@ msgid "" "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 @@ msgstr "Ja, jeg er sikker" #: 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 @@ msgstr "Nulstil adgangskode" 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 @@ msgstr "Nulstil min adgangskode" #: 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 @@ msgstr "Adgangskoden blev nulstillet" 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 @@ msgstr "Bekræft ny adgangskode:" #: 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 @@ msgstr "Din nye adgangskode er: %(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 "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 @@ msgstr "Med venlig hilsen %(site_name)s" #: 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 @@ msgid "" "as \"internal\" (talk to your system administrator if you aren't sure if\n" "your computer is \"internal\").

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

          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\").

          \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 @@ msgid "" "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 @@ msgid "" "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 @@ msgid "redirects" 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 @@ msgid "template name" 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 @@ msgid "codename" 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 @@ msgstr "efternavn" #: 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 @@ msgstr "adgangskode" #: 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 @@ msgstr "administrationsstatus" #: 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 @@ msgstr "aktiv" #: contrib/auth/models.py:62 msgid "superuser status" -msgstr "superbruger" +msgstr "superbrugerstatus" #: contrib/auth/models.py:63 msgid "last login" @@ -1207,23 +1182,20 @@ msgid "" "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 @@ msgid "Groups" 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 @@ msgstr "vist navn" #: 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 @@ msgstr "December" #: 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 @@ msgstr "Dec." #: 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 @@ msgid "Welsh" 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 @@ msgstr "Tysk" #: conf/global_settings.py:42 msgid "Greek" -msgstr "" +msgstr "Græsk" #: conf/global_settings.py:43 msgid "English" @@ -1547,11 +1513,11 @@ msgstr "Galicisk" #: 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 @@ msgstr "Italiensk" #: 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 @@ msgid "Slovak" 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 @@ msgid "Swedish" 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 @@ msgid "This value must contain only letters, numbers and underscores." 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 @@ msgstr "Indtast kun tal adskilt af kommaer." #: 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 @@ msgstr "Dette felt kan ikke være tomt." #: 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 @@ msgstr "Indtast dato og tid i ÅÅÅÅ-MM-DD TT:MM format." #: 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 @@ msgstr "URLen %s viser ikke til en gyldig QuickTime-film." #: 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 @@ msgstr "Ugyldig URL: %s" #: 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 @@ msgstr "Dette felt skal matche '%s' feltet." #: 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 @@ msgid "Please enter a valid decimal number." 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 @@ msgstr "Kunne ikke finde noget i %s." #: 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 @@ msgid "" "\"<%(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 @@ msgid "" "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 @@ msgid "" "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 "" - -#, fuzzy -#~ msgid "Comments" -#~ msgstr "tillad kommentarer" - -#~ msgid "label" -#~ msgstr "mærkat" - -#~ msgid "package" -#~ msgstr "pakke" +msgstr "ja,nej,måske" -#~ msgid "packages" -#~ msgstr "pakker" diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo index a4f4af172e..b5c518c13c 100644 Binary files a/django/conf/locale/de/LC_MESSAGES/django.mo and b/django/conf/locale/de/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po index 99212a4f53..2f0991c8cc 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.po +++ b/django/conf/locale/de/LC_MESSAGES/django.po @@ -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 , YEAR. @@ -7,348 +6,152 @@ msgid "" 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 \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 \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" + +#: .\conf\global_settings.py:39 +msgid "Arabic" +msgstr "Arabisch" + +#: .\conf\global_settings.py:40 +msgid "Bengali" +msgstr "Bengali" -#: contrib/comments/models.py:67 contrib/comments/models.py:166 -msgid "object ID" -msgstr "Objekt ID" - -#: contrib/comments/models.py:68 -msgid "headline" -msgstr "berschrift" - -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "Kommentar" - -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "Bewertung #1" - -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "Bewertung #2" - -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "Bewertung #3" - -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "Bewertung #4" - -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "Bewertung #5" - -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "Bewertung #6" - -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "Bewertung #7" - -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "Bewertung #8" - -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "ist eine Bewertung" - -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "Datum/Zeit Erstellung" - -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -msgid "is public" -msgstr "ist ffentlich" - -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -msgid "IP address" -msgstr "IP-Adresse" - -#: contrib/comments/models.py:86 -msgid "is removed" -msgstr "ist gelscht" - -#: 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." - -#: contrib/comments/models.py:91 -msgid "comments" -msgstr "Kommentare" - -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "Inhaltsobjekt" - -#: 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" - -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "Autorname" - -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "IP-Adresse" - -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "Besttigt vom Betreiber" - -#: contrib/comments/models.py:176 -msgid "free comment" -msgstr "Freier Kommentar" - -#: contrib/comments/models.py:177 -msgid "free comments" -msgstr "Freie Kommentare" - -#: contrib/comments/models.py:233 -msgid "score" -msgstr "Bewertung" - -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "Bewertungsdatum" - -#: contrib/comments/models.py:237 -msgid "karma score" -msgstr "Karma Bewertung" - -#: contrib/comments/models.py:238 -msgid "karma scores" -msgstr "Karma Bewertungen" - -#: 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:41 +msgid "Czech" +msgstr "Tschechisch" -#: 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:42 +msgid "Welsh" +msgstr "Walisisch" -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "Kennzeichnungsdatum" +#: .\conf\global_settings.py:43 +msgid "Danish" +msgstr "Dänisch" -#: contrib/comments/models.py:268 -msgid "user flag" -msgstr "Benutzerkennzeichnung" +#: .\conf\global_settings.py:44 +msgid "German" +msgstr "Deutsch" -#: contrib/comments/models.py:269 -msgid "user flags" -msgstr "Benutzerkennzeichnungen" +#: .\conf\global_settings.py:45 +msgid "Greek" +msgstr "Griechisch" -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "Gekennzeichnet von %r" +#: .\conf\global_settings.py:46 +msgid "English" +msgstr "Englisch" -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "Lschdatum" +#: .\conf\global_settings.py:47 +msgid "Spanish" +msgstr "Spanisch" -#: contrib/comments/models.py:280 -msgid "moderator deletion" -msgstr "Lschung vom Moderator" +#: .\conf\global_settings.py:48 +msgid "Argentinean Spanish" +msgstr "Argentinisches Spanisch" -#: contrib/comments/models.py:281 -msgid "moderator deletions" -msgstr "Lschungen vom Moderator" +#: .\conf\global_settings.py:49 +msgid "Finnish" +msgstr "Finnisch" -#: contrib/comments/models.py:285 -#, python-format -msgid "Moderator deletion by %r" -msgstr "Vom Moderator %r gelscht" +#: .\conf\global_settings.py:50 +msgid "French" +msgstr "Französisch" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Anonyme Benutzer knnen nicht abstimmen" +#: .\conf\global_settings.py:51 +msgid "Galician" +msgstr "Galicisch" -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "Ungltige Kommentar-ID" +#: .\conf\global_settings.py:52 +msgid "Hungarian" +msgstr "Ungarisch" -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "Keine Abstimmung bei Dir selber" +#: .\conf\global_settings.py:53 +msgid "Hebrew" +msgstr "Hebräisch" -#: 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." +#: .\conf\global_settings.py:54 +msgid "Icelandic" +msgstr "Isländisch" -#: 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" +#: .\conf\global_settings.py:55 +msgid "Italian" +msgstr "Italienisch" -#: 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 einschtzbaren Benutzer:\n" -"\n" -"%(text)s" +#: .\conf\global_settings.py:56 +msgid "Japanese" +msgstr "Japanisch" -#: contrib/comments/views/comments.py:189 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Nur POST ist erlaubt" +#: .\conf\global_settings.py:57 +msgid "Dutch" +msgstr "Holländisch" -#: 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" +#: .\conf\global_settings.py:58 +msgid "Norwegian" +msgstr "Norwegisch" -#: 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)" +#: .\conf\global_settings.py:59 +msgid "Polish" +msgstr "Polnisch" -#: 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 ungltig." +#: .\conf\global_settings.py:60 +msgid "Brazilian" +msgstr "Brasilianisch" -#: 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" +#: .\conf\global_settings.py:61 +msgid "Romanian" +msgstr "Rumänisch" -#: 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:" +#: .\conf\global_settings.py:62 +msgid "Russian" +msgstr "Russisch" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Passwort:" +#: .\conf\global_settings.py:63 +msgid "Slovak" +msgstr "Slowakisch" -#: 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" +#: .\conf\global_settings.py:64 +msgid "Slovenian" +msgstr "Slowenisch" -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "Bewertungen" +#: .\conf\global_settings.py:65 +msgid "Serbian" +msgstr "Serbisch" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "Erforderlich" +#: .\conf\global_settings.py:66 +msgid "Swedish" +msgstr "Schwedisch" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "Optional" +#: .\conf\global_settings.py:67 +msgid "Tamil" +msgstr "Tamilisch" -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "Ein Bild verffentlichen" +#: .\conf\global_settings.py:68 +msgid "Turkish" +msgstr "Türkisch" -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "Kommentar:" +#: .\conf\global_settings.py:69 +msgid "Ukrainian" +msgstr "Ukrainisch" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -msgid "Preview comment" -msgstr "Kommentarvorschau" +#: .\conf\global_settings.py:70 +msgid "Simplified Chinese" +msgstr "Vereinfachtes Chinesisch" -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Ihr Name:" +#: .\conf\global_settings.py:71 +msgid "Traditional Chinese" +msgstr "Traditionelles Chinesisch" -#: contrib/admin/filterspecs.py:40 +#: .\contrib\admin\filterspecs.py:40 #, python-format msgid "" "

          By %s:

          \n" @@ -357,1642 +160,2066 @@ msgstr "" "

          Nach %s:

          \n" "
            \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 "Logeintrge" - -#: contrib/admin/templatetags/admin_list.py:228 -msgid "All dates" -msgstr "Alle Tage" +msgstr "Logeinträge" -#: 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 " -"bercksichtigen die Gro-/Kleinschreibung." +#: .\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:23 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Anmelden" +#: .\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\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 " -"Beitrge 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 knnen das Zeichen '@' nicht enthalten." +#: .\contrib\admin\templates\admin\500.html.py:9 +msgid "Server Error (500)" +msgstr "Serverfehler (500)" -#: 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 hinzugefgt." +#: .\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 gendert werden." - -#: 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\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\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 zufgen" +#: .\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 hinzugefgt." +#: .\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 gendert" +#: .\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 gelscht." +#: .\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 gendert." +#: .\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 gendert." +#: .\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 zugefgt. Das Element kann jetzt " -"gendert 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 gelscht." +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 -#, python-format -msgid "Select %s" -msgstr "%s auswhlen" +#: .\contrib\admin\templates\admin\filters.html.py:4 +msgid "Filter" +msgstr "Filter" -#: contrib/admin/views/main.py:565 +#: .\contrib\admin\templates\admin\index.html.py:17 #, python-format -msgid "Select %s to change" -msgstr "%s zur nderung auswhlen" - -#: 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/views/doc.py:278 -msgid "Boolean (Either True or False)" -msgstr "Wahrheitswert (Wahr oder Falsch)" +msgid "Models available in the %(name)s application." +msgstr "Modelle, die in der Anwendung %(name)s vorhanden sind." -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#: .\contrib\admin\templates\admin\index.html.py:18 #, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Zeichenkette (bis zu %(maxlength)s Zeichen)" - -#: contrib/admin/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "Kommaseparierte Liste von Zahlen" +msgid "%(name)s" +msgstr "%(name)s" -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "Datum (ohne Zeit)" - -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "Datum (mit Zeit)" - -#: contrib/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "E-mail-Adresse" - -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "Dateipfad" - -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "Dezimalzahl" - -#: contrib/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "Wahrheitswert (Wahr, Falsch oder Nichts)" - -#: contrib/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "Beziehung zum bermodell" +#: .\contrib\admin\templates\admin\index.html.py:34 +msgid "Change" +msgstr "Ändern" -#: contrib/admin/views/doc.py:293 -msgid "Phone number" -msgstr "Telefonnummer" +#: .\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:298 -msgid "Text" -msgstr "Text" +#: .\contrib\admin\templates\admin\index.html.py:52 +msgid "Recent Actions" +msgstr "Kürzliche Aktionen" -#: contrib/admin/views/doc.py:299 -msgid "Time" -msgstr "Zeit" +#: .\contrib\admin\templates\admin\index.html.py:53 +msgid "My Actions" +msgstr "Meine Aktionen" -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" +#: .\contrib\admin\templates\admin\index.html.py:57 +msgid "None available" +msgstr "Keine vorhanden" -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "U.S. Bundesstaat (zwei Grossbuchstaben)" +#: .\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:302 -msgid "XML text" -msgstr "XML Text" - -#: 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\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/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/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\login.html.py:20 +#: .\contrib\comments\templates\comments\form.html.py:8 +msgid "Password:" +msgstr "Passwort:" -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "Geschichte" +#: .\contrib\admin\templates\admin\login.html.py:25 +#: .\contrib\admin\views\decorators.py:24 +msgid "Log in" +msgstr "Anmelden" -#: contrib/admin/templates/admin/object_history.html:18 +#: .\contrib\admin\templates\admin\object_history.html.py:18 msgid "Date/time" msgstr "Datum/Zeit" -#: contrib/admin/templates/admin/object_history.html:19 +#: .\contrib\admin\templates\admin\object_history.html.py:19 msgid "User" msgstr "Benutzer" -#: contrib/admin/templates/admin/object_history.html:20 +#: .\contrib\admin\templates\admin\object_history.html.py:20 msgid "Action" msgstr "Aktion" -#: contrib/admin/templates/admin/object_history.html:26 +#: .\contrib\admin\templates\admin\object_history.html.py: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 "" -"Dieses Objekt hat keine nderungsgeschichte. Es wurde mglicherweise nicht " -"ber diese Verwaltungsseiten angelegt." - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Django Systemverwaltung" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Django Verwaltung" +#: .\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/templates/admin/500.html:4 -msgid "Server error" -msgstr "Serverfehler" +#: .\contrib\admin\templates\admin\pagination.html.py:10 +msgid "Show all" +msgstr "Zeige alle" -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Serverfehler (500)" +#: .\contrib\admin\templates\admin\search_form.html.py:8 +msgid "Go" +msgstr "Los" -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Serverfehler (500)" +#: .\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/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 fr Ihr " -"Verstndnis." +#: .\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/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Seite nicht gefunden" +#: .\contrib\admin\templates\admin\submit_line.html.py:4 +msgid "Save as new" +msgstr "Als neu sichern" -#: 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\submit_line.html.py:5 +msgid "Save and add another" +msgstr "Sichern und neu hinzufügen" -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "" +#: .\contrib\admin\templates\admin\submit_line.html.py:6 +msgid "Save and continue editing" +msgstr "Sichern und weiter bearbeiten" -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Zufgen" +#: .\contrib\admin\templates\admin\submit_line.html.py:7 +msgid "Save" +msgstr "Sichern" -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "ndern" +#: .\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/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "Sie haben keine Berechtigung irgendwas zu ndern." +#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:12 +msgid "Username" +msgstr "Benutzername" -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Krzliche Aktionen" +#: .\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/index.html:53 -msgid "My Actions" -msgstr "Meine Aktionen" +#: .\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/index.html:57 -msgid "None available" -msgstr "Keine vorhanden" +#: .\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/change_list.html:11 +#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:28 #, python-format -msgid "Add %(name)s" -msgstr "%(name)s zufgen" - -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Haben Sie ihr Passwort vergessen?" +msgid "Enter a new password for the user %(username)s." +msgstr "Bitte geben Sie ein neues Passwort für den Benutzer %(username)s ein." -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Willkommen," - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Lschen" +#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3 +msgid "Bookmarklets" +msgstr "Bookmarklets" -#: 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 "" -"Die Lschung des %(object_name)s '%(object)s' htte die Lschung von " -"abhngigen Daten zur Folge, aber Sie haben nicht die ntigen Rechte um die " -"folgenden abhngigen Daten zu lschen:" +#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:5 +msgid "Documentation bookmarklets" +msgstr "Dokumentations-Bookmarklets" -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, python-format +#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:9 msgid "" -"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " -"the following related items will be deleted:" +"\n" +"

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

            \n" msgstr "" -"Sind Sie sicher, das Sie %(object_name)s \"%(object)s\" lschen wollen? Es " -"werden zustzlich die folgenden abhngigen Daten mit gelscht:" - -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "Ja, ich bin sicher" +"\n" +"

            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.

            \n" -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(title)s " -msgstr " Nach %(title)s " +#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:19 +msgid "Documentation for this page" +msgstr "Dokumentation für diese Seite" -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Los" +#: .\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/change_form.html:21 -msgid "View on site" -msgstr "Im Web Anzeigen" +#: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:22 +msgid "Show object ID" +msgstr "Objekt-ID anzeigen" -#: 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\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/change_form.html:48 -msgid "Ordering" -msgstr "Sortierung" +#: .\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/change_form.html:51 -msgid "Order:" -msgstr "Reihenfolge:" +#: .\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/submit_line.html:4 -msgid "Save as new" -msgstr "Als Neu sichern" +#: .\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/submit_line.html:5 -msgid "Save and add another" -msgstr "Sichern und neu hinzufgen" +#: .\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/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Sichern und weiter bearbeiten" +#: .\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/submit_line.html:7 -msgid "Save" -msgstr "Sichern" +#: .\contrib\admin\templates\registration\logged_out.html.py:10 +msgid "Log in again" +msgstr "Erneut anmelden" -#: 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 +#: .\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 "Kennwort ndern" +msgstr "Passwort ändern" -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 +#: .\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 "Kennwortnderung erfolgreich" +msgstr "Passwort erfolgreich geändert" -#: contrib/admin/templates/registration/password_change_done.html:12 +#: .\contrib\admin\templates\registration\password_change_done.html.py:12 msgid "Your password was changed." -msgstr "Ihr Kennwort wurde gendert." - -#: 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 zurcksetzen" - -#: 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/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "E-Mail-Adresse:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Mein Kennwort zurcksetzen" - -#: 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/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Erneut Anmelden" - -#: 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 zurckgesetzt" - -#: 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 Krze ankommen." +msgstr "Ihr Passwort wurde geändert." -#: 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 Sicherheitsgrnden erst Ihr altes Kennwort und darunter " -"dann zweimal (um sicherzustellen, das Sie es korrekt eingegeben haben) das " -"neue Kennwort ein." +#: .\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/registration/password_change_form.html:17 +#: .\contrib\admin\templates\registration\password_change_form.html.py:17 msgid "Old password:" -msgstr "altes Kennwort:" +msgstr "Altes Passwort:" -#: contrib/admin/templates/registration/password_change_form.html:19 +#: .\contrib\admin\templates\registration\password_change_form.html.py:19 msgid "New password:" -msgstr "neues Kennwort:" +msgstr "Neues Passwort:" -#: contrib/admin/templates/registration/password_change_form.html:21 +#: .\contrib\admin\templates\registration\password_change_form.html.py:21 msgid "Confirm password:" -msgstr "Kennwortwiederholung:" +msgstr "Passwort wiederholen:" -#: contrib/admin/templates/registration/password_change_form.html:23 +#: .\contrib\admin\templates\registration\password_change_form.html.py:23 msgid "Change my password" -msgstr "Mein Kennwort ndern" +msgstr "Mein Passwort ändern" + +#: .\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/registration/password_reset_email.html:2 +#: .\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 Mail, weil Sie ein neues Kennwort" +msgstr "Sie erhalten diese E-Mail, weil Sie ein neues Passwort" -#: contrib/admin/templates/registration/password_reset_email.html:3 +#: .\contrib\admin\templates\registration\password_reset_email.html.py:3 #, python-format msgid "for your user account at %(site_name)s" -msgstr "fr ihren Benutzer bei %(site_name)s angefordert haben." +msgstr "für Ihren Benutzer bei %(site_name)s angefordert haben." -#: contrib/admin/templates/registration/password_reset_email.html:5 +#: .\contrib\admin\templates\registration\password_reset_email.html.py:5 #, python-format msgid "Your new password is: %(new_password)s" -msgstr "Ihr neues Kennwort ist: %(new_password)s" +msgstr "Ihr neues Passwort lautet: %(new_password)s" -#: contrib/admin/templates/registration/password_reset_email.html:7 +#: .\contrib\admin\templates\registration\password_reset_email.html.py:7 msgid "Feel free to change this password by going to this page:" -msgstr "Sie knnen das Kennwort auf folgender Seite ndern:" +msgstr "Sie können das Passwort auf folgender Seite ändern:" -#: contrib/admin/templates/registration/password_reset_email.html:11 +#: .\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:13 +#: .\contrib\admin\templates\registration\password_reset_email.html.py:13 msgid "Thanks for using our site!" -msgstr "Vielen Dank, das Sie unsere Seiten benutzen!" +msgstr "Vielen Dank, dass Sie unsere Seiten benutzen!" -#: contrib/admin/templates/registration/password_reset_email.html:15 +#: .\contrib\admin\templates\registration\password_reset_email.html.py:15 #, python-format msgid "The %(site_name)s team" msgstr "Das Team von %(site_name)s" -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Bookmarklets" +#: .\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_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Dokumentations-Bookmarklets" +#: .\contrib\admin\templates\registration\password_reset_form.html.py:16 +msgid "E-mail address:" +msgstr "E-Mail-Adresse:" -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

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

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

            Um Bookmarklets zu installieren mssen diese Links in die\n" -"Browser-Werkzeugleiste gehzogen werden, oder mittels rechter Maustaste in " -"die\n" -"Bookmarks gespeichert werden. Danach knnen die Bookmarklets von jeder " -"Seite\n" -"aufgerufen werden. Einige Bookmarklets sind fr den Zugriff von 'internen'\n" -"Rechnern eingeschrnkt. Falls nicht klar ist, ob ein Rechner als 'intern'\n" -"bewertet wird, bitte den Administrator fragen.

            \n" +#: .\contrib\admin\templates\registration\password_reset_form.html.py:16 +msgid "Reset my password" +msgstr "Mein Passwort zurücksetzen" -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Dokumentation fr diese Seite" +#: .\contrib\admin\templates\widget\date_time.html.py:3 +msgid "Date:" +msgstr "Datum:" -#: 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 fr den View der diese Seite " -"erzeugt." +#: .\contrib\admin\templates\widget\date_time.html.py:4 +msgid "Time:" +msgstr "Zeit:" -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Objekt ID anzeigen" +#: .\contrib\admin\templates\widget\file.html.py:2 +msgid "Currently:" +msgstr "Derzeit:" -#: 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 fr Seiten die ein einzelnes " -"Objekt reprsentieren." +#: .\contrib\admin\templates\widget\file.html.py:3 +msgid "Change:" +msgstr "Ändern:" -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Dieses Objekt im aktuellen Fenster ndern." +#: .\contrib\admin\templatetags\admin_list.py:238 +msgid "All dates" +msgstr "Alle Tage" -#: 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 fr dieses Objekt, wenn diese Seite ein " -"Objekt reprsentiert." +#: .\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/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Dieses Objekt in einem neuen Fenster 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/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\auth.py:30 +msgid "Add user" +msgstr "Benutzer hinzufügen" -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Datum:" +#: .\contrib\admin\views\auth.py:57 +msgid "Password changed successfully." +msgstr "Passwort erfolgreich geändert." -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Zeit:" +#: .\contrib\admin\views\auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Passwort ändern: %s" -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Derzeit:" +#: .\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/widget/file.html:3 -msgid "Change:" -msgstr "ndern:" +#: .\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/redirects/models.py:7 -msgid "redirect from" -msgstr "Umleitung von" +#: .\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/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\decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Benutzernamen dürfen das Zeichen '@' nicht enthalten." -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "Umleitung zu" +#: .\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\views\doc.py:46 +#: .\contrib\admin\views\doc.py:48 +#: .\contrib\admin\views\doc.py:50 +msgid "tag:" +msgstr "Schlagwort:" + +#: .\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 "Ansicht:" + +#: .\contrib\admin\views\doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Anwendung %r nicht gefunden" -#: 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\doc.py:171 +#, python-format +msgid "Model %r not found in app %r" +msgstr "Modell %r wurde nicht in Anwendung %r gefunden" -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "Umleitung" +#: .\contrib\admin\views\doc.py:183 +#, python-format +msgid "the related `%s.%s` object" +msgstr "Das verknüpfte `%s.%s` Objekt" -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "Umleitungen" +#: .\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/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\doc.py:214 +#, python-format +msgid "related `%s.%s` objects" +msgstr "verknüpftes `%s.%s` Objekt" -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "Titel" +#: .\contrib\admin\views\doc.py:219 +#, python-format +msgid "all %s" +msgstr "Alle %s" -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "Inhalt" +#: .\contrib\admin\views\doc.py:224 +#, python-format +msgid "number of %s" +msgstr "Anzahl von %s" -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "Kommentare aktivieren" +#: .\contrib\admin\views\doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Felder am %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 "Ganzzahl" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "Name der Vorlage" +#: .\contrib\admin\views\doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "Boolscher Wert (True oder False)" -#: 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 gefllt ist, wird " -"'flatpages/default' als Standard gewhlt." +#: .\contrib\admin\views\doc.py:293 +#: .\contrib\admin\views\doc.py:311 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "Zeichenkette (bis zu %(maxlength)s Zeichen)" -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "Registrierung erforderlich" +#: .\contrib\admin\views\doc.py:294 +msgid "Comma-separated integers" +msgstr "Kommaseparierte Liste von Ganzzahlen" -#: 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, knnen nur angemeldete Benutzer diese Seite sehen." +#: .\contrib\admin\views\doc.py:295 +msgid "Date (without time)" +msgstr "Datum (ohne Uhrzeit)" -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "Webseite" +#: .\contrib\admin\views\doc.py:296 +msgid "Date (with time)" +msgstr "Datum (mit Uhrzeit)" -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "Webseiten" +#: .\contrib\admin\views\doc.py:297 +msgid "E-mail address" +msgstr "E-Mail-Adresse" + +#: .\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\views\doc.py:300 +msgid "Decimal number" +msgstr "Dezimalzahl" + +#: .\contrib\admin\views\doc.py:304 +#: .\contrib\comments\models.py:85 +msgid "IP address" +msgstr "IP-Adresse" + +#: .\contrib\admin\views\doc.py:306 +msgid "Boolean (Either True, False or None)" +msgstr "Boolscher Wert (True, False oder None)" + +#: .\contrib\admin\views\doc.py:307 +msgid "Relation to parent model" +msgstr "Beziehung zum Eltern-Modell" + +#: .\contrib\admin\views\doc.py:308 +msgid "Phone number" +msgstr "Telefonnummer" + +#: .\contrib\admin\views\doc.py:313 +msgid "Text" +msgstr "Text" + +#: .\contrib\admin\views\doc.py:314 +msgid "Time" +msgstr "Zeit" + +#: .\contrib\admin\views\doc.py:315 +#: .\contrib\flatpages\models.py:7 +msgid "URL" +msgstr "Adresse (URL)" + +#: .\contrib\admin\views\doc.py:316 +msgid "U.S. state (two uppercase letters)" +msgstr "U.S. Bundesstaat (zwei Großbuchstaben)" + +#: .\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 ist scheinbar kein urlpattern Objekt" + +#: .\contrib\admin\views\main.py:223 +msgid "Site administration" +msgstr "Website Verwaltung" + +#: .\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\admin\views\main.py:289 +#, python-format +msgid "Add %s" +msgstr "%s hinzufügen" + +#: .\contrib\admin\views\main.py:335 +#, python-format +msgid "Added %s." +msgstr "%s hinzugefügt." + +#: .\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\admin\views\main.py:337 +#, python-format +msgid "Changed %s." +msgstr "%s geändert" + +#: .\contrib\admin\views\main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "%s gelöscht." -#: contrib/auth/models.py:13 contrib/auth/models.py:26 +#: .\contrib\admin\views\main.py:342 +msgid "No fields changed." +msgstr "Keine Felder geändert." + +#: .\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\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\admin\views\main.py:391 +#, python-format +msgid "Change %s" +msgstr "%s ändern" + +#: .\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\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\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\admin\views\main.py:514 +msgid "Are you sure?" +msgstr "Sind Sie ganz sicher?" + +#: .\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 change password form." +msgstr "Die Form '[algo]$[salt]$[hexdigest]' verwenden, oder das Passwort ändern Formular 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 "" -"Zustzlich zu den manuell angelegten Rechten erhlt 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 "Persnliche 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 fr " -"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/contenttypes/models.py:28 -msgid "content type" -msgstr "Inhaltstyp" +#: .\contrib\comments\models.py:67 +#: .\contrib\comments\models.py:166 +msgid "object ID" +msgstr "Objekt-ID" -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "Inhaltstypen" +#: .\contrib\comments\models.py:68 +msgid "headline" +msgstr "Überschrift" -#: contrib/sessions/models.py:35 -msgid "session key" -msgstr "Sitzungs-ID" +#: .\contrib\comments\models.py:69 +#: .\contrib\comments\models.py:90 +#: .\contrib\comments\models.py:167 +msgid "comment" +msgstr "Kommentar" -#: contrib/sessions/models.py:36 -msgid "session data" -msgstr "Sitzungsdaten" +#: .\contrib\comments\models.py:70 +msgid "rating #1" +msgstr "Bewertung #1" -#: contrib/sessions/models.py:37 -msgid "expire date" -msgstr "Verfallsdatum" +#: .\contrib\comments\models.py:71 +msgid "rating #2" +msgstr "Bewertung #2" -#: contrib/sessions/models.py:41 -msgid "session" -msgstr "Sitzung" +#: .\contrib\comments\models.py:72 +msgid "rating #3" +msgstr "Bewertung #3" -#: contrib/sessions/models.py:42 -msgid "sessions" -msgstr "Sitzungen" +#: .\contrib\comments\models.py:73 +msgid "rating #4" +msgstr "Bewertung #4" -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "Domainname" +#: .\contrib\comments\models.py:74 +msgid "rating #5" +msgstr "Bewertung #5" -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "Anzeigename" +#: .\contrib\comments\models.py:75 +msgid "rating #6" +msgstr "Bewertung #6" -#: contrib/sites/models.py:15 -msgid "site" -msgstr "Website" +#: .\contrib\comments\models.py:76 +msgid "rating #7" +msgstr "Bewertung #7" -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "Websites" +#: .\contrib\comments\models.py:77 +msgid "rating #8" +msgstr "Bewertung #8" -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "j. N Y" +#: .\contrib\comments\models.py:82 +msgid "is valid rating" +msgstr "ist eine Bewertung" -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "j. N Y, H:i" +#: .\contrib\comments\models.py:83 +#: .\contrib\comments\models.py:169 +msgid "date/time submitted" +msgstr "Datum/Zeit Erstellung" -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "H:i" +#: .\contrib\comments\models.py:84 +#: .\contrib\comments\models.py:170 +msgid "is public" +msgstr "ist öffentlich" -#: utils/dates.py:6 -msgid "Monday" -msgstr "Montag" +#: .\contrib\comments\models.py:86 +msgid "is removed" +msgstr "ist gelöscht" -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "Dienstag" +#: .\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 "Wednesday" -msgstr "Mittwoch" +#: .\contrib\comments\models.py:91 +msgid "comments" +msgstr "Kommentare" -#: utils/dates.py:6 -msgid "Thursday" -msgstr "Donnerstag" +#: .\contrib\comments\models.py:131 +#: .\contrib\comments\models.py:207 +msgid "Content object" +msgstr "Inhaltsobjekt" -#: utils/dates.py:6 -msgid "Friday" -msgstr "Freitag" +#: .\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:7 -msgid "Saturday" -msgstr "Samstag" +#: .\contrib\comments\models.py:168 +msgid "person's name" +msgstr "Autorname" -#: utils/dates.py:7 -msgid "Sunday" -msgstr "Sonntag" +#: .\contrib\comments\models.py:171 +msgid "ip address" +msgstr "IP-Adresse" -#: utils/dates.py:14 -msgid "January" -msgstr "Januar" +#: .\contrib\comments\models.py:173 +msgid "approved by staff" +msgstr "Bestätigt vom Betreiber" -#: utils/dates.py:14 -msgid "February" -msgstr "Februar" +#: .\contrib\comments\models.py:176 +msgid "free comment" +msgstr "Freier Kommentar" -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "Mrz" +#: .\contrib\comments\models.py:177 +msgid "free comments" +msgstr "Freie Kommentare" -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "April" +#: .\contrib\comments\models.py:233 +msgid "score" +msgstr "Bewertung" -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "Mai" +#: .\contrib\comments\models.py:234 +msgid "score date" +msgstr "Bewertungsdatum" -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "Juni" +#: .\contrib\comments\models.py:237 +msgid "karma score" +msgstr "Karma Bewertung" -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "Juli" +#: .\contrib\comments\models.py:238 +msgid "karma scores" +msgstr "Karma Bewertungen" -#: utils/dates.py:15 -msgid "August" -msgstr "August" +#: .\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 "September" -msgstr "September" +#: .\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 "October" -msgstr "Oktober" +#: .\contrib\comments\models.py:265 +msgid "flag date" +msgstr "Kennzeichnungsdatum" -#: utils/dates.py:15 -msgid "November" -msgstr "November" +#: .\contrib\comments\models.py:268 +msgid "user flag" +msgstr "Benutzerkennzeichnung" -#: utils/dates.py:16 -msgid "December" -msgstr "Dezember" +#: .\contrib\comments\models.py:269 +msgid "user flags" +msgstr "Benutzerkennzeichnungen" -#: utils/dates.py:19 -msgid "jan" -msgstr "Jan" +#: .\contrib\comments\models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "Gekennzeichnet von %r" -#: utils/dates.py:19 -msgid "feb" -msgstr "Feb" +#: .\contrib\comments\models.py:278 +msgid "deletion date" +msgstr "Löschdatum" -#: utils/dates.py:19 -msgid "mar" -msgstr "Mr" +#: .\contrib\comments\models.py:280 +msgid "moderator deletion" +msgstr "Löschung vom Moderator" -#: utils/dates.py:19 -msgid "apr" -msgstr "Apr" +#: .\contrib\comments\models.py:281 +msgid "moderator deletions" +msgstr "Löschungen vom Moderator" -#: utils/dates.py:19 -msgid "may" -msgstr "Mai" +#: .\contrib\comments\models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "Vom Moderator %r gelöscht" -#: utils/dates.py:19 -msgid "jun" -msgstr "Jun" +#: .\contrib\comments\templates\comments\form.html.py:8 +msgid "Forgotten your password?" +msgstr "Passwort vergessen?" -#: utils/dates.py:20 -msgid "jul" -msgstr "Jul" +#: .\contrib\comments\templates\comments\form.html.py:12 +msgid "Ratings" +msgstr "Bewertungen" -#: 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 "Required" +msgstr "Erforderlich" -#: utils/dates.py:20 -msgid "sep" -msgstr "Sep" +#: .\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 "oct" -msgstr "Okt" +#: .\contrib\comments\templates\comments\form.html.py:23 +msgid "Post a photo" +msgstr "Ein Bild veröffentlichen" -#: utils/dates.py:20 -msgid "nov" -msgstr "Nov" +#: .\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 "dec" -msgstr "Dez" +#: .\contrib\comments\templates\comments\form.html.py:35 +#: .\contrib\comments\templates\comments\freeform.html.py:10 +msgid "Preview comment" +msgstr "Kommentarvorschau" -#: utils/dates.py:27 -msgid "Jan." -msgstr "Jan." +#: .\contrib\comments\templates\comments\freeform.html.py:4 +msgid "Your name:" +msgstr "Ihr Name:" -#: utils/dates.py:27 -msgid "Feb." -msgstr "Feb." +#: .\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:28 -msgid "Aug." -msgstr "Aug." +#: .\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 "Sept." -msgstr "Sept." +#: .\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 "Oct." -msgstr "Okt." +#: .\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 "Nov." -msgstr "Nov." +#: .\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 "Dec." -msgstr "Dez." +#: .\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/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "Jahr" -msgstr[1] "Jahre" +#: .\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:13 -msgid "month" -msgid_plural "months" -msgstr[0] "Monat" -msgstr[1] "Monate" +#: .\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:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "Woche" -msgstr[1] "Wochen" +#: .\contrib\comments\views\karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Anonyme Benutzer dürfen nicht abstimmen" -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "Tag" -msgstr[1] "Tage" +#: .\contrib\comments\views\karma.py:23 +msgid "Invalid comment ID" +msgstr "Ungültige Kommentar-ID" -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "Stunde" -msgstr[1] "Stunden" +#: .\contrib\comments\views\karma.py:25 +msgid "No voting for yourself" +msgstr "Keine Abstimmung für dich selbst" -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "Minute" -msgstr[1] "Minuten" +#: .\contrib\contenttypes\models.py:26 +msgid "python model class name" +msgstr "Python Model-Klassenname" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "Bengali" +#: .\contrib\contenttypes\models.py:29 +msgid "content type" +msgstr "Inhaltstyp" -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "Tschechisch" +#: .\contrib\contenttypes\models.py:30 +msgid "content types" +msgstr "Inhaltstypen" -#: conf/global_settings.py:39 -msgid "Welsh" -msgstr "Walisisch" +#: .\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:40 -msgid "Danish" -msgstr "Dnisch" +#: .\contrib\flatpages\models.py:9 +msgid "title" +msgstr "Titel" -#: conf/global_settings.py:41 -msgid "German" -msgstr "Deutsch" +#: .\contrib\flatpages\models.py:10 +msgid "content" +msgstr "Inhalt" -#: conf/global_settings.py:42 -msgid "Greek" -msgstr "Griechisch" +#: .\contrib\flatpages\models.py:11 +msgid "enable comments" +msgstr "Kommentare aktivieren" -#: conf/global_settings.py:43 -msgid "English" -msgstr "Englisch" +#: .\contrib\flatpages\models.py:12 +msgid "template name" +msgstr "Name der Vorlage" -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "Spanisch" +#: .\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:45 -msgid "French" -msgstr "Franzsisch" +#: .\contrib\flatpages\models.py:14 +msgid "registration required" +msgstr "Registrierung erforderlich" -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "Galicisch" +#: .\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:47 -msgid "Hungarian" -msgstr "" +#: .\contrib\flatpages\models.py:18 +msgid "flat page" +msgstr "Webseite" -#: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "Hebrisch" +#: .\contrib\flatpages\models.py:19 +msgid "flat pages" +msgstr "Webseiten" -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "Islndisch" +#: .\contrib\redirects\models.py:7 +msgid "redirect from" +msgstr "Umleitung von" -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "Italienisch" +#: .\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:51 -msgid "Japanese" -msgstr "Japanisch" +#: .\contrib\redirects\models.py:9 +msgid "redirect to" +msgstr "Umleitung zu" -#: conf/global_settings.py:52 -msgid "Dutch" -msgstr "Hollndisch" +#: .\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:53 -msgid "Norwegian" -msgstr "Norwegisch" +#: .\contrib\redirects\models.py:13 +msgid "redirect" +msgstr "Umleitung" -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "Brasilianisch" +#: .\contrib\redirects\models.py:14 +msgid "redirects" +msgstr "Umleitungen" -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "Rumnisch" +#: .\contrib\sessions\models.py:51 +msgid "session key" +msgstr "Sitzungs-ID" -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "Russisch" +#: .\contrib\sessions\models.py:52 +msgid "session data" +msgstr "Sitzungsdaten" -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "Slowakisch" +#: .\contrib\sessions\models.py:53 +msgid "expire date" +msgstr "Verfallsdatum" -#: conf/global_settings.py:58 -msgid "Slovenian" -msgstr "Slowenisch" +#: .\contrib\sessions\models.py:57 +msgid "session" +msgstr "Sitzung" -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "Serbisch" +#: .\contrib\sessions\models.py:58 +msgid "sessions" +msgstr "Sitzungen" -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "Schwedisch" +#: .\contrib\sites\models.py:10 +msgid "domain name" +msgstr "Domainname" -#: conf/global_settings.py:61 -msgid "Ukrainian" -msgstr "Ukrainisch" +#: .\contrib\sites\models.py:11 +msgid "display name" +msgstr "Anzeigename" -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "Vereinfachtes Chinesisch" +#: .\contrib\sites\models.py:15 +msgid "site" +msgstr "Website" -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "Traditionelles Chinesisch" +#: .\contrib\sites\models.py:16 +msgid "sites" +msgstr "Websites" -#: 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 Schrgstriche " -"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 "Grobuchstaben 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, gltige 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 gltige 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 gltiges 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 gltige 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 gltige 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 gltige 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: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:155 +#: .\core\validators.py:184 #, python-format msgid "The URL %s does not point to a valid image." -msgstr "Die URL %s zeigt nicht auf ein gltiges Bild." +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 mssen im Format XXX-XXX-XXXX sein. \"%s\" ist ungltig." +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 gltiges 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 gltige 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 gltiges 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 "Ungltiges XML: %s" +msgstr "Ungültiges XML: %s" -#: core/validators.py:202 +#: .\core\validators.py:238 #, python-format msgid "Invalid URL: %s" -msgstr "Ungltige 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 gltige Abkrzung fr 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 Wrter %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 ausfllen." +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 ausfllen, 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 gefllt 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 gefllt 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 gltige 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 gltige Dezimalzahl mit maximal %s Ziffer eingeben." -msgstr[1] "Bitte eine gltige 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: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:352 +#: .\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 gltige Dezimalzahl mit maximal %s Dezimalstelle eingeben." -msgstr[1] "" -"Bitte eine gltige 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 fr 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 ungltig." +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 schlieen. 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 ungltig. 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 ungltig. 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 ungltigen 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 fr dieses '%(field)" -"s'." +msgstr "Ein '%(object)s' in dieser '%(type)s' existiert bereits für dieses '%(field)s'." + +#: .\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/__init__.py:40 +#: .\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 gltigen 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 gltiges '%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 knnen 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 gedrckt 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 gltige IDs fr %(self)s eingeben. Der Wert %(value)r ist ungltig." -msgstr[1] "" -"Bitte gltige IDs fr %(self)s eingeben. Die Werte %(value)r sind ungltig." +msgid "Ensure this value is greater than or equal to %s." +msgstr "Dieser Wert muss größer oder gleich %s sein." + +#: .\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." -#: forms/__init__.py:380 +#: .\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 "Zeilenumbrche 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 gltige 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 ausgewhlte 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" + diff --git a/django/conf/locale/de/LC_MESSAGES/djangojs.mo b/django/conf/locale/de/LC_MESSAGES/djangojs.mo index dc92386f0b..9f39c16444 100644 Binary files a/django/conf/locale/de/LC_MESSAGES/djangojs.mo and b/django/conf/locale/de/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/de/LC_MESSAGES/djangojs.po b/django/conf/locale/de/LC_MESSAGES/djangojs.po index c39bcd067f..3c0852ebac 100644 --- a/django/conf/locale/de/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/de/LC_MESSAGES/djangojs.po @@ -9,7 +9,7 @@ msgstr "" "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 \n" +"Last-Translator: Dirk Eschler \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" @@ -21,11 +21,11 @@ msgstr "Verf #: contrib/admin/media/js/SelectFilter2.js:41 msgid "Choose all" -msgstr "alles auswhlen" +msgstr "Alles auswhlen" #: contrib/admin/media/js/SelectFilter2.js:46 msgid "Add" -msgstr "Zufgen" +msgstr "Hinzufgen" #: contrib/admin/media/js/SelectFilter2.js:48 msgid "Remove" @@ -42,7 +42,7 @@ msgstr "Gew #: contrib/admin/media/js/SelectFilter2.js:59 msgid "Clear all" -msgstr "alles abwhlen" +msgstr "Alles abwhlen" #: contrib/admin/media/js/dateparse.js:26 #: contrib/admin/media/js/calendar.js:24 @@ -89,7 +89,7 @@ msgstr "Mittag" #: 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 @@ msgstr "Gestern" #: 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" + diff --git a/django/conf/locale/el/LC_MESSAGES/django.mo b/django/conf/locale/el/LC_MESSAGES/django.mo index 1c95d6b5d9..4a7d8e41f0 100644 Binary files a/django/conf/locale/el/LC_MESSAGES/django.mo and b/django/conf/locale/el/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/el/LC_MESSAGES/django.po b/django/conf/locale/el/LC_MESSAGES/django.po index 173b300d04..06099eb9da 100644 --- a/django/conf/locale/el/LC_MESSAGES/django.po +++ b/django/conf/locale/el/LC_MESSAGES/django.po @@ -107,6 +107,11 @@ msgid "" "\n" "http://%(domain)s%(url)s" msgstr "" +"Σχόλιο από τον/την %(user)s την %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" #: contrib/comments/models.py:168 msgid "person's name" @@ -141,11 +146,11 @@ msgstr "ημερομηνία βαθμολογίας" #: contrib/comments/models.py:237 #, fuzzy msgid "karma score" -msgstr "βαθμολογία" +msgstr "karma" #: contrib/comments/models.py:238 msgid "karma scores" -msgstr "" +msgstr "karma" #: contrib/comments/models.py:242 #, python-format @@ -159,7 +164,7 @@ msgid "" "\n" "%(text)s" msgstr "" -"Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n" +"Αυτο το σχόλιο σημειώθηκε απο %(χρήστη)ες\n" "\n" "%(κείμενο)α" @@ -245,7 +250,7 @@ msgstr "" #: contrib/comments/views/comments.py:193 #: contrib/comments/views/comments.py:284 msgid "One or more of the required fields wasn't submitted" -msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υποβλίθει" +msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υπεβλήθει" #: contrib/comments/views/comments.py:197 #: contrib/comments/views/comments.py:286 @@ -268,7 +273,7 @@ msgstr "" #: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/login.html:17 msgid "Username:" -msgstr "" +msgstr "Όνομα χρήστη:" #: contrib/comments/templates/comments/form.html:6 #: contrib/admin/templates/admin/login.html:20 @@ -298,21 +303,21 @@ msgstr "Ξεχάσατε τον κωδικό σας;" #: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/model_index.html:5 msgid "Log out" -msgstr "" +msgstr "Αποσύνδεση" #: contrib/comments/templates/comments/form.html:12 msgid "Ratings" -msgstr "" +msgstr "Βαθμολογίες" #: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:23 msgid "Required" -msgstr "" +msgstr "Απαραίτητο" #: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:23 msgid "Optional" -msgstr "" +msgstr "Προαιρετικό" #: contrib/comments/templates/comments/form.html:23 msgid "Post a photo" @@ -326,11 +331,11 @@ msgstr "Σχόλιο:" #: contrib/comments/templates/comments/form.html:32 #: contrib/comments/templates/comments/freeform.html:9 msgid "Preview comment" -msgstr "" +msgstr "Προεπισκόπηση σχολίου" #: contrib/comments/templates/comments/freeform.html:4 msgid "Your name:" -msgstr "" +msgstr "Το όνομα σας:" #: contrib/admin/filterspecs.py:40 #, python-format @@ -338,15 +343,17 @@ msgid "" "

            By %s:

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

              Από %s:

              \n" +"
                \n" #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 #: contrib/admin/filterspecs.py:143 msgid "All" -msgstr "" +msgstr "Όλα" #: contrib/admin/filterspecs.py:109 msgid "Any date" -msgstr "" +msgstr "Όλες οι ημερομηνίες" #: contrib/admin/filterspecs.py:110 msgid "Today" @@ -354,7 +361,7 @@ msgstr "Σήμερα" #: contrib/admin/filterspecs.py:113 msgid "Past 7 days" -msgstr "" +msgstr "Τις προηγούμενες 7 ημέρες" #: contrib/admin/filterspecs.py:115 msgid "This month" @@ -374,7 +381,7 @@ msgstr "Όχι" #: contrib/admin/filterspecs.py:150 msgid "Unknown" -msgstr "’γνωστο" +msgstr "Άγνωστο" #: contrib/admin/models.py:16 msgid "action time" @@ -441,7 +448,7 @@ msgstr "" #: contrib/admin/views/decorators.py:82 msgid "Usernames cannot contain the '@' character." -msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'." +msgstr "Τα ονόματα των χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'." #: contrib/admin/views/decorators.py:84 #, python-format @@ -452,16 +459,16 @@ msgstr "" #: contrib/admin/views/main.py:226 msgid "Site administration" -msgstr "Διαχείριση του Διαδυκτιακού χώρου" +msgstr "Διαχείριση του Διαδικτυακού χώρου" #: contrib/admin/views/main.py:260 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "" +msgstr "Το %(name)s \"%(obj)s\" αποθηκεύτηκε επιτυχώς." #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 msgid "You may edit it again below." -msgstr "" +msgstr "Μπορείτε να το επεξεργαστείτε ξανα παρακάτω." #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 #, python-format @@ -471,12 +478,12 @@ msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s απο #: contrib/admin/views/main.py:290 #, python-format msgid "Add %s" -msgstr "" +msgstr "Προσθήκη %s" #: contrib/admin/views/main.py:336 #, python-format msgid "Added %s." -msgstr "" +msgstr "Προστέθηκε %s." #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:340 @@ -486,32 +493,33 @@ msgstr "και" #: contrib/admin/views/main.py:338 #, python-format msgid "Changed %s." -msgstr "" +msgstr "Επεξεργάσθηκε %s." #: contrib/admin/views/main.py:340 #, python-format msgid "Deleted %s." -msgstr "" +msgstr "Διεγράφη %s." #: contrib/admin/views/main.py:343 msgid "No fields changed." -msgstr "" +msgstr "Κανένα πεδίο δεν άλλαξε." #: contrib/admin/views/main.py:346 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "" +msgstr "Το %(name)s \"%(obj)s\" επεξεργάσθηκε επιτυχώς." #: contrib/admin/views/main.py:354 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "" +"Το %(name)s \"%(obj)s\" αποθηκεύθηκε επιτυχώς. Μπορείτε να το επεξεργαστείτε πάλι παρακάτω." #: contrib/admin/views/main.py:392 #, python-format msgid "Change %s" -msgstr "" +msgstr "Αλλαγή %s" #: contrib/admin/views/main.py:470 #, python-format @@ -535,17 +543,17 @@ msgstr "Είστε σίγουρος;" #: contrib/admin/views/main.py:533 #, python-format msgid "Change history: %s" -msgstr "" +msgstr "Ιστορικό Αλλαγών: %s" #: contrib/admin/views/main.py:565 #, python-format msgid "Select %s" -msgstr "" +msgstr "Επιλογή %s" #: contrib/admin/views/main.py:565 #, python-format msgid "Select %s to change" -msgstr "" +msgstr "Επιλέξτε %s προς αλλαγή" #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 @@ -555,7 +563,7 @@ msgstr "Ακέραιος" #: contrib/admin/views/doc.py:278 msgid "Boolean (Either True or False)" -msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)" +msgstr "Boolean (Είτε Αληθές ή Ψέυδές)" #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 #, python-format @@ -580,7 +588,7 @@ msgstr "Ηλεκτρονική διεύθυνση" #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 msgid "File path" -msgstr "" +msgstr "Τοποθεσία Αρχείου" #: contrib/admin/views/doc.py:285 msgid "Decimal number" @@ -592,7 +600,7 @@ msgstr "" #: contrib/admin/views/doc.py:292 msgid "Relation to parent model" -msgstr "" +msgstr "Σχέση με το γονεϊκό μοντέλο" #: contrib/admin/views/doc.py:293 msgid "Phone number" @@ -627,7 +635,7 @@ msgstr "" #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Documentation" -msgstr "" +msgstr "Τεκμηρίωση" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 @@ -667,11 +675,11 @@ msgstr "Home" #: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/change_form.html:20 msgid "History" -msgstr "" +msgstr "Ιστορικό" #: contrib/admin/templates/admin/object_history.html:18 msgid "Date/time" -msgstr "" +msgstr "Ημερομηνία/Ώρα" #: contrib/admin/templates/admin/object_history.html:19 msgid "User" @@ -679,7 +687,7 @@ msgstr "Χρήστης" #: contrib/admin/templates/admin/object_history.html:20 msgid "Action" -msgstr "" +msgstr "Δράση" #: contrib/admin/templates/admin/object_history.html:26 msgid "DATE_WITH_TIME_FULL" @@ -697,19 +705,19 @@ msgstr "Διαχειριστής ιστοσελίδας Django" #: contrib/admin/templates/admin/base_site.html:7 msgid "Django administration" -msgstr "" +msgstr "Διαχείριση Django" #: contrib/admin/templates/admin/500.html:4 msgid "Server error" -msgstr "" +msgstr "Σφάλμα Διακομιστή" #: contrib/admin/templates/admin/500.html:6 msgid "Server error (500)" -msgstr "" +msgstr "Σφάλμα Διακομιστή (500)" #: contrib/admin/templates/admin/500.html:9 msgid "Server Error (500)" -msgstr "" +msgstr "Σφάλμα Διακομιστή (500)" #: contrib/admin/templates/admin/500.html:10 msgid "" @@ -720,7 +728,7 @@ msgstr "" #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 msgid "Page not found" -msgstr "" +msgstr "Η σελίδα δε βρέθηκε." #: contrib/admin/templates/admin/404.html:10 msgid "We're sorry, but the requested page could not be found." @@ -729,24 +737,24 @@ msgstr "" #: contrib/admin/templates/admin/index.html:17 #, python-format msgid "Models available in the %(name)s application." -msgstr "" +msgstr "Διαθέσιμα μοντέλα στην εφαρμογή %(name)s." #: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/change_form.html:15 msgid "Add" -msgstr "" +msgstr "Προσθήκη" #: contrib/admin/templates/admin/index.html:34 msgid "Change" -msgstr "" +msgstr "Επεξεργασία" #: contrib/admin/templates/admin/index.html:44 msgid "You don't have permission to edit anything." -msgstr "" +msgstr "Δεν έχετε άδεια να επεξεργαστείτε τίποτα." #: contrib/admin/templates/admin/index.html:52 msgid "Recent Actions" -msgstr "" +msgstr "Πρόσφατες Πράξεις" #: contrib/admin/templates/admin/index.html:53 msgid "My Actions" @@ -754,16 +762,16 @@ msgstr "Οι πράξεις μου" #: contrib/admin/templates/admin/index.html:57 msgid "None available" -msgstr "" +msgstr "Κανένα διαθέσιμο" #: contrib/admin/templates/admin/change_list.html:11 #, python-format msgid "Add %(name)s" -msgstr "" +msgstr "Προσθήκη %(name)s" #: contrib/admin/templates/admin/login.html:22 msgid "Have you forgotten your password?" -msgstr "" +msgstr "Ξεχάσατε τον κωδικό σας; " #: contrib/admin/templates/admin/base.html:23 msgid "Welcome," @@ -772,7 +780,7 @@ msgstr "Καλωσήρθατε," #: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/submit_line.html:3 msgid "Delete" -msgstr "" +msgstr "Διαγραφή" #: contrib/admin/templates/admin/delete_confirmation.html:14 #, python-format @@ -800,37 +808,37 @@ msgstr "" #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" -msgstr "" +msgstr "Πήγαινε" #: contrib/admin/templates/admin/change_form.html:21 msgid "View on site" -msgstr "" +msgstr "Προβολή στην ιστοσελίδα" #: contrib/admin/templates/admin/change_form.html:30 msgid "Please correct the error below." msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Παρακαλώ διορθώστε το παρακάτω λάθος." +msgstr[1] "Παρακαλώ διορθώστε τα παρακάτω λάθη." #: contrib/admin/templates/admin/change_form.html:48 msgid "Ordering" -msgstr "" +msgstr "Σειρά" #: contrib/admin/templates/admin/change_form.html:51 msgid "Order:" -msgstr "" +msgstr "Σειρά:" #: contrib/admin/templates/admin/submit_line.html:4 msgid "Save as new" -msgstr "" +msgstr "Αποθήκευση καινούριου" #: contrib/admin/templates/admin/submit_line.html:5 msgid "Save and add another" -msgstr "" +msgstr "Αποθήκευση και προσθήκη καινούριου." #: contrib/admin/templates/admin/submit_line.html:6 msgid "Save and continue editing" -msgstr "" +msgstr "Αποθήκευση και συνέχεια επεξεργασίας" #: contrib/admin/templates/admin/submit_line.html:7 msgid "Save" @@ -841,12 +849,12 @@ msgstr "Αποθήκευση" #: contrib/admin/templates/registration/password_change_form.html:6 #: contrib/admin/templates/registration/password_change_form.html:10 msgid "Password change" -msgstr "" +msgstr "Αλλαγή Κωδικού" #: contrib/admin/templates/registration/password_change_done.html:6 #: contrib/admin/templates/registration/password_change_done.html:10 msgid "Password change successful" -msgstr "" +msgstr "Αλλαγή κωδικού επιτυχής" #: contrib/admin/templates/registration/password_change_done.html:12 msgid "Your password was changed." @@ -857,7 +865,7 @@ msgstr "Ο κωδίκός σας άλλαξε." #: contrib/admin/templates/registration/password_reset_form.html:10 #: contrib/admin/templates/registration/password_reset_done.html:4 msgid "Password reset" -msgstr "" +msgstr "Επαναφορά κωδικού" #: contrib/admin/templates/registration/password_reset_form.html:12 msgid "" @@ -867,11 +875,11 @@ msgstr "" #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "E-mail address:" -msgstr "" +msgstr "E-mail διεύθυνση:" #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "Reset my password" -msgstr "" +msgstr "Επαναφορά του κωδικού μου" #: contrib/admin/templates/registration/logged_out.html:8 msgid "Thanks for spending some quality time with the Web site today." @@ -880,7 +888,7 @@ msgstr "" #: contrib/admin/templates/registration/logged_out.html:10 msgid "Log in again" -msgstr "" +msgstr "Εισαγωγή ξανά" #: contrib/admin/templates/registration/password_reset_done.html:6 #: contrib/admin/templates/registration/password_reset_done.html:10 @@ -909,11 +917,11 @@ msgstr "Νέος κωδικός:" #: contrib/admin/templates/registration/password_change_form.html:21 msgid "Confirm password:" -msgstr "" +msgstr "Επιβεβαίωση κωδικού" #: contrib/admin/templates/registration/password_change_form.html:23 msgid "Change my password" -msgstr "" +msgstr "Αλλαγή του κωδικού μου" #: contrib/admin/templates/registration/password_reset_email.html:2 msgid "You're receiving this e-mail because you requested a password reset" @@ -1003,19 +1011,19 @@ msgstr "" #: contrib/admin/templates/widget/date_time.html:3 msgid "Date:" -msgstr "" +msgstr "Ημ/νία:" #: contrib/admin/templates/widget/date_time.html:4 msgid "Time:" -msgstr "" +msgstr "     Ώρα:" #: contrib/admin/templates/widget/file.html:2 msgid "Currently:" -msgstr "" +msgstr "Τρέχον:" #: contrib/admin/templates/widget/file.html:3 msgid "Change:" -msgstr "" +msgstr "Αλλαγή:" #: contrib/redirects/models.py:7 msgid "redirect from" @@ -1271,192 +1279,192 @@ msgstr "P" #: utils/dates.py:6 msgid "Monday" -msgstr "" +msgstr "Δευτέρα" #: utils/dates.py:6 msgid "Tuesday" -msgstr "" +msgstr "Τρίτη" #: utils/dates.py:6 msgid "Wednesday" -msgstr "" +msgstr "Τετάρτη" #: utils/dates.py:6 msgid "Thursday" -msgstr "" +msgstr "Πέμπτη" #: utils/dates.py:6 msgid "Friday" -msgstr "" +msgstr "Παρασκευή" #: utils/dates.py:7 msgid "Saturday" -msgstr "" +msgstr "Σάββατο" #: utils/dates.py:7 msgid "Sunday" -msgstr "" +msgstr "Κυριακή" #: utils/dates.py:14 msgid "January" -msgstr "" +msgstr "Ιανουάριος" #: utils/dates.py:14 msgid "February" -msgstr "" +msgstr "Φεβρουάριος" #: utils/dates.py:14 utils/dates.py:27 msgid "March" -msgstr "" +msgstr "Μάρτιος" #: utils/dates.py:14 utils/dates.py:27 msgid "April" -msgstr "" +msgstr "Απρίλιος" #: utils/dates.py:14 utils/dates.py:27 msgid "May" -msgstr "" +msgstr "Μάιος" #: utils/dates.py:14 utils/dates.py:27 msgid "June" -msgstr "" +msgstr "Ιούνιος" #: utils/dates.py:15 utils/dates.py:27 msgid "July" -msgstr "" +msgstr "Ιούλιος" #: utils/dates.py:15 msgid "August" -msgstr "" +msgstr "Αύγουστος" #: utils/dates.py:15 msgid "September" -msgstr "" +msgstr "Σεπτέμβριος" #: utils/dates.py:15 msgid "October" -msgstr "" +msgstr "Οκτώβριος" #: utils/dates.py:15 msgid "November" -msgstr "" +msgstr "Νοέμβριος" #: utils/dates.py:16 msgid "December" -msgstr "" +msgstr "Δεκέμβριος" #: utils/dates.py:19 #, fuzzy msgid "jan" -msgstr "και" +msgstr "Ιαν" #: utils/dates.py:19 msgid "feb" -msgstr "" +msgstr "Φεβ" #: utils/dates.py:19 msgid "mar" -msgstr "" +msgstr "Μάρ" #: utils/dates.py:19 msgid "apr" -msgstr "" +msgstr "Απρ" #: utils/dates.py:19 msgid "may" -msgstr "" +msgstr "Μάι" #: utils/dates.py:19 msgid "jun" -msgstr "" +msgstr "Ιούν" #: utils/dates.py:20 msgid "jul" -msgstr "" +msgstr "Ιούλ" #: utils/dates.py:20 msgid "aug" -msgstr "" +msgstr "Αύγ" #: utils/dates.py:20 msgid "sep" -msgstr "" +msgstr "Σεπ" #: utils/dates.py:20 msgid "oct" -msgstr "" +msgstr "Οκτ" #: utils/dates.py:20 msgid "nov" -msgstr "" +msgstr "Νοέ" #: utils/dates.py:20 msgid "dec" -msgstr "" +msgstr "Δεκ" #: utils/dates.py:27 msgid "Jan." -msgstr "" +msgstr "Ιάν." #: utils/dates.py:27 msgid "Feb." -msgstr "" +msgstr "Φεβ." #: utils/dates.py:28 msgid "Aug." -msgstr "" +msgstr "Αύγ." #: utils/dates.py:28 msgid "Sept." -msgstr "" +msgstr "Σεπτ." #: utils/dates.py:28 msgid "Oct." -msgstr "" +msgstr "Οκτ." #: utils/dates.py:28 msgid "Nov." -msgstr "" +msgstr "Νοέ." #: utils/dates.py:28 msgid "Dec." -msgstr "" +msgstr "Δεκ." #: utils/timesince.py:12 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "χρόνος" +msgstr[1] "χρόνια" #: utils/timesince.py:13 msgid "month" msgid_plural "months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "μήνας" +msgstr[1] "μήνες" #: utils/timesince.py:14 msgid "week" msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "εβδομάδα" +msgstr[1] "εβδομάδες" #: utils/timesince.py:15 msgid "day" msgid_plural "days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ημέρα" +msgstr[1] "ημέρες" #: utils/timesince.py:16 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ώρα" +msgstr[1] "ώρες" #: utils/timesince.py:17 msgid "minute" msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "λεπτό" +msgstr[1] "λεπτά" #: conf/global_settings.py:37 msgid "Bengali" @@ -1630,7 +1638,7 @@ msgstr "" #: core/validators.py:136 msgid "Enter a valid e-mail address." -msgstr "" +msgstr "Εισάγετε ένα σωστό e-mail." #: core/validators.py:148 msgid "" @@ -1745,12 +1753,12 @@ msgstr[1] "" #: core/validators.py:362 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον." +msgstr "Σιγουρευτείτε ότι το αρχείο που ανεβάζετε είναι %s bytes τουλάχιστον." #: core/validators.py:363 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "" +msgstr "Σιγουρευτείτε ότι το αρχείο που ανεβάζετε έχει μέγεθος μέχρι %s bytes." #: core/validators.py:376 msgid "The format for this field is wrong." @@ -1827,7 +1835,7 @@ msgstr "" #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 #: forms/__init__.py:346 msgid "This field is required." -msgstr "" +msgstr "Αυτό το πεδίο είναι απαραίτητο" #: db/models/fields/__init__.py:337 msgid "This value must be an integer." @@ -1836,12 +1844,12 @@ msgstr "" #: db/models/fields/__init__.py:369 #, fuzzy msgid "This value must be either True or False." -msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)" +msgstr "Boolean (Είτε Αληθές ή Ψευδές)" #: db/models/fields/__init__.py:385 #, fuzzy msgid "This field cannot be null." -msgstr "Αυτό το πεδίο είναι άκυρο" +msgstr "Αυτό το πεδίο δεν μπορεί να είναι κενό (null)" #: db/models/fields/__init__.py:562 msgid "Enter a valid filename." @@ -1850,7 +1858,7 @@ msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου" #: db/models/fields/related.py:43 #, python-format msgid "Please enter a valid %s." -msgstr "" +msgstr "Παρακαλώ εισάγετε ένα/μία έγκυρο/η %s" #: db/models/fields/related.py:579 #, fuzzy diff --git a/django/conf/locale/el/LC_MESSAGES/djangojs.mo b/django/conf/locale/el/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..7d43b315fe Binary files /dev/null and b/django/conf/locale/el/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/el/LC_MESSAGES/djangojs.po b/django/conf/locale/el/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..545f9f8601 --- /dev/null +++ b/django/conf/locale/el/LC_MESSAGES/djangojs.po @@ -0,0 +1,109 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2006 and beyond. +# This file is distributed under the same license as the Django package. +# Orestis Markou , 2006. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-12-09 11:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Orestis Markou \n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "Διαθέσιμο %s" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "Επιλογή Όλων" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "Προσθήκη" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "Αφαίρεση" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "Επιλεχθέντα %s" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "Επιλέξτε και κάντε κλικ." + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "Καθαρισμός όλων" + +#: contrib/admin/media/js/dateparse.js:26 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "Ιανουάριος Φεβρουάριος Μάρτιος Απρίλιος Μάιος Ιούνιος Ιούλιος Αύγουστος Σεπτέμβριος Οκτώβριος Νοέμβριος " +"Δεκέμβριος" + +#: contrib/admin/media/js/dateparse.js:27 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "Κυριακή Δευτέρα Τρίτη Τετάρτη Πέμπτη Παρασκευή Σάββατο" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "Κ Δ Τ Τ Π Π Σ" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80 +msgid "Now" +msgstr "Τώρα" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48 +msgid "Clock" +msgstr "Ρολόι" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77 +msgid "Choose a time" +msgstr "Διαλέξτε ώρα" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Midnight" +msgstr "Μεσάνυχτα" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "6 a.m." +msgstr "6 π.μ." + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "Noon" +msgstr "Μεσημέρι" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168 +msgid "Cancel" +msgstr "Άκυρο" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162 +msgid "Today" +msgstr "Σήμερα" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114 +msgid "Calendar" +msgstr "Ημερολόγιο" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160 +msgid "Yesterday" +msgstr "Χθες" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 +msgid "Tomorrow" +msgstr "Αύριο" diff --git a/django/conf/locale/en/LC_MESSAGES/django.mo b/django/conf/locale/en/LC_MESSAGES/django.mo index 0a4947bfc1..6c4dbe4b4e 100644 Binary files a/django/conf/locale/en/LC_MESSAGES/django.mo and b/django/conf/locale/en/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/en/LC_MESSAGES/django.po b/django/conf/locale/en/LC_MESSAGES/django.po index 625c3b04f1..feba39f7cd 100644 --- a/django/conf/locale/en/LC_MESSAGES/django.po +++ b/django/conf/locale/en/LC_MESSAGES/django.po @@ -3,12 +3,11 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , 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 \n" "Language-Team: LANGUAGE \n" @@ -73,7 +72,7 @@ msgstr "" 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 @@ msgstr "" 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 @@ msgid_plural "" 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 @@ msgid "" "%(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 @@ msgid "Username:" 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 @@ msgstr "" 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 @@ msgstr "" 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 @@ msgid "" 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 @@ msgstr "" 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 @@ 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 @@ -634,9 +702,10 @@ 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 @@ -713,6 +782,11 @@ msgstr "" 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 @@ msgstr "" msgid "Have you forgotten your password?" msgstr "" -#: contrib/admin/templates/admin/base.html:23 +#: contrib/admin/templates/admin/base.html:25 msgid "Welcome," msgstr "" @@ -759,16 +833,16 @@ 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:" +"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 @@ msgstr "" #: 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 @@ msgstr "" 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 @@ msgid "" "'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 @@ msgstr "" #: 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 @@ msgstr "" 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 @@ msgstr "" 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 @@ msgid_plural "minutes" 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,7 +1903,16 @@ msgid_plural "" 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 "" @@ -1717,77 +1920,92 @@ msgid_plural "" 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 @@ msgid "%(optname)s with this %(fieldname)s already exists." 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 @@ msgid_plural "" 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 "" diff --git a/django/conf/locale/es/LC_MESSAGES/django.mo b/django/conf/locale/es/LC_MESSAGES/django.mo index fe44d24a17..e9105aa64c 100644 Binary files a/django/conf/locale/es/LC_MESSAGES/django.mo and b/django/conf/locale/es/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/es/LC_MESSAGES/django.po b/django/conf/locale/es/LC_MESSAGES/django.po index 8036e398b9..d8166e6201 100644 --- a/django/conf/locale/es/LC_MESSAGES/django.po +++ b/django/conf/locale/es/LC_MESSAGES/django.po @@ -1,1323 +1,1478 @@ -# translation of django.po to Spanish -# translation of django.po to Espaol +# 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 Crdenes Medina , 2005. # Ricardo Javier Cardenes Medina , 2005. -# +# AgarFu , 2007. +# Mario Gonzalez , 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 \n" -"Language-Team: Spanish \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 \n" +"Language-Team: Castellano \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" -#: contrib/comments/models.py:67 contrib/comments/models.py:166 -msgid "object ID" -msgstr "ID de objeto" +#: utils/dates.py:6 +msgid "Monday" +msgstr "Lunes" -#: contrib/comments/models.py:68 -msgid "headline" -msgstr "encabezado" +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "Martes" -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "comentario" +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "Mircoles" -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "calificacin 1" +#: utils/dates.py:6 +msgid "Thursday" +msgstr "Jueves" -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "calificacin 2" +#: utils/dates.py:6 +msgid "Friday" +msgstr "Viernes" -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "calificacin 3" +#: utils/dates.py:7 +msgid "Saturday" +msgstr "Sbado" -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "calificacin 4" +#: utils/dates.py:7 +msgid "Sunday" +msgstr "Domingo" -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "calificacin 5" +#: utils/dates.py:14 +msgid "January" +msgstr "Enero" -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "calificacin 6" +#: utils/dates.py:14 +msgid "February" +msgstr "Febrero" -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "calificacin 7" +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "Marzo" -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "calificacin 8" +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "Abril" -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "es calificacin vlida" +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "Mayo" -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "fecha/hora de envo" +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "Junio" -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -msgid "is public" -msgstr "es pblico" +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "Julio" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -msgid "IP address" -msgstr "Direccin IP" +#: utils/dates.py:15 +msgid "August" +msgstr "Agosto" -#: contrib/comments/models.py:86 -msgid "is removed" -msgstr "est eliminado" +#: utils/dates.py:15 +msgid "September" +msgstr "Septiembre" -#: 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 "" -"Marque esta caja si el comentario es inapropiado. En su lugar se mostrar " -"\"Este comentario ha sido eliminado\"." +#: utils/dates.py:15 +msgid "October" +msgstr "Octubre" -#: contrib/comments/models.py:91 -#, fuzzy -msgid "comments" -msgstr "comentario" +#: utils/dates.py:15 +msgid "November" +msgstr "Noviembre" -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "Objeto contenido" +#: utils/dates.py:16 +msgid "December" +msgstr "Diciembre" -#: 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 "" -"Enviado por %(user)s en %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" +#: utils/dates.py:19 +msgid "jan" +msgstr "ene" -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "nombre de la persona" +#: utils/dates.py:19 +msgid "feb" +msgstr "feb" -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "direccin ip" +#: utils/dates.py:19 +msgid "mar" +msgstr "mar" -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "aprobado por el staff" +#: utils/dates.py:19 +msgid "apr" +msgstr "abr" -#: contrib/comments/models.py:176 -#, fuzzy -msgid "free comment" -msgstr "Comentario libre" +#: utils/dates.py:19 +msgid "may" +msgstr "may" -#: contrib/comments/models.py:177 -#, fuzzy -msgid "free comments" -msgstr "Comentarios libres" +#: utils/dates.py:19 +msgid "jun" +msgstr "jun" -#: contrib/comments/models.py:233 -msgid "score" -msgstr "puntuacin" +#: utils/dates.py:20 +msgid "jul" +msgstr "jul" -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "fecha de la puntuacin" +#: utils/dates.py:20 +msgid "aug" +msgstr "ago" -#: contrib/comments/models.py:237 -#, fuzzy -msgid "karma score" -msgstr "Punto karma" +#: utils/dates.py:20 +msgid "sep" +msgstr "sep" -#: contrib/comments/models.py:238 -#, fuzzy -msgid "karma scores" -msgstr "Puntos karma" +#: utils/dates.py:20 +msgid "oct" +msgstr "oct" -#: contrib/comments/models.py:242 -#, python-format -msgid "%(score)d rating by %(user)s" -msgstr "Puntuado %(score)d por %(user)s" +#: utils/dates.py:20 +msgid "nov" +msgstr "nov" -#: contrib/comments/models.py:258 -#, python-format -msgid "" -"This comment was flagged by %(user)s:\n" -"\n" -"%(text)s" -msgstr "" -"Este comentario fue marcado por %(user)s:\n" -"\n" -"%(text)s" +#: utils/dates.py:20 +msgid "dec" +msgstr "dic" -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "fecha de la marca" +#: utils/dates.py:27 +msgid "Jan." +msgstr "Ene." -#: contrib/comments/models.py:268 -#, fuzzy -msgid "user flag" -msgstr "Marca de usuario" +#: utils/dates.py:27 +msgid "Feb." +msgstr "Feb." -#: contrib/comments/models.py:269 -#, fuzzy -msgid "user flags" -msgstr "Marcas de usuario" +#: utils/dates.py:28 +msgid "Aug." +msgstr "Ago." -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "Marca de %r" +#: utils/dates.py:28 +msgid "Sept." +msgstr "Sept." -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "fecha de eliminacin" +#: utils/dates.py:28 +msgid "Oct." +msgstr "Oct." -#: contrib/comments/models.py:280 -#, fuzzy -msgid "moderator deletion" -msgstr "Eliminacin de moderador" +#: utils/dates.py:28 +msgid "Nov." +msgstr "Nov." -#: contrib/comments/models.py:281 -#, fuzzy -msgid "moderator deletions" -msgstr "Eliminaciones de moderador" +#: utils/dates.py:28 +msgid "Dec." +msgstr "Dic." -#: contrib/comments/models.py:285 -#, python-format -msgid "Moderator deletion by %r" -msgstr "Eliminacin del moderador %r" +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "ao" +msgstr[1] "aos" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Los usuarios annimos no pueden votar" +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "mes" +msgstr[1] "meses" -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "ID de comentario no vlido" +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "semana" +msgstr[1] "semanas" -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "No puedes votarte t mismo" +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "da" +msgstr[1] "das" -#: contrib/comments/views/comments.py:28 -msgid "" -"This rating is required because you've entered at least one other rating." -msgstr "Se precisa esta puntuacin porque ha introducido al menos otra ms." +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "hora" +msgstr[1] "horas" -#: 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] "" -"Este comentario lo envi un usuario que ha enviado menos de %(count)s " -"comentario:\n" -"\n" -"%(text)s" -msgstr[1] "" -"Este comentario lo envi un usuario que ha enviado menos de %(count)s " -"comentarios:\n" -"\n" -"%(text)s" +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuto" +msgstr[1] "minutos" -#: contrib/comments/views/comments.py:117 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" -msgstr "" +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" +msgstr "j N Y" -#: contrib/comments/views/comments.py:189 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Slo se admite POST" +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" +msgstr "j N Y P" -#: contrib/comments/views/comments.py:193 -#: contrib/comments/views/comments.py:284 -msgid "One or more of the required fields wasn't submitted" -msgstr "No se proporcion uno o ms de los siguientes campos requeridos" +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" +msgstr "P" -#: contrib/comments/views/comments.py:197 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" -msgstr "" -"Alguien est jugando con el formulario de comentarios (violacin de " -"seguridad)" +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" +msgstr "F Y" -#: 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 "" -"El formulario de comentarios tiene un parmetro 'target' no vlido (el ID de " -"objeto era invlido)" +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" +msgstr "j \\de F" -#: 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 formulario de comentario no proporcion 'previsualizar' ni 'enviar'" +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "rabe" -#: 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:" +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "Bengal" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Clave:" +#: conf/global_settings.py:41 +msgid "Catalan" +msgstr "Cataln" -#: contrib/comments/templates/comments/form.html:6 -#, fuzzy -msgid "Forgotten your password?" -msgstr "Cambiar mi clave" +#: conf/global_settings.py:42 +msgid "Czech" +msgstr "Checo" -#: 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 sesin" +#: conf/global_settings.py:43 +msgid "Welsh" +msgstr "Gals" -#: contrib/comments/templates/comments/form.html:12 -#, fuzzy -msgid "Ratings" -msgstr "calificacin 1" +#: conf/global_settings.py:44 +msgid "Danish" +msgstr "Dans" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "" +#: conf/global_settings.py:45 +msgid "German" +msgstr "Alemn" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "" +#: conf/global_settings.py:46 +msgid "Greek" +msgstr "Griego" -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" +#: conf/global_settings.py:47 +msgid "English" +msgstr "Ingls" + +#: conf/global_settings.py:48 +msgid "Spanish" +msgstr "Espaol" + +#: conf/global_settings.py:49 +msgid "Argentinean Spanish" +msgstr "Espaol Argentino" + +#: conf/global_settings.py:50 +msgid "Finnish" +msgstr "Fins" + +#: conf/global_settings.py:51 +msgid "French" +msgstr "Francs" + +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "Gallego" + +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "Hngaro" + +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "Hebreo" + +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "Islands" + +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "Italiano" + +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "Japons" + +#: conf/global_settings.py:58 +msgid "Latvian" msgstr "" -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -#, fuzzy -msgid "Comment:" -msgstr "Comentario" +#: conf/global_settings.py:59 +msgid "Macedonian" +msgstr "Macedonio" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -#, fuzzy -msgid "Preview comment" -msgstr "Comentario libre" +#: conf/global_settings.py:60 +msgid "Dutch" +msgstr "Alemn" -#: contrib/comments/templates/comments/freeform.html:4 -#, fuzzy -msgid "Your name:" -msgstr "nombre de usuario" +#: conf/global_settings.py:61 +msgid "Norwegian" +msgstr "Noruego" -#: contrib/admin/filterspecs.py:40 +#: conf/global_settings.py:62 +msgid "Polish" +msgstr "Polaco" + +#: conf/global_settings.py:63 +msgid "Brazilian" +msgstr "Brasileo" + +#: 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 "" -"

                By %s:

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

                  Por %s:

                  \n" -"
                    \n" +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." -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -msgid "All" -msgstr "Todo" +#: 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" -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Cualquier fecha" +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "Por favor, introduzca un %s vlido." -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "Hoy" +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "Separe mltiples IDs con comas." -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "ltimos 7 das" +#: 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 ms de uno." -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Este mes" +#: 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 vlidos. El valor %(value)r no es " +"vlido." +msgstr[1] "" +"Por favor, introduzca IDs de %(self)s vlidos. Los valores %(value)r no son " +"vlidos." -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Este ao" +#: 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." -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "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." -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "No" +#: db/models/fields/__init__.py:366 +msgid "This value must be an integer." +msgstr "Este valor debe ser un entero." -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Desconocido" +#: db/models/fields/__init__.py:401 +msgid "This value must be either True or False." +msgstr "Este valor debe ser Verdadero o Falso." -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "hora de accin" +#: db/models/fields/__init__.py:422 +msgid "This field cannot be null." +msgstr "Este campo no puede estar vaco." -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "id de objeto" +#: db/models/fields/__init__.py:454 core/validators.py:147 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Introduzca una fecha vlida en formato AAAA-MM-DD." -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "repr de objeto" +#: 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 vlida en formato AAAA-MM-DD HH:MM." -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "marca de accin" +#: db/models/fields/__init__.py:625 +msgid "Enter a valid filename." +msgstr "Introduzca un nombre de fichero vlido" -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "mensaje de cambio" +#: template/defaultfilters.py:436 +msgid "yes,no,maybe" +msgstr "si,no,tal vez" -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "entrada de registro" +#: 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 opcin vlida. Esa opcin 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 opcin vlida; '%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 "Asegrese de que su texto tiene a lo ms %d caracteres." + +#: newforms/fields.py:103 newforms/fields.py:256 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "Asegrese 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 nmero entero." + +#: newforms/fields.py:128 +#, python-format +msgid "Ensure this value is less than or equal to %s." +msgstr "Asegrese 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 "Asegrese de que este valor es mayor o igual a %s." + +#: newforms/fields.py:163 +msgid "Enter a valid date." +msgstr "Introduzca una fecha vlida." + +#: newforms/fields.py:190 +msgid "Enter a valid time." +msgstr "Introduzca una hora vlida." + +#: newforms/fields.py:226 +msgid "Enter a valid date/time." +msgstr "Introduzca una fecha/hora vlida." + +#: 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 direccin de correo electrnico vlida" + +#: newforms/fields.py:287 newforms/fields.py:309 +msgid "Enter a valid URL." +msgstr "Introduzca una URL vlida." + +#: newforms/fields.py:311 +msgid "This URL appears to be a broken link." +msgstr "La URL parece ser un enlace roto." -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "entradas de registro" +#: newforms/widgets.py:170 oldforms/__init__.py:572 +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "Desconocido" -#: contrib/admin/templatetags/admin_list.py:228 -msgid "All dates" -msgstr "Todas las fechas" +#: newforms/widgets.py:170 oldforms/__init__.py:572 +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "S" -#: 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 "" +#: newforms/widgets.py:170 oldforms/__init__.py:572 +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "No" -#: contrib/admin/views/decorators.py:23 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Identificarse" +#: core/validators.py:64 +msgid "This value must contain only letters, numbers and underscores." +msgstr "Este valor debe contener slo letras, nmeros y guiones bajos." -#: contrib/admin/views/decorators.py:61 +#: core/validators.py:68 msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." -msgstr "" -"Por favor, identifquese de nuevo, porque su sesin ha caducado. No se " -"preocupe: se ha guardado su envo." +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "Este valor debe contener letras, nmeros, guiones bajos o barras solamente." -#: 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. Actvelas " -"por favor, recargue esta pgina, e intntelo de nuevo." +#: core/validators.py:72 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "Este valor debe contener slo letras, nmeros, guiones bajos o medios." -#: contrib/admin/views/decorators.py:82 -msgid "Usernames cannot contain the '@' character." -msgstr "Los nombres de usuario no pueden contener el carcter '@'." +#: core/validators.py:76 +msgid "Uppercase letters are not allowed here." +msgstr "No se admiten letras maysculas." -#: contrib/admin/views/decorators.py:84 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "" -"Su direccin de correo no es su nombre de usuario. Pruebe con '%s' en su " -"lugar." +#: core/validators.py:80 +msgid "Lowercase letters are not allowed here." +msgstr "No se admiten letras minsculas." -#: contrib/admin/views/main.py:226 -msgid "Site administration" -msgstr "Sitio administrativo" +#: core/validators.py:87 +msgid "Enter only digits separated by commas." +msgstr "Introduzca slo dgitos separados por comas." -#: contrib/admin/views/main.py:260 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "Se aadi con xito el %(name)s \"%(obj)s\"." +#: core/validators.py:99 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Introduzca direcciones de correo vlidas separadas por comas." -#: 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." +#: core/validators.py:103 +msgid "Please enter a valid IP address." +msgstr "Por favor introduzca una direccin IP vlida." -#: 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." +#: core/validators.py:107 +msgid "Empty values are not allowed here." +msgstr "No se admiten valores vacos." -#: contrib/admin/views/main.py:290 -#, python-format -msgid "Add %s" -msgstr "Agregar %s" +#: core/validators.py:111 +msgid "Non-numeric characters aren't allowed here." +msgstr "No se admiten caracteres no numricos." -#: contrib/admin/views/main.py:336 -#, python-format -msgid "Added %s." -msgstr "Agregado %s." +#: core/validators.py:115 +msgid "This value can't be comprised solely of digits." +msgstr "Este valor no puede comprender slo dgitos." -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "y" +#: core/validators.py:124 +msgid "Only alphabetical characters are allowed here." +msgstr "Slo se admiten caracteres alfabticos." -#: contrib/admin/views/main.py:338 -#, python-format -msgid "Changed %s." -msgstr "Modificado %s." +#: core/validators.py:139 +msgid "Year must be 1900 or later." +msgstr "El ao debe ser 1900 o posterior." -#: contrib/admin/views/main.py:340 +#: core/validators.py:143 #, python-format -msgid "Deleted %s." -msgstr "Borrado %s." +msgid "Invalid date: %s." +msgstr "Fecha no vlida: %s" -#: contrib/admin/views/main.py:343 -msgid "No fields changed." -msgstr "No ha cambiado ningn campo." +#: core/validators.py:152 +msgid "Enter a valid time in HH:MM format." +msgstr "Introduzca una hora vlida en formato HH:MM." -#: 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." +#: 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 ningn fichero. Compruebe el tipo de codificacin en el " +"formulario." -#: contrib/admin/views/main.py:354 -#, python-format +#: core/validators.py:177 msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." msgstr "" -"Se agreg con xito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo." - -#: contrib/admin/views/main.py:392 -#, python-format -msgid "Change %s" -msgstr "Modificar %s" +"Enve una imagen vlida. El fichero que ha enviado no era una imagen o se " +"trataba de una imagen corrupta." -#: contrib/admin/views/main.py:470 +#: core/validators.py:184 #, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Uno o ms %(fieldname)s en %(name)s: %(obj)s" +msgid "The URL %s does not point to a valid image." +msgstr "La URL %s no apunta a una imagen vlida." -#: contrib/admin/views/main.py:475 +#: core/validators.py:188 #, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Uno o ms %(fieldname)s en %(name)s:" +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" +"Los nmeros de telfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" " +"no es vlido." -#: contrib/admin/views/main.py:508 +#: core/validators.py:196 #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "Se elimin con xito el %(name)s \"%(obj)s\"." +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "La URL %s no apunta a un vdeo QuickTime vlido." -#: contrib/admin/views/main.py:511 -msgid "Are you sure?" -msgstr "Est seguro?" +#: core/validators.py:200 +msgid "A valid URL is required." +msgstr "Se precisa una URL vlida." -#: contrib/admin/views/main.py:533 +#: core/validators.py:214 #, python-format -msgid "Change history: %s" -msgstr "Modificar histrico: %s" +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Se precisa HTML vlido. Los errores especficos son:\n" +"%s" -#: contrib/admin/views/main.py:565 +#: core/validators.py:221 #, python-format -msgid "Select %s" -msgstr "Escoja %s" +msgid "Badly formed XML: %s" +msgstr "XML mal formado: %s" -#: contrib/admin/views/main.py:565 +#: core/validators.py:238 #, python-format -msgid "Select %s to change" -msgstr "Escoja %s para modificar" - -#: 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)" +msgid "Invalid URL: %s" +msgstr "URL no vlida: %s" -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#: core/validators.py:243 core/validators.py:245 #, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Cadena (mximo %(maxlength)s)" +msgid "The URL %s is a broken link." +msgstr "La URL %s es un enlace roto." -#: contrib/admin/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "Enteros separados por comas" +#: core/validators.py:251 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Introduzca una abreviatura vlida de estado de los EEUU." -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "Fecha (sin hora)" +#: 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." -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "Fecha (con hora)" +#: core/validators.py:272 +#, python-format +msgid "This field must match the '%s' field." +msgstr "Este campo debe concordar con el campo '%s'." -#: contrib/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "Direccin de correo electrnico" +#: core/validators.py:291 +msgid "Please enter something for at least one field." +msgstr "Por favor, introduzca algo en al menos un campo." -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "Ruta de fichero" +#: 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 vacos." -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "Nmero decimal" +#: 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" -#: contrib/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "Booleano (Verdadero, Falso o Nulo)" +#: 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" -#: contrib/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "Relacin con el modelo padre" +#: core/validators.py:349 +msgid "Duplicate values are not allowed." +msgstr "No se admiten valores duplicados." -#: contrib/admin/views/doc.py:293 -msgid "Phone number" -msgstr "Nmero de telfono" +#: 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." -#: contrib/admin/views/doc.py:298 -msgid "Text" -msgstr "Texto" +#: core/validators.py:367 +#, python-format +msgid "This value must be at least %s." +msgstr "Este valor debe ser como mnimo %s." -#: contrib/admin/views/doc.py:299 -msgid "Time" -msgstr "Hora" +#: core/validators.py:369 +#, python-format +msgid "This value must be no more than %s." +msgstr "Este valor no debe ser mayor que %s." -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" +#: core/validators.py:405 +#, python-format +msgid "This value must be a power of %s." +msgstr "Este valor debe ser una potencia de %s." -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "Estado de los EEUU (dos letras maysculas)" +#: core/validators.py:416 +msgid "Please enter a valid decimal number." +msgstr "Por favor, introduzca un nmero decimal vlido." -#: contrib/admin/views/doc.py:302 -msgid "XML text" -msgstr "Texto XML" +#: 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 nmero decimal vlido con a lo ms %s dgito en " +"total." +msgstr[1] "" +"Por favor, introduzca un nmero decimal vlido con a lo ms %s dgitos en " +"total." -#: 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 "Documentacin" +#: 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 nmero decimal vlido con a lo ms %s dgito en " +"total." +msgstr[1] "" +"Por favor, introduzca un nmero decimal vlido con a lo ms %s dgitos en " +"total." -#: 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" +#: 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 nmero decimal vlido con a lo ms %s dgito " +"decimal." +msgstr[1] "" +"Por favor, introduzca un nmero decimal vlido con a lo ms %s dgitos " +"decimales." -#: 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" +#: core/validators.py:436 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Asegrese de que el fichero que enva tiene al menos %s bytes." -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "Histrico" +#: core/validators.py:437 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "Asegrese de que el fichero que enva tiene como mximo %s bytes." -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Fecha/hora" +#: core/validators.py:454 +msgid "The format for this field is wrong." +msgstr "El formato de este campo es incorrecto." -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Usuario" +#: core/validators.py:469 +msgid "This field is invalid." +msgstr "Este campo no es vlido." -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Accin" +#: core/validators.py:505 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "No pude obtener nada de %s." -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" +#: 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 vlida." -#: contrib/admin/templates/admin/object_history.html:36 +#: core/validators.py:541 +#, python-format msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" msgstr "" -"Este objeto no tiene histrico de cambios. Probablemente no fue aadido " -"usando este sitio de administracin." - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Sitio de administracin de Django" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administracin de Django" - -#: 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)" +"Por favor, cierre la etiqueta %(tag)s de la lnea %(line)s. (La lnea " +"empieza por \"%(start)s\".)" -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Error de servidor (500)" +#: 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 lnea %(line)s no est permitido en ese " +"contexto. (La lnea empieza por \"%(start)s\".)" -#: contrib/admin/templates/admin/500.html:10 +#: core/validators.py:550 +#, 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." +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" msgstr "" -"Ha ocurrido un error. Se ha informado a los administradores del sitio " -"mediante correo electrnico y debera arreglarse en breve. Gracias por su " -"paciencia" +"El \"%(attr)s\" de la lnea %(line)s no es un atributo vlido. (La lnea " +"empieza por \"%(start)s\".)" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Pgina no encontrada" +#: 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 lnea %(line)s no es una etiqueta vlida. (La lnea " +"empieza por \"%(start)s\".)" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." +#: 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 lnea %(line)s le faltan uno o ms atributos " +"requeridos. (La lnea empieza por \"%(start)s\".)" -#: contrib/admin/templates/admin/index.html:17 +#: core/validators.py:564 #, python-format -msgid "Models available in the %(name)s application." +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 lnea %(line)s tiene un valor que no es " +"vlido. (La lnea empieza por \"%(start)s\".)" -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Agregar" +#: 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] "Asegrese de que su texto tiene menos de %s carcter." +msgstr[1] "Asegrese de que su texto tiene menos de %s caracteres." -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Modificar" +#: oldforms/__init__.py:392 +msgid "Line breaks are not allowed here." +msgstr "No se permiten saltos de lnea." -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "No tiene permiso para editar nada." +#: 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 opcin vlida; '%(data)s' no est en %(choices)s." -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Acciones recientes" +#: oldforms/__init__.py:669 +msgid "The submitted file is empty." +msgstr "El fichero enviado est vaco." -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "Mis acciones" +#: oldforms/__init__.py:725 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Introduzca un nmero entero entre -32,768 y 32,767." -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Ninguno disponible" +#: oldforms/__init__.py:735 +msgid "Enter a positive number." +msgstr "Introduzca un nmero positivo." -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "Agregar %(name)s" +#: oldforms/__init__.py:745 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Introduzca un nmero entero entre 0 y 32,767." -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Ha olvidado su clave?" +#: contrib/contenttypes/models.py:26 +msgid "python model class name" +msgstr "nombre de mdulo python" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Bienvenido," +#: contrib/contenttypes/models.py:29 +msgid "content type" +msgstr "tipo de contenido" -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Eliminar" +#: contrib/contenttypes/models.py:30 +msgid "content types" +msgstr "tipos de contenido" -#: 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' provocara la eliminacin de " -"objetos relacionados, pero su cuenta no tiene permiso para borrar los " -"siguientes tipos de objetos:" +#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:318 +msgid "URL" +msgstr "URL" -#: 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:" +#: contrib/flatpages/models.py:8 +msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes." msgstr "" -"Est seguro de que quiere borrar los %(object_name)s \"%(object)s\"? Se " -"borrarn los siguientes objetos relacionados:" +"Ejemplo: '/about/contact/'. Asegrese de que pone barras al principio y al " +"final." -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "S, estoy seguro" +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "ttulo" -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(title)s " -msgstr " Por %(title)s " +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "contenido" -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Buscar" +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "admitir comentarios" -#: contrib/admin/templates/admin/change_form.html:21 -msgid "View on site" -msgstr "Ver en el sitio" +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "nombre de plantilla" -#: 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 el siguiente error." -msgstr[1] "Por favor, corrija los siguientes errores." +#: 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/admin/templates/admin/change_form.html:48 -msgid "Ordering" -msgstr "Ordenacin" +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "debe estar registrado" -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "Orden:" +#: 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, slo los usuarios registrados podrn ver la pgina." -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Grabar como nuevo" +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "pgina esttica" -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Grabar y aadir otro" +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "pginas estticas" -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Grabar y continuar editando" +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "Sesin terminada" -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Grabar" +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "nombre" + +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "nombre en cdigo" -#: 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/auth/models.py:42 +msgid "permission" +msgstr "permiso" -#: 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/auth/models.py:43 contrib/auth/models.py:58 +msgid "permissions" +msgstr "permisos" -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "Su clave ha sido cambiada." +#: contrib/auth/models.py:60 +msgid "group" +msgstr "grupo" -#: 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 "Recuperar clave" +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +msgid "groups" +msgstr "grupos" -#: contrib/admin/templates/registration/password_reset_form.html:12 +#: contrib/auth/models.py:90 +msgid "username" +msgstr "nombre de usuario" + +#: contrib/auth/models.py:90 msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." msgstr "" -"Ha olvidado su clave? Introduzca su direccin de correo electrnico, y " -"crearemos una nueva que le enviaremos por correo." +"Requerido. 30 caracteres o menos. Slo caracteres alfanumricos (letras, " +"dgutos y guiones bajos)." -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "Direccin de correo electrnico:" +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "nombre" -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Recuperar mi clave" +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "apellidos" -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "direccin de correo" -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Identificarse de nuevo" +#: contrib/auth/models.py:94 +msgid "password" +msgstr "clave" -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "Recuperacin de clave exitosa" +#: contrib/auth/models.py:94 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Use'[algo]$[sal]$[hash hexadecimal]' o use el " +"formulario para cambiar la contrasea." -#: contrib/admin/templates/registration/password_reset_done.html:12 +#: 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 administracin." + +#: contrib/auth/models.py:96 +msgid "active" +msgstr "activo" + +#: contrib/auth/models.py:96 msgid "" -"We've e-mailed a new password to the e-mail address you submitted. You " -"should be receiving it shortly." +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." msgstr "" -"Le hemos enviado una clave nueva a la direccin que ha suministrado. Debera " -"recibirla en breve." +"Indica si el usuario puede entrar en este sitio de administracin. Desmarque " +"esto en lugar de borrar la cuenta." -#: contrib/admin/templates/registration/password_change_form.html:12 +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "es superusuario" + +#: contrib/auth/models.py:97 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." +"Designates that this user has all permissions without explicitly assigning " +"them." msgstr "" -"Por favor, introduzca su clave antigua, por seguridad, y despus introduzca " -"la nueva clave dos veces para verificar que la ha escrito correctamente." +"Indica que este usuario tiene todos los permisos sin asignrselos " +"explcitamente." -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Clave antigua:" +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "ltimo registro" -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Clave nueva:" +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "fecha de creacin" -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Confirme clave:" +#: 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 "" +"Adems de los permisos asignados manualmente, este usuario tambin tendr " +"todos los permisos de los grupos en los que est." -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Cambiar mi clave" +#: contrib/auth/models.py:102 +msgid "user permissions" +msgstr "permisos" -#: 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" +#: contrib/auth/models.py:105 +msgid "user" +msgstr "usuario" -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "de su cuenta de usuario en %(site_name)s." +#: contrib/auth/models.py:106 +msgid "users" +msgstr "usuarios" -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "Su nueva clave es: %(new_password)s" +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "Informacin personal" -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "Puede cambiarla accediendo a esta pgina:" +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "Permisos" -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "Su nombre de usuario, en caso de haberlo olvidado:" +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "Fechas importantes" -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "Gracias por usar nuestro sitio!" +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "Grupos" -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "El equipo de %(site_name)s" +#: contrib/auth/models.py:258 +msgid "message" +msgstr "mensaje" -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Bookmarklets" +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Las dos contraseas no coinciden." -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Bookmarklets de documentacin" +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Ya existe un usuario con este nombre." -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +#: contrib/auth/forms.py:53 msgid "" -"\n" -"

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

                    \n" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." msgstr "" -"\n" -"

                    Para instalar bookmarklets, arrastre el enlace a su barra\n" -"de favoritos, o pulse con el botn derecho el enlace y adalo a sus " -"favoritos.\n" -"Ahora puede escoger el bookmarklet desde cualquier pgina en el sitio.\n" -"Observer que algunos de estos bookmarklets precisan que est viendo\n" -"el sitio desde un computador sealado como \"interno\" (hable\n" -"con su administrador de sistemas si no est seguro de si el suyo lo es).\n" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Documentacin de esta pgina" +"Tu navegador de internet parece no tener las cookies habilitadas. Las " +"cookies se necesitan para poder ingresar." -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." msgstr "" -"Le lleva desde cualquier pgina a la documentacin de la vista que la genera." +"Por favor, introduzca un correcto nombre de usuario y contrasea. Note que " +"ambos campos son sensibles a maysculas/minsculas." -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Mostrar ID de objeto" +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Esta cuenta est inactiva." -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +#: contrib/auth/forms.py:85 msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" msgstr "" -"Muestra el tipo de contenido e ID unvoco de las pginas que representan un " -"nico objeto." +"Esta direccin de correo electrnico no tiene una cuenta de usuario " +"asociada. Est seguro de que se ha registrado?" -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Editar este objeto (ventana actual)" +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Las contraseas introducidas en los campos 'nueva contrasea' no coinciden." -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." msgstr "" -"Le lleva a la pgina de administracin de pginas que representan un nico " -"objeto." +"Tu contrasea antgua es incorrecta. Por favor, vuelve a introducirla " +"correctamente." -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Editar este objeto (nueva ventana)" +#: contrib/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "ID de objeto" -#: 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 pgina de administracin en una nueva ventana." +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "encabezado" -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Fecha:" +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "comentario" -#: contrib/admin/templates/widget/date_time.html:4 -#, fuzzy -msgid "Time:" -msgstr "Hora" +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "calificacin 1" -#: contrib/admin/templates/widget/file.html:2 -#, fuzzy -msgid "Currently:" -msgstr "Actualmente" +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "calificacin 2" -#: contrib/admin/templates/widget/file.html:3 -#, fuzzy -msgid "Change:" -msgstr "Modificar" +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "calificacin 3" -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "redirigir desde" +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "calificacin 4" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "calificacin 5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "calificacin 6" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "calificacin 7" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "calificacin 8" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "es calificacin vlida" + +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "fecha/hora de envo" + +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "es pblico" -#: contrib/redirects/models.py:8 -msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" -"Esta ruta debera ser absoluta, excluyendo el nombre de dominio. Ejeplo: '/" -"events/search/'." +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:307 +msgid "IP address" +msgstr "Direccin IP" -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "redirigir a" +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "est eliminado" -#: contrib/redirects/models.py:10 +#: contrib/comments/models.py:86 msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." msgstr "" -"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que " -"empiece con 'http://'." +"Marque esta caja si el comentario es inapropiado. En su lugar se mostrar " +"\"Este comentario ha sido eliminado\"." -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "redireccin" +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "comentarios" -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "redirecciones" +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "Objeto contenido" -#: contrib/flatpages/models.py:8 +#: contrib/comments/models.py:159 +#, python-format msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" msgstr "" -"Ejemplo: '/about/contact/'. Asegrese de que pone barras al principio y al " -"final." +"Enviado por %(user)s en %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "ttulo" +#: contrib/comments/models.py:168 +msgid "person's name" +msgstr "nombre de la persona" -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "contenido" +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "direccin ip" -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "admitir comentarios" +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "aprobado por el staff" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "nombre de plantilla" +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "comentario libre" -#: 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/comments/models.py:177 +msgid "free comments" +msgstr "comentarios libres" -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "debe estar registrado" +#: contrib/comments/models.py:233 +msgid "score" +msgstr "puntuacin" -#: 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, slo los usuarios registrados podrn ver la pgina." +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "fecha de la puntuacin" -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "pgina esttica" +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "punto karma" -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "pginas estticas" +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "puntos karma" -#: contrib/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "nombre" +#: contrib/comments/models.py:242 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "puntuado %(score)d por %(user)s" -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "nombre en cdigo" +#: contrib/comments/models.py:258 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" +"Este comentario fue marcado por %(user)s:\n" +"\n" +"%(text)s" -#: contrib/auth/models.py:17 -#, fuzzy -msgid "permission" -msgstr "Permiso" +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "fecha de la marca" -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -#, fuzzy -msgid "permissions" -msgstr "Permisos" +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "marca de usuario" -#: contrib/auth/models.py:29 -#, fuzzy -msgid "group" -msgstr "Grupo" +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "marcas de usuario" -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -#, fuzzy -msgid "groups" -msgstr "Grupos" +#: contrib/comments/models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "Marca de %r" -#: contrib/auth/models.py:55 -msgid "username" -msgstr "nombre de usuario" +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "fecha de eliminacin" -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "nombre" +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "eliminacin de moderador" -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "apellidos" +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "eliminaciones de moderador" -#: contrib/auth/models.py:58 -msgid "e-mail address" -msgstr "direccin de correo" +#: contrib/comments/models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "Eliminacin del moderador %r" -#: contrib/auth/models.py:59 -msgid "password" -msgstr "clave" +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Tu nombre:" -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Use '[algo]$[salt]$[hexdigest]'" +#: contrib/comments/templates/comments/freeform.html:5 +#: contrib/comments/templates/comments/form.html:28 +msgid "Comment:" +msgstr "Comentario:" -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "es staff" +#: contrib/comments/templates/comments/freeform.html:10 +#: contrib/comments/templates/comments/form.html:35 +msgid "Preview comment" +msgstr "Previsualizar comentario" -#: 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 administracin." +#: 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/auth/models.py:61 -msgid "active" -msgstr "activo" +#: 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 sesin" -#: contrib/auth/models.py:62 -msgid "superuser status" -msgstr "es superusuario" +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Clave:" -#: contrib/auth/models.py:63 -msgid "last login" -msgstr "ltimo registro" +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Has olvidado tu contrasea?" -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "fecha de creacin" +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Calificaciones" -#: 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 "" -"Adems de los permisos asignados manualmente, este usuario tambin tendr " -"todos los permisos de los grupos en los que est." +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Requerido" -#: contrib/auth/models.py:67 -#, fuzzy -msgid "user permissions" -msgstr "Permisos" +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Opcional" -#: contrib/auth/models.py:70 -#, fuzzy -msgid "user" -msgstr "Usuario" +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Postea una fotografa" -#: contrib/auth/models.py:71 -#, fuzzy -msgid "users" -msgstr "Usuarios" +#: contrib/comments/views/comments.py:27 +msgid "This rating is required because you've entered at least one other rating." +msgstr "Se precisa esta puntuacin porque ha introducido al menos otra ms." -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "Informacin personal" +#: 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 comentario lo envi un usuario que ha enviado menos de %(count)s " +"comentario:\n" +"\n" +"%(text)s" +msgstr[1] "" +"Este comentario lo envi un usuario que ha enviado menos de %(count)s " +"comentarios:\n" +"\n" +"%(text)s" -#: contrib/auth/models.py:77 -msgid "Permissions" -msgstr "Permisos" +#: 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/auth/models.py:78 -msgid "Important dates" -msgstr "Fechas importantes" +#: contrib/comments/views/comments.py:188 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "Slo se admite POST" -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "Grupos" +#: 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 ms de los siguientes campos requeridos" -#: contrib/auth/models.py:219 -#, fuzzy -msgid "message" -msgstr "Mensaje" +#: 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 (violacin de " +"seguridad)" -#: contrib/auth/forms.py:30 +#: contrib/comments/views/comments.py:206 +#: contrib/comments/views/comments.py:292 msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" msgstr "" +"El formulario de comentarios tiene un parmetro 'target' no vlido (el ID de " +"objeto era invlido)" -#: contrib/contenttypes/models.py:25 -#, fuzzy -msgid "python model class name" -msgstr "nombre de mdulo python" +#: 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 formulario de comentario no proporcion 'previsualizar' ni 'enviar'" -#: contrib/contenttypes/models.py:28 -msgid "content type" -msgstr "tipo de contenido" +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Los usuarios annimos no pueden votar" -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "tipos de contenido" +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "ID de comentario no vlido" -#: contrib/sessions/models.py:35 -msgid "session key" -msgstr "clave de sesin" +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "No puedes votarte t mismo" -#: contrib/sessions/models.py:36 -msgid "session data" -msgstr "datos de sesin" +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "redirigir desde" -#: contrib/sessions/models.py:37 -msgid "expire date" -msgstr "fecha de caducidad" +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debera ser absoluta, excluyendo el nombre de dominio. Ejeplo: '/" +"events/search/'." -#: contrib/sessions/models.py:41 -msgid "session" -msgstr "sesin" +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "redirigir a" -#: contrib/sessions/models.py:42 -msgid "sessions" -msgstr "sesiones" +#: 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/redirects/models.py:13 +msgid "redirect" +msgstr "redireccin" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "redirecciones" #: contrib/sites/models.py:10 msgid "domain name" @@ -1335,721 +1490,882 @@ msgstr "sitio" msgid "sites" msgstr "sitios" -#: utils/translation.py:360 -msgid "DATE_FORMAT" +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

                    By %s:

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

                      Por %s:

                      \n" +"
                        \n" -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "" +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Todo" -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "" +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Cualquier fecha" -#: utils/dates.py:6 -msgid "Monday" -msgstr "Lunes" +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Hoy" -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "Martes" +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "ltimos 7 das" -#: utils/dates.py:6 -msgid "Wednesday" -msgstr "Mircoles" +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Este mes" -#: utils/dates.py:6 -msgid "Thursday" -msgstr "Jueves" +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Este ao" -#: utils/dates.py:6 -msgid "Friday" -msgstr "Viernes" +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "hora de accin" -#: utils/dates.py:7 -msgid "Saturday" -msgstr "Sbado" +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "id de objeto" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "repr de objeto" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "marca de accin" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "mensaje de cambio" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "entrada de registro" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "entradas de registro" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Actualmente:" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Modificar:" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Fecha:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Hora:" + +#: 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/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/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 "Documentacin" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentacin" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

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

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

                        Para instalar bookmarklets, arrastre el enlace a su barra\n" +"de favoritos, o pulse con el botn derecho el enlace y adalo a sus " +"favoritos.\n" +"Ahora puede escoger el bookmarklet desde cualquier pgina en el sitio.\n" +"Observer que algunos de estos bookmarklets precisan que est viendo\n" +"el sitio desde un computador sealado como \"interno\" (hable\n" +"con su administrador de sistemas si no est seguro de si el suyo lo es).\n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Documentacin de esta pgina" + +#: 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 pgina a la documentacin de la vista que la genera." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Mostrar ID de objeto" + +#: 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 unvoco de las pginas que representan un " +"nico objeto." -#: utils/dates.py:7 -msgid "Sunday" -msgstr "Domingo" +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Editar este objeto (ventana actual)" -#: utils/dates.py:14 -msgid "January" -msgstr "Enero" +#: 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 pgina de administracin de pginas que representan un nico " +"objeto." -#: utils/dates.py:14 -msgid "February" -msgstr "Febrero" +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Editar este objeto (nueva ventana)" -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "Marzo" +#: 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 pgina de administracin en una nueva ventana." -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "Abril" +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Error del servidor" -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "Mayo" +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Error del servidor (500)" -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "Junio" +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Error de servidor (500)" -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "Julio" +#: 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 electrnico y debera arreglarse en breve. Gracias por su " +"paciencia" -#: utils/dates.py:15 -msgid "August" -msgstr "Agosto" +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Buscar" -#: utils/dates.py:15 -msgid "September" -msgstr "Septiembre" +#: 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" -#: utils/dates.py:15 -msgid "October" -msgstr "Octubre" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s total" -#: utils/dates.py:15 -msgid "November" -msgstr "Noviembre" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:21 +msgid "History" +msgstr "Histrico" -#: utils/dates.py:16 -msgid "December" -msgstr "Diciembre" +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Fecha/hora" -#: utils/dates.py:19 -#, fuzzy -msgid "jan" -msgstr "y" +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Usuario" -#: utils/dates.py:19 -msgid "feb" -msgstr "" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Accin" -#: utils/dates.py:19 -msgid "mar" -msgstr "" +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j M Y P" -#: utils/dates.py:19 -msgid "apr" +#: 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 objeto no tiene histrico de cambios. Probablemente no fue aadido " +"usando este sitio de administracin." -#: utils/dates.py:19 -#, fuzzy -msgid "may" -msgstr "da" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Sitio de administracin de Django" -#: utils/dates.py:19 -msgid "jun" -msgstr "" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administracin de Django" -#: utils/dates.py:20 -msgid "jul" -msgstr "" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Bienvenido," -#: utils/dates.py:20 -msgid "aug" -msgstr "" +#: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:24 +msgid "Log in" +msgstr "Identificarse" -#: utils/dates.py:20 -msgid "sep" -msgstr "" +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Agregar %(name)s" -#: utils/dates.py:20 -msgid "oct" -msgstr "" +#: contrib/admin/templates/admin/delete_confirmation.html:9 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Eliminar" -#: utils/dates.py:20 -msgid "nov" +#: 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 "" +"Eliminar el %(object_name)s '%(escaped_object)s' provocara la eliminacin " +"de objetos relacionados, pero su cuenta no tiene permiso para borrar los " +"siguientes tipos de objetos:" -#: utils/dates.py:20 -msgid "dec" +#: 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 borrarn los siguientes objetos relacionados:" -#: utils/dates.py:27 -msgid "Jan." -msgstr "Ene." - -#: utils/dates.py:27 -msgid "Feb." -msgstr "Feb." - -#: utils/dates.py:28 -msgid "Aug." -msgstr "Ago." +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "S, estoy seguro" -#: utils/dates.py:28 -msgid "Sept." -msgstr "Sept." +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Pgina no encontrada" -#: utils/dates.py:28 -msgid "Oct." -msgstr "Oct." +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." -#: utils/dates.py:28 -msgid "Nov." -msgstr "Nov." +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtro" -#: utils/dates.py:28 -msgid "Dec." -msgstr "Dic." +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Grabar como nuevo" -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "ao" -msgstr[1] "aos" +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Grabar y aadir otro" -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "mes" -msgstr[1] "meses" +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Grabar y continuar editando" -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Grabar" -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "da" -msgstr[1] "das" +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "Modelos disponibles en la aplicacin %(name)s." -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "hora" -msgstr[1] "horas" +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuto" -msgstr[1] "minutos" +#: contrib/admin/templates/admin/index.html:28 +#: contrib/admin/templates/admin/change_form.html:15 +msgid "Add" +msgstr "Agregar" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "Bengal" +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Modificar" -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "Checo" +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." -#: conf/global_settings.py:39 -msgid "Welsh" -msgstr "Gals" +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Acciones recientes" -#: conf/global_settings.py:40 -msgid "Danish" -msgstr "Dans" +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Mis acciones" -#: conf/global_settings.py:41 -msgid "German" -msgstr "Alemn" +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Ninguno disponible" -#: conf/global_settings.py:42 -msgid "Greek" -msgstr "" +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Mostrarlo todo" -#: conf/global_settings.py:43 -msgid "English" -msgstr "Ingls" +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Ver en el sitio" -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "Espaol" +#: 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." -#: conf/global_settings.py:45 -msgid "French" -msgstr "Francs" +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Ordenacin" -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "Gallego" +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Orden:" -#: conf/global_settings.py:47 -msgid "Hungarian" +#: 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 instalacin de la base de datos. Asegrate que las tablas " +"necesarias han sido creadas, y que la base de datos puede ser leida por el " +"usuario apropiado." -#: conf/global_settings.py:48 -msgid "Hebrew" +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +#: 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 contrasea. Luego, podr " +"editar el resto de opciones del usuario." -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "Islands" +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Nombre de usuario" -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "Italiano" +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +msgid "Password" +msgstr "Contrasea" -#: conf/global_settings.py:51 -msgid "Japanese" +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +msgid "Password (again)" +msgstr "Contrasea (de nuevo)" + +#: 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 contrasea que arriba, para verificacin" + +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." msgstr "" +"Introduzca una nueva contrasea para el usuario %(username)s." -#: conf/global_settings.py:52 -msgid "Dutch" +#: 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 "Recuperar clave" + +#: 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 olvidado su clave? Introduzca su direccin de correo electrnico, y " +"crearemos una nueva que le enviaremos por correo." -#: conf/global_settings.py:53 -msgid "Norwegian" -msgstr "Noruego" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Direccin de correo electrnico:" -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "Brasileo" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Recuperar mi clave" -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "Rumano" +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "Ruso" +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Identificarse de nuevo" -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "Eslovaco" +#: 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" -#: conf/global_settings.py:58 -#, fuzzy -msgid "Slovenian" -msgstr "Eslovaco" +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "de su cuenta de usuario en %(site_name)s." -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "Serbio" +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Su nueva clave es: %(new_password)s" -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "Sueco" +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "Puede cambiarla accediendo a esta pgina:" -#: conf/global_settings.py:61 -#, fuzzy -msgid "Ukrainian" -msgstr "Brasileo" +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "Su nombre de usuario, en caso de haberlo olvidado:" -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "Chino simplificado" +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "Gracias por usar nuestro sitio!" -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "" +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "El equipo de %(site_name)s" -#: core/validators.py:60 -msgid "This value must contain only letters, numbers and underscores." -msgstr "Este valor debe contener slo letras, nmeros y guiones bajos." +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Recuperacin de clave exitosa" -#: core/validators.py:64 -#, fuzzy +#: contrib/admin/templates/registration/password_reset_done.html:12 msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." msgstr "" -"Este valor debe contener slo letras, nmeros, guiones bajos y barras (/)." - -#: core/validators.py:72 -msgid "Uppercase letters are not allowed here." -msgstr "No se admiten letras maysculas." - -#: core/validators.py:76 -msgid "Lowercase letters are not allowed here." -msgstr "No se admiten letras minsculas." - -#: core/validators.py:83 -msgid "Enter only digits separated by commas." -msgstr "Introduzca slo dgitos separados por comas." - -#: core/validators.py:95 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Introduzca direcciones de correo vlidas separadas por comas." +"Le hemos enviado una clave nueva a la direccin que ha suministrado. Debera " +"recibirla en breve." -#: core/validators.py:99 -msgid "Please enter a valid IP address." -msgstr "Por favor introduzca una direccin IP vlida." +#: 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" -#: core/validators.py:103 -msgid "Empty values are not allowed here." -msgstr "No se admiten valores vacos." +#: 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 despus introduzca " +"la nueva clave dos veces para verificar que la ha escrito correctamente." -#: core/validators.py:107 -msgid "Non-numeric characters aren't allowed here." -msgstr "No se admiten caracteres no numricos." +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Clave antigua:" -#: core/validators.py:111 -msgid "This value can't be comprised solely of digits." -msgstr "Este valor no puede comprender slo dgitos." +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Clave nueva:" -#: core/validators.py:116 -msgid "Enter a whole number." -msgstr "Introduzca un nmero entero." +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Confirme clave:" -#: core/validators.py:120 -msgid "Only alphabetical characters are allowed here." -msgstr "Slo se admiten caracteres alfabticos." +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Cambiar mi clave" -#: core/validators.py:124 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Introduzca una fecha vlida en formato AAAA-MM-DD." +#: 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" -#: core/validators.py:128 -msgid "Enter a valid time in HH:MM format." -msgstr "Introduzca una hora vlida en formato HH:MM." +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "Su clave ha sido cambiada." -#: 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 vlida en formato YYYY-MM-DD HH:MM." +#: contrib/admin/templatetags/admin_list.py:238 +msgid "All dates" +msgstr "Todas las fechas" -#: core/validators.py:136 -msgid "Enter a valid e-mail address." -msgstr "Introduzca una direccin de correo electrnico vlida" +#: 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, identifquese de nuevo, porque su sesin ha caducado. No se " +"preocupe: se ha guardado su envo." -#: core/validators.py:148 +#: contrib/admin/views/decorators.py:69 msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." msgstr "" -"Enve una imagen vlida. El fichero que ha enviado no era una imagen o se " -"trataba de una imagen corrupta." +"Parece que su navegador no est configurado para aceptar cookies. Actvelas " +"por favor, recargue esta pgina, e intntelo de nuevo." -#: core/validators.py:155 -#, python-format -msgid "The URL %s does not point to a valid image." -msgstr "La URL %s no apunta a una imagen vlida." +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Los nombres de usuario no pueden contener el carcter '@'." -#: core/validators.py:159 +#: contrib/admin/views/decorators.py:85 #, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgid "Your e-mail address is not your username. Try '%s' instead." msgstr "" -"Los nmeros de telfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" " -"no es vlido." - -#: core/validators.py:167 -#, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "La URL %s no apunta a un vdeo QuickTime vlido." +"Su direccin de correo no es su nombre de usuario. Pruebe con '%s' en su " +"lugar." -#: core/validators.py:171 -msgid "A valid URL is required." -msgstr "Se precisa una URL vlida." +#: 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 "filtro:" + +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "vista:" -#: core/validators.py:185 +#: contrib/admin/views/doc.py:164 #, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" -msgstr "" -"Se precisa HTML vlido. Los errores especficos son:\n" -"%s" +msgid "App %r not found" +msgstr "Applicacin %r no encontrada" -#: core/validators.py:192 +#: contrib/admin/views/doc.py:171 #, python-format -msgid "Badly formed XML: %s" -msgstr "XML mal formado: %s" +msgid "Model %(model_name)r not found in app %(app_label)r" +msgstr "El modelo %(model_name)s no se ha encontrado en la aplicacin %(app_label)r" -#: core/validators.py:202 +#: contrib/admin/views/doc.py:184 #, python-format -msgid "Invalid URL: %s" -msgstr "URL no vlida: %s" +msgid "the related `%(app_label)s.%(data_type)s` object" +msgstr "el objeto relacionado`%(app_label)s.%(data_type)s` " -#: core/validators.py:206 core/validators.py:208 +#: 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/admin/views/doc.py:216 #, python-format -msgid "The URL %s is a broken link." -msgstr "La URL %s es un enlace roto." +msgid "related `%(app_label)s.%(object_name)s` objects" +msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`" -#: core/validators.py:214 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Introduzca una abreviatura vlida de estado de los EEUU." +#: contrib/admin/views/doc.py:222 +#, python-format +msgid "all %s" +msgstr "todo %s" -#: core/validators.py:229 +#: contrib/admin/views/doc.py:227 #, 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 "number of %s" +msgstr "nmero de %s" -#: core/validators.py:236 +#: contrib/admin/views/doc.py:232 #, python-format -msgid "This field must match the '%s' field." -msgstr "Este campo debe concordar con el campo '%s'." +msgid "Fields on %s objects" +msgstr "Campos en %s objetos" -#: core/validators.py:255 -msgid "Please enter something for at least one field." -msgstr "Por favor, introduzca algo en al menos un campo." +#: 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" -#: 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 vacos." +#: contrib/admin/views/doc.py:295 +msgid "Boolean (Either True or False)" +msgstr "Booleano (Verdadero o Falso)" -#: core/validators.py:282 +#: contrib/admin/views/doc.py:296 contrib/admin/views/doc.py:314 #, 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 "String (up to %(maxlength)s)" +msgstr "Cadena (mximo %(maxlength)s)" -#: core/validators.py:294 -#, 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" +#: contrib/admin/views/doc.py:297 +msgid "Comma-separated integers" +msgstr "Enteros separados por comas" -#: core/validators.py:313 -msgid "Duplicate values are not allowed." -msgstr "No se admiten valores duplicados." +#: contrib/admin/views/doc.py:298 +msgid "Date (without time)" +msgstr "Fecha (sin hora)" -#: core/validators.py:336 -#, python-format -msgid "This value must be a power of %s." -msgstr "Este valor debe ser una potencia de %s." +#: contrib/admin/views/doc.py:299 +msgid "Date (with time)" +msgstr "Fecha (con hora)" -#: core/validators.py:347 -msgid "Please enter a valid decimal number." -msgstr "Por favor, introduzca un nmero decimal vlido." +#: contrib/admin/views/doc.py:300 +msgid "E-mail address" +msgstr "Direccin de correo electrnico" -#: 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] "" -"Por favor, introduzca un nmero decimal vlido con a lo ms %s dgito en " -"total." -msgstr[1] "" -"Por favor, introduzca un nmero decimal vlido con a lo ms %s dgitos en " -"total." +#: 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" -#: 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 nmero decimal vlido con a lo ms %s dgito " -"decimal." -msgstr[1] "" -"Por favor, introduzca un nmero decimal vlido con a lo ms %s dgitos " -"decimales." +#: contrib/admin/views/doc.py:303 +msgid "Decimal number" +msgstr "Nmero decimal" -#: core/validators.py:362 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Asegrese de que el fichero que enva tiene al menos %s bytes." +#: contrib/admin/views/doc.py:309 +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (Verdadero, Falso o Nulo)" -#: core/validators.py:363 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "Asegrese de que el fichero que enva tiene como mximo %s bytes." +#: contrib/admin/views/doc.py:310 +msgid "Relation to parent model" +msgstr "Relacin con el modelo padre" -#: core/validators.py:376 -msgid "The format for this field is wrong." -msgstr "El formato de este campo es incorrecto." +#: contrib/admin/views/doc.py:311 +msgid "Phone number" +msgstr "Nmero de telfono" -#: core/validators.py:391 -msgid "This field is invalid." -msgstr "Este campo no es vlido." +#: contrib/admin/views/doc.py:316 +msgid "Text" +msgstr "Texto" -#: core/validators.py:426 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "No pude obtener nada de %s." +#: contrib/admin/views/doc.py:317 +msgid "Time" +msgstr "Hora" -#: core/validators.py:429 +#: contrib/admin/views/doc.py:319 +msgid "U.S. state (two uppercase letters)" +msgstr "Estado de los EEUU (dos letras maysculas)" + +#: contrib/admin/views/doc.py:320 +msgid "XML text" +msgstr "Texto XML" + +#: contrib/admin/views/doc.py:346 #, 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 vlida." +msgid "%s does not appear to be a urlpattern object" +msgstr "%s no parece ser un objeto urlpattern" + +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Sitio administrativo" -#: core/validators.py:462 +#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19 #, 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 lnea %(line)s. (La lnea " -"empieza por \"%(start)s\".)" +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "Se aadi con xito el %(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 "Puede editarlo de nuevo abajo." -#: core/validators.py:466 +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #, 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 lnea %(line)s no est permitido en ese " -"contexto. (La lnea empieza por \"%(start)s\".)" +msgid "You may add another %s below." +msgstr "Puede agregar otro %s abajo." -#: core/validators.py:471 +#: contrib/admin/views/main.py:289 #, python-format -msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" -msgstr "" -"El \"%(attr)s\" de la lnea %(line)s no es un atributo vlido. (La lnea " -"empieza por \"%(start)s\".)" +msgid "Add %s" +msgstr "Agregar %s" -#: core/validators.py:476 +#: contrib/admin/views/main.py:335 #, python-format -msgid "" -"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" -"(start)s\".)" -msgstr "" -"La \"<%(tag)s>\" de la lnea %(line)s no es una etiqueta vlida. (La lnea " -"empieza por \"%(start)s\".)" +msgid "Added %s." +msgstr "Agregado %s." -#: core/validators.py:480 +#: contrib/admin/views/main.py:337 #, 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 lnea %(line)s le faltan uno o ms atributos " -"requeridos. (La lnea empieza por \"%(start)s\".)" +msgid "Changed %s." +msgstr "Modificado %s." -#: core/validators.py:485 +#: contrib/admin/views/main.py:339 #, 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 lnea %(line)s tiene un valor que no es " -"vlido. (La lnea empieza por \"%(start)s\".)" +msgid "Deleted %s." +msgstr "Borrado %s." -#: 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/admin/views/main.py:342 +msgid "No fields changed." +msgstr "No ha cambiado ningn campo." -#: db/models/fields/__init__.py:40 +#: contrib/admin/views/main.py:345 #, 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:542 db/models/fields/__init__.py:553 -#: forms/__init__.py:346 -msgid "This field is required." -msgstr "Este campo es obligatorio." +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "Se modific con xito el %(name)s \"%(obj)s." -#: db/models/fields/__init__.py:337 -#, fuzzy -msgid "This value must be an integer." -msgstr "Este valor debe ser una potencia de %s." +#: contrib/admin/views/main.py:353 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "Se agreg con xito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo." -#: 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." +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "Modificar %s" -#: db/models/fields/__init__.py:385 -#, fuzzy -msgid "This field cannot be null." -msgstr "Este campo no es vlido." +#: contrib/admin/views/main.py:473 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Uno o ms %(fieldname)s en %(name)s: %(obj)s" -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "Introduzca un nombre de fichero vlido" +#: contrib/admin/views/main.py:478 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Uno o ms %(fieldname)s en %(name)s:" -#: db/models/fields/related.py:43 +#: contrib/admin/views/main.py:511 #, python-format -msgid "Please enter a valid %s." -msgstr "Por favor, introduzca un %s vlido." +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Se elimin con xito el %(name)s \"%(obj)s\"." -#: db/models/fields/related.py:579 -#, fuzzy -msgid "Separate multiple IDs with commas." -msgstr " Separe mltiples IDs con comas." +#: contrib/admin/views/main.py:514 +msgid "Are you sure?" +msgstr "Est seguro?" -#: 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 ms de uno." +#: contrib/admin/views/main.py:536 +#, python-format +msgid "Change history: %s" +msgstr "Modificar histrico: %s" -#: db/models/fields/related.py:625 +#: contrib/admin/views/main.py:570 #, 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 vlidos. El valor %(value)r no es " -"vlido." -msgstr[1] "" -"Por favor, introduzca IDs de %(self)s vlidos. Los valores %(value)r no son " -"vlidos." +msgid "Select %s" +msgstr "Escoja %s" -#: forms/__init__.py:380 +#: contrib/admin/views/main.py:570 #, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "Asegrese de que su texto tiene menos de %s carcter." -msgstr[1] "Asegrese de que su texto tiene menos de %s caracteres." +msgid "Select %s to change" +msgstr "Escoja %s para modificar" -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "No se permiten saltos de lnea." +#: contrib/admin/views/main.py:758 +msgid "Database error" +msgstr "Erorr en la base de datos" -#: 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 opcin vlida; '%(data)s' no est en %(choices)s." +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "Aadir usuario" -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "El fichero enviado est vaco." +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "La clave se ha cambiado exitosamente." -#: forms/__init__.py:699 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Introduzca un nmero entero entre -32,768 y 32,767." +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Cambiar clave: %s" -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "Introduzca un nmero positivo." +#: contrib/localflavor/usa/forms.py:17 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "Introduzca un cdigo zip en el formato XXXXX o XXXX-XXXX." -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Introduzca un nmero entero entre 0 y 32,767." +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "" +"Introduzca in cdigo postal. Se necesita un espacio entre las dos partes del " +"cdigo." -#: template/defaultfilters.py:379 -msgid "yes,no,maybe" -msgstr "si,no,tal vez" +#: contrib/sessions/models.py:51 +msgid "session key" +msgstr "clave de sesin" -#~ msgid "Comment" -#~ msgstr "Comentario" +#: contrib/sessions/models.py:52 +msgid "session data" +msgstr "datos de sesin" + +#: contrib/sessions/models.py:53 +msgid "expire date" +msgstr "fecha de caducidad" -#~ msgid "Comments" -#~ msgstr "Comentarios" +#: contrib/sessions/models.py:57 +msgid "session" +msgstr "sesin" -#~ msgid "String (up to 50)" -#~ msgstr "Cadena (mximo 50)" +#: contrib/sessions/models.py:58 +msgid "sessions" +msgstr "sesiones" -#~ msgid "label" -#~ msgstr "etiqueta" +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "El %(verbose_name)s se ha creado correctamente." -#~ msgid "package" -#~ msgstr "paquete" +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "Se actualiz con xito el %(verbose_name)s." -#~ msgid "packages" -#~ msgstr "paquetes" +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "El %(verbose_name)s ha sido eliminado." -#, 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 nmero decimal vlido con a lo ms %s dgito en " -#~ "total." -#~ msgstr[1] "" -#~ "Por favor, introduzca un nmero decimal vlido con a lo ms %s dgitos en " -#~ "total." diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.mo b/django/conf/locale/es_AR/LC_MESSAGES/django.mo index f550fca3db..b7f777611b 100644 Binary files a/django/conf/locale/es_AR/LC_MESSAGES/django.mo and b/django/conf/locale/es_AR/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.po b/django/conf/locale/es_AR/LC_MESSAGES/django.po index 8af7c42e5e..c299f2c502 100644 --- a/django/conf/locale/es_AR/LC_MESSAGES/django.po +++ b/django/conf/locale/es_AR/LC_MESSAGES/django.po @@ -1,15 +1,14 @@ # Translation of django.po to Argentinean spanish, based on Spanish # translation work by Ricardo Javier Crdenes Medina. -# This file is distributed under the same license as the PACKAGE package. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. -# Ramiro Morales , 2006. +# This file is distributed under the same license as the Django package. +# Copyright (C) 2006,2007 Ramiro Morales # 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 \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" @@ -17,15 +16,15 @@ msgstr "" "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 @@ msgstr "tipos de contenido" msgid "Logged out" msgstr "Sesin 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 cdigo" -#: 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 mxima 30 caracteres alfanumricos (letras, dgitos 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 "direccin de correo" -#: contrib/auth/models.py:59 +#: contrib/auth/models.py:94 msgid "password" msgstr "contrasea" -#: 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 change " +"password form." +msgstr "" +"Use '[algo]$[salt]$[hexdigest]' o use el formulario de " +"cambio de contrasea." -#: 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 administracin." -#: 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 administracin 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 " +"explcitamente." + +#: 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 creacin" -#: 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 @@ msgstr "" "Adems de los permisos asignados manualmente, este usuario tambin 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 "Informacin 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 contraseas 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 @@ msgstr "" "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 contrasea correctos. Note que " -"ambos campos son sensibles a maysculas/minsculas." +"Por favor introduzca un nombre de usuario y una contrasea correctos. Note " +"que ambos campos son sensibles a maysculas/minsculas." -#: 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 direccin 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 contrasea' no coinciden entre si." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "" +"La antigua contrasea ingresada es incorrecta. Por favor ingrsela " +"nuevamente." + #: contrib/redirects/models.py:7 msgid "redirect from" msgstr "redirigir desde" @@ -255,7 +307,7 @@ msgstr "fecha/hora de env msgid "is public" msgstr "es pblico" -#: 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 "Direccin IP" @@ -392,12 +444,12 @@ msgstr "ID de comentario no v 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 puntuacin porque ha introducido al menos otra ms." -#: 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 @@ msgstr[1] "" "\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-annimo':\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 "Slo 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 ms 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 (violacin 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 @@ msgid "Your name:" 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 @@ msgid "Username:" msgstr "Usuario:" #: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Contrasea:" - -#: contrib/comments/templates/comments/form.html:6 -msgid "Forgotten your password?" -msgstr "Olvid su contrasea?" - -#: 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 @@ msgstr "Olvid msgid "Log out" msgstr "Cerrar sesin" +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Contrasea:" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Olvid su contrasea?" + #: contrib/comments/templates/comments/form.html:12 msgid "Ratings" msgstr "Calificaciones" @@ -530,7 +583,7 @@ msgstr "Opcional" 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 @@ msgstr "nombre de plantilla" #: 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 @@ msgstr "p msgid "flat pages" msgstr "pginas estticas" -#: contrib/sessions/models.py:35 +#: contrib/sessions/models.py:51 msgid "session key" msgstr "clave de sesin" -#: contrib/sessions/models.py:36 +#: contrib/sessions/models.py:52 msgid "session data" msgstr "datos de sesin" -#: 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 "sesin" -#: contrib/sessions/models.py:42 +#: contrib/sessions/models.py:58 msgid "sessions" msgstr "sesiones" @@ -651,15 +704,18 @@ msgstr "Este mes" msgid "This year" msgstr "Este ao" -#: 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 @@ msgstr "entrada de registro" 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 @@ msgstr "" "Por favor, identifquese de nuevo porque su sesin ha caducado. No se " "preocupe: se ha guardado su envo." -#: 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 @@ msgstr "" "Parece que su navegador no est configurado para aceptar cookies. Actvelas " "por favor, recargue esta pgina, e intntelo 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 carcter '@'." -#: 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 direccin 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 aadi 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 ningn campo." +msgstr "No ha modificado ningn 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 ms %(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 ms %(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 "nmero 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 (mximo %(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 "Direccin de correo electrnico" -#: 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 "Nmero 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 "Relacin con el modelo padre" -#: contrib/admin/views/doc.py:296 +#: contrib/admin/views/doc.py:308 msgid "Phone number" msgstr "Nmero de telfono" -#: 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 maysculas)" -#: 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 contrasea exitoso" + +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contrasea: %S" + #: contrib/admin/templates/widget/file.html:2 msgid "Currently:" msgstr "Actualmente" @@ -916,8 +1046,9 @@ msgstr "Hora:" #: 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 @@ msgstr "Documentaci #: 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 @@ msgstr "Cambiar contrase #: 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 @@ 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 "Historia" @@ -989,15 +1124,15 @@ msgstr "" "Este objeto no tiene historia de modificaciones. Probablemente no fue " "aadido usando este sitio de administracin." -#: 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 @@ msgstr "Administraci msgid "Models available in the %(name)s application." msgstr "Modelos disponibles en la aplicacin %(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 @@ msgstr "P msgid "We're sorry, but the requested page could not be found." msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Ha olvidado su contrasea?" - #: contrib/admin/templates/admin/filters.html:4 msgid "Filter" msgstr "Filtrar" -#: 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 "Ordenacin" -#: 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 @@ 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:" +"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' provocara la eliminacin de " -"objetos relacionados, pero su cuenta no tiene permiso para eliminar los " +"Eliminar el %(object_name)s '%(escaped_object)s' provocara la eliminacin " +"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 " -"eliminarn los siguientes objetos relacionados:" +"Est seguro de que quiere eliminar los %(object_name)s \"%(escaped_object)s" +"\"? Se eliminarn los siguientes objetos relacionados:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" @@ -1172,6 +1309,40 @@ msgstr "" "tablas de la misma hayan sido creadas, y asegrese 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 %(username)s." +msgstr "" +"Introduzca una nueva contrasena para el usuario %(username)s." + +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +msgid "Password" +msgstr "Contrasea:" + +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +msgid "Password (again)" +msgstr "Contrasea (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 verificacin, introduzca la misma contrasea 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 contrasea. 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,25 +1530,15 @@ msgid "As above, but opens the admin page in a new window." msgstr "" "Como antes, pero abre la pgina de administracin en una nueva ventana." -#: utils/translation.py:363 -msgid "DATE_FORMAT" -msgstr "j N Y" - -#: utils/translation.py:364 -msgid "DATETIME_FORMAT" -msgstr "j N Y P" - -#: utils/translation.py:365 -msgid "TIME_FORMAT" -msgstr "P" - -#: utils/translation.py:381 -msgid "YEAR_MONTH_FORMAT" -msgstr "F 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:382 -msgid "MONTH_DAY_FORMAT" -msgstr "j \\de F" +#: 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/dates.py:6 msgid "Monday" @@ -1461,11 +1622,11 @@ msgstr "ene" #: 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 @@ msgstr "abr" #: 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 @@ msgstr "set" #: 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 @@ msgstr "Enero" #: utils/dates.py:27 msgid "Feb." -msgstr "" +msgstr "Feb." #: utils/dates.py:28 msgid "Aug." @@ -1521,11 +1682,11 @@ msgstr "Set." #: 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 @@ msgid_plural "minutes" 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 "Cataln" + +#: conf/global_settings.py:42 msgid "Czech" msgstr "Checo" -#: conf/global_settings.py:39 +#: conf/global_settings.py:43 msgid "Welsh" msgstr "Gals" -#: conf/global_settings.py:40 +#: conf/global_settings.py:44 msgid "Danish" msgstr "Dans" -#: conf/global_settings.py:41 +#: conf/global_settings.py:45 msgid "German" msgstr "Alemn" -#: 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 "Ingls" -#: conf/global_settings.py:44 +#: conf/global_settings.py:48 msgid "Spanish" msgstr "Espaol" -#: conf/global_settings.py:45 +#: conf/global_settings.py:49 msgid "Argentinean Spanish" msgstr "Espaol Argentino" -#: conf/global_settings.py:46 +#: conf/global_settings.py:50 +msgid "Finnish" +msgstr "Finlands" + +#: conf/global_settings.py:51 msgid "French" msgstr "Francs" -#: 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 "Hngaro" -#: 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 "Islands" -#: 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 "Japons" -#: 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 "Holands" -#: 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 "Brasileo" -#: 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 nmero 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 vlida 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 vlida 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 vlido" +msgstr "Introduzca un nombre de achivo vlido." -#: 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 vlido." -#: db/models/fields/related.py:579 +#: db/models/fields/related.py:642 msgid "Separate multiple IDs with commas." msgstr " Separe mltiples 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 ms de uno." +"Mantenga presionada \"Control\" (\"Command\" en un Mac) para seleccionar ms " +"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 @@ msgstr[1] "" "Por favor, introduzca IDs de %(self)s vlidos. Los valores %(value)r no son " "vlidos." -#: 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] "Asegrese de que su texto tiene menos de %s carcter." -msgstr[1] "Asegrese de que su texto tiene menos de %s caracteres." - -#: forms/__init__.py:386 -msgid "Line breaks are not allowed here." -msgstr "No se permiten saltos de lnea." - -#: 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 opcin vlida; '%(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 codificacin en el formulario." - -#: forms/__init__.py:661 -msgid "The submitted file is empty." -msgstr "El archivo enviado est vaco." - -#: forms/__init__.py:717 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Introduzca un nmero entero entre -32,768 y 32,767." - -#: forms/__init__.py:727 -msgid "Enter a positive number." -msgstr "Introduzca un nmero positivo." - -#: forms/__init__.py:737 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Introduzca un nmero 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 slo letras, nmeros 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 slo letras, nmeros, guiones bajos, barras (/) o " -"slashes." +"Este valor debe contener slo letras, nmeros, 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 slo letras, nmeros, guiones bajos o guiones." + +#: core/validators.py:76 msgid "Uppercase letters are not allowed here." msgstr "No se admiten letras maysculas." -#: core/validators.py:79 +#: core/validators.py:80 msgid "Lowercase letters are not allowed here." msgstr "No se admiten letras minsculas." -#: core/validators.py:86 +#: core/validators.py:87 msgid "Enter only digits separated by commas." msgstr "Introduzca slo dgitos 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 vlidas separadas por comas." -#: core/validators.py:102 +#: core/validators.py:103 msgid "Please enter a valid IP address." msgstr "Por favor introduzca una direccin IP vlida." -#: core/validators.py:106 +#: core/validators.py:107 msgid "Empty values are not allowed here." msgstr "No se admiten valores vacos." -#: core/validators.py:110 +#: core/validators.py:111 msgid "Non-numeric characters aren't allowed here." msgstr "No se admiten caracteres no numricos." -#: 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 slo por dgitos." -#: core/validators.py:119 +#: core/validators.py:120 newforms/fields.py:126 msgid "Enter a whole number." msgstr "Introduzca un nmero entero." -#: core/validators.py:123 +#: core/validators.py:124 msgid "Only alphabetical characters are allowed here." msgstr "Slo se admiten caracteres alfabticos." -#: core/validators.py:127 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Introduzca una fecha vlida en formato AAAA-MM-DD." +#: core/validators.py:139 +msgid "Year must be 1900 or later." +msgstr "El ao debe ser 1900 o posterior." -#: core/validators.py:131 +#: core/validators.py:143 +#, python-format +msgid "Invalid date: %s." +msgstr "Fecha no vlida: %s." + +#: core/validators.py:152 msgid "Enter a valid time in HH:MM format." msgstr "Introduzca una hora vlida en formato HH:MM." -#: core/validators.py:139 +#: core/validators.py:161 newforms/fields.py:269 msgid "Enter a valid e-mail address." msgstr "Introduzca una direccin de correo electrnico vlida" -#: 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 codificacin 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 @@ msgstr "" "Enve una imagen vlida. El archivo que ha enviado no era una imagen o se " "trataba de una imagen corrupta." -#: core/validators.py:162 +#: core/validators.py:184 #, python-format msgid "The URL %s does not point to a valid image." msgstr "La URL %s no apunta a una imagen vlida." -#: core/validators.py:166 +#: core/validators.py:188 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "" -"Los nmeros de telfono deben guardar el formato XXX-XXX-XXXX format. \"%s\" " -"no es vlido." +"Los nmeros telefnicos deben respetar el formato XXX-XXX-XXXX. \"%s\" no es " +"vlido." -#: core/validators.py:174 +#: core/validators.py:196 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "La URL %s no apunta a un vdeo QuickTime vlido." -#: core/validators.py:178 +#: core/validators.py:200 msgid "A valid URL is required." msgstr "Se precisa una URL vlida." -#: core/validators.py:192 +#: core/validators.py:214 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" @@ -1882,69 +2078,84 @@ msgstr "" "Se precisa HTML vlido. Los errores especficos 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 vlida: %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 vlida 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 vacos." -#: 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 nmero decimal vlido." -#: 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 @@ msgstr[1] "" "Por favor, introduzca un nmero decimal vlido con un maximo de %s dgitos " "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 @@ msgstr[1] "" "Por favor, introduzca un nmero decimal vlido con un mximo de %s dgitos " "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 @@ msgstr[1] "" "Por favor, introduzca un nmero decimal vlido con un mximo 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 "Asegrese de que el archivo que enva tiene al menos %s bytes." +msgstr "" +"Asegrese de que el archivo que enva es de un tamao mnimo 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 "Asegrese de que el archivo que enva tiene como mximo %s bytes." +msgstr "" +"Asegrese de que el archivo que enva es de un tamao mximo 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 vlido." -#: 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 @@ msgstr "" "La URL %(url)s devolvi la cabecera Content-Type '%(contenttype)s', que no " "es vlida." -#: 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 @@ msgstr "" "Por favor, cierre la etiqueta %(tag)s de la lnea %(line)s. (La lnea " "empieza por \"%(start)s\".)" -#: core/validators.py:481 +#: core/validators.py:546 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " @@ -2030,7 +2245,7 @@ msgstr "" "Parte del texto que comienza en la lnea %(line)s no est permitido en ese " "contexto. (La lnea empieza por \"%(start)s\".)" -#: core/validators.py:486 +#: core/validators.py:551 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" @@ -2039,7 +2254,7 @@ msgstr "" "El \"%(attr)s\" de la lnea %(line)s no es un atributo vlido. (La lnea " "empieza por \"%(start)s\".)" -#: core/validators.py:491 +#: core/validators.py:556 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" @@ -2048,7 +2263,7 @@ msgstr "" "La \"<%(tag)s>\" de la lnea %(line)s no es una etiqueta vlida. (La lnea " "empieza por \"%(start)s\".)" -#: core/validators.py:495 +#: core/validators.py:560 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " @@ -2057,7 +2272,7 @@ msgstr "" "A una etiqueta de la lnea %(line)s le faltan uno o ms atributos " "requeridos. (La lnea empieza por \"%(start)s\".)" -#: core/validators.py:500 +#: core/validators.py:565 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " @@ -2066,18 +2281,126 @@ msgstr "" "El atributo \"%(attr)s\" de la lnea %(line)s tiene un valor que no es " "vlido. (La lnea 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" + +#: 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 "Asegrese de que este valor tenga como mximo %d caracteres." + +#: newforms/fields.py:103 newforms/fields.py:256 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "Asegrese 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 "Asegrese 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 "Asegrese de que este valor sea mayor o igual a %s." + +#: newforms/fields.py:163 +msgid "Enter a valid date." +msgstr "Ingrse una fecha vlida." + +#: newforms/fields.py:190 +msgid "Enter a valid time." +msgstr "Introduzca una hora vlida." + +#: newforms/fields.py:226 +msgid "Enter a valid date/time." +msgstr "Introduzca una fecha/hora vlida." + +#: newforms/fields.py:240 +msgid "Enter a valid value." +msgstr "Introduzca un valor vlido." + +#: newforms/fields.py:287 newforms/fields.py:309 +msgid "Enter a valid URL." +msgstr "Introduzca una URL vlida." + +#: 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 opcin vlida. Esa opcin 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 opcin vlida. %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] "Asegrese de que su texto tiene menos de %s caracter." +msgstr[1] "Asegrese 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 lnea." + +#: 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 opcin vlida; '%(data)s' no est en %(choices)s." + +#: oldforms/__init__.py:669 +msgid "The submitted file is empty." +msgstr "El archivo enviado est vaco." + +#: oldforms/__init__.py:725 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Introduzca un nmero entero entre -32.768 y 32.767." + +#: oldforms/__init__.py:735 +msgid "Enter a positive number." +msgstr "Introduzca un nmero positivo." + +#: oldforms/__init__.py:745 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Introduzca un nmero entero entre 0 y 32.767." + +#~ msgid "Use '[algo]$[salt]$[hexdigest]'" +#~ msgstr "Use '[algoritmo]$[salt]$[hexdigest]'" + +#~ msgid "Have you forgotten your password?" +#~ msgstr "Ha olvidado su contrasea?" -#, fuzzy #~ 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" diff --git a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo index f24c9a12d0..d8e3cc6fd6 100644 Binary files a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo and b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po index 49d3856d3c..91ecb09eed 100644 --- a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po @@ -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 , 2006. +# This file is distributed under the same license as the Django package. +# Copyright (C) Ramiro Morales , 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 \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" @@ -39,7 +38,7 @@ msgstr "%s elegidos" #: contrib/admin/media/js/SelectFilter2.js:54 msgid "Select your choice(s) and click " -msgstr "Haga sus elecciones y haga click en " +msgstr "Seleccione los items a agregar y haga click en " #: contrib/admin/media/js/SelectFilter2.js:59 msgid "Clear all" @@ -51,7 +50,7 @@ msgid "" "January February March April May June July August September October November " "December" msgstr "" -"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre " +"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Setiembre Octubre " "Noviembre Diciembre" #: contrib/admin/media/js/dateparse.js:33 @@ -71,49 +70,49 @@ msgstr "Mostrar" msgid "Hide" msgstr "Ocultar" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 msgid "Now" msgstr "Ahora" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 msgid "Clock" msgstr "Reloj" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 msgid "Choose a time" msgstr "Elija una hora" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:90 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 msgid "Midnight" msgstr "Medianoche" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 msgid "6 a.m." msgstr "6 a.m." -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 msgid "Noon" msgstr "Medioda" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:96 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:187 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 msgid "Cancel" msgstr "Cancelar" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:120 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:181 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 msgid "Today" msgstr "Hoy" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:123 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 msgid "Calendar" msgstr "Calendario" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 msgid "Yesterday" msgstr "Ayer" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 msgid "Tomorrow" msgstr "Maana" diff --git a/django/conf/locale/fi/LC_MESSAGES/django.mo b/django/conf/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..024d2ad98b Binary files /dev/null and b/django/conf/locale/fi/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/fi/LC_MESSAGES/django.po b/django/conf/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 0000000000..275feaaf81 --- /dev/null +++ b/django/conf/locale/fi/LC_MESSAGES/django.po @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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 "" +"

                        By %s:

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

                          Yksi %s:

                          \n" +"
                            \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "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 (500)" +msgstr "Palvelinvirhe (500)" + +#: 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 forgotten your password?" +msgstr "Oletko unohtanut salasanasi?" + +#: 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" +"

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

                            \n" +msgstr "\n

                            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ä).

                            \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ä" diff --git a/django/conf/locale/fi/LC_MESSAGES/djangojs.mo b/django/conf/locale/fi/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..34b397e4ba Binary files /dev/null and b/django/conf/locale/fi/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/fi/LC_MESSAGES/djangojs.po b/django/conf/locale/fi/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..35aa82e893 --- /dev/null +++ b/django/conf/locale/fi/LC_MESSAGES/djangojs.po @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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" diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo index 7b2b1f6e9e..14b8a935a1 100644 Binary files a/django/conf/locale/fr/LC_MESSAGES/django.mo and b/django/conf/locale/fr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po index 104e9a2aa1..62f3b46c37 100644 --- a/django/conf/locale/fr/LC_MESSAGES/django.po +++ b/django/conf/locale/fr/LC_MESSAGES/django.po @@ -7,654 +7,1069 @@ msgid "" 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 \n" +"Last-Translator: Baptiste Goupil \n" "Language-Team: français \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 de l'objet" +#: 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." -#: contrib/comments/models.py:68 -msgid "headline" -msgstr "titre" +#: 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." -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "commentaire" +#: oldforms/__init__.py:397 +msgid "Line breaks are not allowed here." +msgstr "Les retours à la ligne ne sont pas autorisés ici." -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "vote n°1" +#: 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." -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "vote n°2" +#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "Inconnu" -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "vote n°3" +#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "Oui" -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "vote n°4" +#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "Non" -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "vote n°5" +#: 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 "" -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "vote n°6" +#: oldforms/__init__.py:674 +msgid "The submitted file is empty." +msgstr "Le fichier soumis est vide." -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "vote n°7" +#: 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." -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "vote n°8" +#: oldforms/__init__.py:740 +msgid "Enter a positive number." +msgstr "Entrez un nombre entier positif." -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "est un vote valide" +#: oldforms/__init__.py:750 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Entrez un nombre entier entre 0 et 32 767." -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "date et heure soumises" +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -msgid "is public" -msgstr "est public" +#: 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" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -msgid "IP address" -msgstr "adresse IP" +#: 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à." -#: contrib/comments/models.py:86 -msgid "is removed" -msgstr "est supprimé" +#: db/models/fields/__init__.py:366 +msgid "This value must be an integer." +msgstr "Cette valeur doit être un entier." -#: 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 "" -"Cochez cette case si le commentaire est inadéquat. Un message type \"Ce " -"commentaire a été supprimé\" sera affiché en lieu et place de celui-ci." +#: db/models/fields/__init__.py:401 +msgid "This value must be either True or False." +msgstr "Cette valeur doit être soit Vraie soit Fausse." -#: contrib/comments/models.py:91 -msgid "comments" -msgstr "commentaires" +#: db/models/fields/__init__.py:422 +msgid "This field cannot be null." +msgstr "Ce champ ne peut pas être vide." -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "Type de contenu" +#: 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." -#: contrib/comments/models.py:159 +#: 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 "" -"Posted by %(user)s at %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" -"Posté par %(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 "nom" +"Maintenez \"Contrôle (ctrl)\", ou \"Commande (touche pomme)\" sur un Mac, " +"pour en sélectionner plusieurs." -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "adresse IP" +#: 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." -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "approuvé par l'équipe" +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "Arabe" -#: contrib/comments/models.py:176 -msgid "free comment" -msgstr "commentaire libre" +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "Indien" -#: contrib/comments/models.py:177 -msgid "free comments" -msgstr "commentaires libres" +#: conf/global_settings.py:41 +msgid "Catalan" +msgstr "Catalan" -#: contrib/comments/models.py:233 -msgid "score" -msgstr "evaluation" +#: conf/global_settings.py:42 +msgid "Czech" +msgstr "Tchèque" -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "date d'évaluation" +#: conf/global_settings.py:43 +msgid "Welsh" +msgstr "Gallois" -#: contrib/comments/models.py:237 -msgid "karma score" -msgstr "point de Karma" +#: conf/global_settings.py:44 +msgid "Danish" +msgstr "Dannois" -#: contrib/comments/models.py:238 -msgid "karma scores" -msgstr "points de Karma" +#: conf/global_settings.py:45 +msgid "German" +msgstr "Allemand" -#: contrib/comments/models.py:242 -#, python-format -msgid "%(score)d rating by %(user)s" -msgstr "%(score)d évalué par %(user)s" +#: conf/global_settings.py:46 +msgid "Greek" +msgstr "Grec" -#: contrib/comments/models.py:258 -#, python-format -msgid "" -"This comment was flagged by %(user)s:\n" -"\n" -"%(text)s" -msgstr "" -"Ce commentaire a été marqué par %(user)s:\n" -"\n" -"%(text)s" +#: conf/global_settings.py:47 +msgid "English" +msgstr "Anglais" -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "date d'indicateur" +#: conf/global_settings.py:48 +msgid "Spanish" +msgstr "Espagnol" -#: contrib/comments/models.py:268 -msgid "user flag" -msgstr "indicateur utilisateur" +#: conf/global_settings.py:49 +msgid "Argentinean Spanish" +msgstr "Espagnol Argentin" -#: contrib/comments/models.py:269 -msgid "user flags" -msgstr "indicateurs utilisateur" +#: conf/global_settings.py:50 +msgid "Finnish" +msgstr "Dannois" -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "Indicateur par %r" +#: conf/global_settings.py:51 +msgid "French" +msgstr "Français" -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "date de suppression" +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "Galicien" -#: contrib/comments/models.py:280 -msgid "moderator deletion" -msgstr "suppression de modérateur" +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "Hongrois" -#: contrib/comments/models.py:281 -msgid "moderator deletions" -msgstr "suppressions de modérateur" +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "Israélien" -#: contrib/comments/models.py:285 -#, python-format -msgid "Moderator deletion by %r" -msgstr "Suppression de modérateur par %r" +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "Islandais" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Les utilisateurs anonymes ne peuvent pas voter" +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "Italien" -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "ID de commentaire invalide" +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "Japonais" -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "Impossible de voter pour soi-même" +#: 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 " +"('_')." -#: contrib/comments/views/comments.py:28 +#: core/validators.py:68 msgid "" -"This rating is required because you've entered at least one other rating." +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." msgstr "" -"Ce votre est nécéssaire parceque vous avez saisi au moins un autre vote." +"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." -#: contrib/comments/views/comments.py:112 +#: 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 "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comment:\n" -"\n" -"%(text)s" +"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 "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comments:\n" -"\n" -"%(text)s" +"Please enter a valid decimal number with at most %s total digits." msgstr[0] "" -"Ce commentaire a été posté par un utilisateur qui a posté moins de %(count)s " -"commentaire :\n" -"\n" -"%(text)s" +"Saisissez un nombre décimal valide avec au plus %s chiffre s'il vous plaît." msgstr[1] "" -"Ce commentaire a été posté par un utilisateur qui a posté moins de %(count)s " -"commentaires :\n" -"\n" -"%(text)s" +"Saisissez un nombre décimal valide avec au plus %s chiffres s'il vous plaît." -#: contrib/comments/views/comments.py:117 +#: core/validators.py:425 #, python-format msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" +"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 "" -"Ce commentaire a été posté par un utilisateur imprécis :\n" -"\n" -"%(text)s" +"Vérifiez que le fichier transféré fait au moins une taille de %s octets." -#: contrib/comments/views/comments.py:189 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Seuls les POSTs sont autorisés" +#: 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." -#: contrib/comments/views/comments.py:193 -#: 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" +#: core/validators.py:456 +msgid "The format for this field is wrong." +msgstr "Le format de ce champ est mauvais." -#: contrib/comments/views/comments.py:197 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" +#: 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 "" -"Quelqu'un a trafiqué le formulaire de commentaire (violation des règles de " -"sécurité)" +"L'entête Content-Type '%(contenttype)s', renvoyée par l'url %(url)s n'est " +"pas valide." -#: contrib/comments/views/comments.py:207 -#: contrib/comments/views/comments.py:292 +#: core/validators.py:543 +#, python-format msgid "" -"The comment form had an invalid 'target' parameter -- the object ID was " -"invalid" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" msgstr "" -"Ce formulaire de commentaire avait un paramètre cible invalide ; l'ID de " -"l'objet était invalide" +"Veuillez fermer le tag %(tag)s de la ligne %(line)s. (La ligne débutant par " +"\"%(start)s\".)" -#: contrib/comments/views/comments.py:257 -#: contrib/comments/views/comments.py:321 -msgid "The comment form didn't provide either 'preview' or 'post'" +#: 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 "" -"Le formulaire de commentaire ne proposait ni les options de prévisualisation " -"ni d'envoi" +"Du texte commençant à la ligne %(line)s n'est pas autorisé dans ce contexte. " +"(Ligne débutant par \"%(start)s\".)" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" -msgstr "Nom d'utilisateur" +#: 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\".)" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Mot de passe" +#: 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\".)" -#: contrib/comments/templates/comments/form.html:6 -msgid "Forgotten your password?" -msgstr "Mot de passe oublié?" +#: 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\".)" -#: 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 "Déconnexion" +#: 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\".)" -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "Votes" +#: 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." -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "Requis" +#: 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." -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "Optionel" +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "L'objet %(verbose_name)s a été supprimé." -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "Poster une photo" +#: 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." -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "Commentaire :" +#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454 +msgid "Enter a list of values." +msgstr "Entrez une liste de valeur." -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -msgid "Preview comment" -msgstr "Prévisualisation du commentaire" +#: 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." -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Votre nom :" +#: 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." -#: contrib/admin/filterspecs.py:40 +#: 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 "" -"

                            By %s:

                            \n" -"
                              \n" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." msgstr "" -"

                              Par %s :

                              \n" -"
                                \n" +"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple: '/events/" +"search/'." -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -msgid "All" -msgstr "Tout" +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "redirigé vers" -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Toutes les dates" +#: 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/admin/filterspecs.py:110 -msgid "Today" -msgstr "Aujourd'hui" +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "redirige" -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "Les 7 derniers jours" +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "redirige" -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Ce mois-ci" +#: contrib/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "ID de l'objet" -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Cette année" +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "titre" -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Oui" +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "commentaire" -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "Non" +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "vote n°1" -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Inconnu" +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "vote n°2" -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "heure de l'action" +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "vote n°3" -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "id de l'objet" +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "vote n°4" -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "représentation de l'objet" +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "vote n°5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "vote n°6" -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "indicateur de l'action" +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "vote n°7" -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "message de modification" +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "vote n°8" -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "entrée d'historique" +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "est un vote valide" -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "entrées d'historique" +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "date et heure soumises" -#: contrib/admin/templatetags/admin_list.py:228 -msgid "All dates" -msgstr "Toutes les dates" +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "est public" -#: 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 "" -"Saisissez s'il vous plaît un nom d'utilisateur et un mot de passe valide. " -"Remarquez que chacun de ces champs est sensible à la casse (différenciation " -"des majuscules/minuscules)." +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 +msgid "IP address" +msgstr "adresse IP" -#: contrib/admin/views/decorators.py:23 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Connectez-vous" +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "est supprimé" -#: contrib/admin/views/decorators.py:61 +#: contrib/comments/models.py:86 msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." msgstr "" -"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é." +"Cochez cette case si le commentaire est inadéquat. Un message type \"Ce " +"commentaire a été supprimé\" sera affiché en lieu et place de celui-ci." -#: 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 "" -"Il semblerait que votre navigateur n'accepte pas les cookies. Activez-les, " -"rechargez cette page et rééssayez s'il vous plaît." +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "commentaires" -#: contrib/admin/views/decorators.py:82 -msgid "Usernames cannot contain the '@' character." -msgstr "Les noms d'utilisateur ne peuvent contenir le caractère '@'" +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "Type de contenu" -#: contrib/admin/views/decorators.py:84 +#: contrib/comments/models.py:159 #, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." +msgid "" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" 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" +"Posté par %(user)s à %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" -#: contrib/admin/views/main.py:260 -#, 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/comments/models.py:168 +msgid "person's name" +msgstr "nom" -#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 -msgid "You may edit it again below." -msgstr "Vous pouvez continuez de l'éditez ci-dessous." +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "adresse IP" -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 -#, python-format -msgid "You may add another %s below." -msgstr "Vous pouvez ajouter un autre %s ci-dessous." +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "approuvé par l'équipe" -#: contrib/admin/views/main.py:290 -#, python-format -msgid "Add %s" -msgstr "Ajouter %s" +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "commentaire libre" -#: contrib/admin/views/main.py:336 -#, python-format -msgid "Added %s." -msgstr "Ajouté %s." +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "commentaires libres" -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "et" +#: contrib/comments/models.py:233 +msgid "score" +msgstr "evaluation" -#: contrib/admin/views/main.py:338 -#, python-format -msgid "Changed %s." -msgstr "Modifié %s." +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "date d'évaluation" -#: contrib/admin/views/main.py:340 -#, python-format -msgid "Deleted %s." -msgstr "Supprimé %s." +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "point de Karma" -#: contrib/admin/views/main.py:343 -msgid "No fields changed." -msgstr "Aucun champ modifié." +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "points de Karma" -#: contrib/admin/views/main.py:346 +#: contrib/comments/models.py:242 #, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "L'objet %(name)s \"%(obj)s\" a été modifié avec succès." +msgid "%(score)d rating by %(user)s" +msgstr "%(score)d évalué par %(user)s" -#: contrib/admin/views/main.py:354 +#: contrib/comments/models.py:258 #, python-format msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" msgstr "" -"L'objet %(name)s \"%(obj)s\" a été ajouté avec succès.Vous pouvez continuez " -"de l'éditez ci-dessous." +"Ce commentaire a été marqué par %(user)s:\n" +"\n" +"%(text)s" -#: contrib/admin/views/main.py:392 -#, python-format -msgid "Change %s" -msgstr "Changement %s" +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "date d'indicateur" -#: contrib/admin/views/main.py:470 -#, 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/comments/models.py:268 +msgid "user flag" +msgstr "indicateur utilisateur" -#: contrib/admin/views/main.py:475 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Un ou plusieurs %(fieldname)s dans %(name)s:" +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "indicateurs utilisateur" -#: contrib/admin/views/main.py:508 +#: contrib/comments/models.py:273 #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "L'objet %(name)s \"%(obj)s\" a été supprimé avec succès." +msgid "Flag by %r" +msgstr "Indicateur par %r" -#: contrib/admin/views/main.py:511 -msgid "Are you sure?" -msgstr "Êtes-vous sûr ?" +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "date de suppression" -#: contrib/admin/views/main.py:533 -#, python-format -msgid "Change history: %s" -msgstr "Historique des changements : %s" +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "suppression de modérateur" -#: contrib/admin/views/main.py:565 -#, python-format -msgid "Select %s" -msgstr "Sélectionnez %s" +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "suppressions de modérateur" -#: contrib/admin/views/main.py:565 +#: contrib/comments/models.py:285 #, 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 -msgid "Integer" -msgstr "Entier" - -#: contrib/admin/views/doc.py:278 -msgid "Boolean (Either True or False)" -msgstr "Booléen (Vrai ou Faux)" +msgid "Moderator deletion by %r" +msgstr "Suppression de modérateur par %r" -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 -#, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Chaîne de caractère (jusqu'à %(maxlength)s)" +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Les utilisateurs anonymes ne peuvent pas voter" -#: contrib/admin/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "Des entiers séparés par une virgule" +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "ID de commentaire invalide" -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "Date (sans l'heure)" +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "Impossible de voter pour soi-même" -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "Date (avec l'heure)" +#: 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/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "Courriel :" +#: 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] "" +"Ce commentaire a été posté par un utilisateur qui a posté moins de %(count)s " +"commentaire :\n" +"\n" +"%(text)s" +msgstr[1] "" +"Ce commentaire a été posté par un utilisateur qui a posté moins de %(count)s " +"commentaires :\n" +"\n" +"%(text)s" -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "Chemin vers le fichier" +#: contrib/comments/views/comments.py:116 +#, python-format +msgid "" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" +msgstr "" +"Ce commentaire a été posté par un utilisateur imprécis :\n" +"\n" +"%(text)s" -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "Nombre décimal" +#: 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/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "Booléen (Vrai, Faux ou None)" +#: 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/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "Relation au modèle parent" +#: 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/admin/views/doc.py:293 -msgid "Phone number" -msgstr "Numéro de téléphone" +#: 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 "" +"Ce formulaire de commentaire avait un paramètre cible invalide ; l'ID de " +"l'objet était invalide" -#: contrib/admin/views/doc.py:298 -msgid "Text" -msgstr "Texte" +#: contrib/comments/views/comments.py:257 +#: contrib/comments/views/comments.py:321 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "" +"Le formulaire de commentaire ne proposait ni les options de prévisualisation " +"ni d'envoi" -#: contrib/admin/views/doc.py:299 -msgid "Time" -msgstr "Heure" +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Votre nom :" -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" +#: contrib/comments/templates/comments/freeform.html:5 +#: contrib/comments/templates/comments/form.html:28 +msgid "Comment:" +msgstr "Commentaire :" -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "État U.S. (deux lettres majuscules)" +#: contrib/comments/templates/comments/freeform.html:10 +#: contrib/comments/templates/comments/form.html:35 +msgid "Preview comment" +msgstr "Prévisualisation du commentaire" -#: contrib/admin/views/doc.py:302 -msgid "XML text" -msgstr "Texte XML" +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:17 +msgid "Username:" +msgstr "Nom d'utilisateur" +#: 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: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 "Documentation" - -#: 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/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 @@ -667,392 +1082,403 @@ msgstr "Documentation" #: 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 "Modifier votre mot de 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: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 "Accueil" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "Historique" +msgid "Log out" +msgstr "Déconnexion" -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Date/Heure" +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Mot de passe" -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Utilisateur" +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Mot de passe oublié?" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Action" +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Votes" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j. N Y, H:i" +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Requis" -#: 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 "" -"Cet objet n'a pas d'historique de modification. Il n'a probablement pas été " -"ajouté au moyen de ce site d'administration." +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Optionel" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Site d'administration de Django" +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Poster une photo" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administration de Django" +#: contrib/sites/models.py:10 +msgid "domain name" +msgstr "nom de domaine" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Erreur du serveur" +#: contrib/sites/models.py:11 +msgid "display name" +msgstr "nom à afficher" -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Erreur du serveur (500)" +#: contrib/sites/models.py:15 +msgid "site" +msgstr "site" -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Erreur du serveur (500)" +#: contrib/sites/models.py:16 +msgid "sites" +msgstr "sites" -#: contrib/admin/templates/admin/500.html:10 +#: contrib/admin/filterspecs.py:40 +#, 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." +"

                                By %s:

                                \n" +"
                                  \n" msgstr "" -"Une erreur est survenue. Elle a été transmise par courriel aux " -"administrateurs du site et sera corrigée dans les meilleurs délais. Merci " -"pour votre patience." +"

                                  Par %s :

                                  \n" +"
                                    \n" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Cette page n'a pas été trouvée" +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Tout" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Nous sommes désolés, mais la page demandée est introuvable." +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Toutes les dates" -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "Modèles disponibles dans l'application %(name)s." +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Aujourd'hui" -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Ajouter" +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "Les 7 derniers jours" -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Modifier" +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Ce mois-ci" -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "Vous n'avez pas la permission d'éditer quoi que ce soit." +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Cette année" -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Actions récentes" +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "heure de l'action" -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "Mes actions" +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "id de l'objet" -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Aucun(e) disponible" +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "représentation de l'objet" -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "Ajouter %(name)s" +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "indicateur de l'action" -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Avez vous perdu votre mot de passe?" +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "message de modification" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Bienvenue," +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "entrée d'historique" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "entrées d'historique" + +#: contrib/admin/templatetags/admin_list.py:247 +msgid "All dates" +msgstr "Toutes les dates" + +#: 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 "" +"Saisissez s'il vous plaît un nom d'utilisateur et un mot de passe valide. " +"Remarquez que chacun de ces champs est sensible à la casse (différenciation " +"des majuscules/minuscules)." -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Supprimer" +#: contrib/admin/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Connectez-vous" -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, python-format +#: contrib/admin/views/decorators.py:62 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:" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." 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 :" +"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/templates/admin/delete_confirmation.html:21 -#, python-format +#: contrib/admin/views/decorators.py:69 msgid "" -"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " -"the following related items will be deleted:" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." 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 :" +"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/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "Oui, j'en suis certain" +#: 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/templates/admin/filter.html:2 +#: contrib/admin/views/decorators.py:85 #, python-format -msgid " By %(title)s " -msgstr " Par %(title)s " +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/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Envoyer" +#: 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/templates/admin/change_form.html:21 -msgid "View on site" -msgstr "Voir sur le site" +#: 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/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/views/auth.py:30 +#, fuzzy +msgid "Add user" +msgstr "Ajouter %s" -#: contrib/admin/templates/admin/change_form.html:48 -msgid "Ordering" -msgstr "Tri" +#: contrib/admin/views/auth.py:57 +#, fuzzy +msgid "Password changed successfully." +msgstr "Mot de passe modifié avec succés" -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "Ordre :" +#: contrib/admin/views/auth.py:64 +#, fuzzy, python-format +msgid "Change password: %s" +msgstr "Modifier votre mot de passe" -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Sauver en tant que nouveau" +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Gestion du site" -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Sauver et ajouter un nouveau" +#: 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/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Sauver et continuer les modifications" +#: contrib/admin/views/main.py:289 +#, python-format +msgid "Add %s" +msgstr "Ajouter %s" -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Sauver" +#: contrib/admin/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "Ajouté %s." -#: 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 "Modification de votre mot de passe" +#: contrib/admin/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "Modifié %s." -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "Mot de passe modifié avec succés" +#: contrib/admin/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "Supprimé %s." -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "Votre mot de passe a été modifié." +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "Aucun champ modifié." -#: 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 "Réinitialisation de votre mot de passe" +#: 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/templates/registration/password_reset_form.html:12 +#: contrib/admin/views/main.py:353 +#, python-format msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "" -"Mot de passe perdu ? Saisissez votre adresse de courriel ci-dessous et nous " -"annulerons votre mot de passe actuel avant de vous en faire parvenir un " -"nouveau par courriel." +"L'objet %(name)s \"%(obj)s\" a été ajouté avec succès.Vous pouvez continuez " +"de l'éditez ci-dessous." -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "Courriel :" +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "Changement %s" -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Réinitialiser mon mot de passe" +#: 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/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Merci pour le temps que vous avez accordé à ce site aujourd'hui." +#: 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/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Connectez vous à nouveau" +#: 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/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "Mot de passe réinitialisé avec succès" +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "Êtes-vous sûr ?" -#: 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 "" -"Nous vous avons envoyé par courriel un nouveau mot de passe. Vous devriez le " -"recevoir rapidement." +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "Historique des changements : %s" -#: contrib/admin/templates/registration/password_change_form.html:12 -msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "Sélectionnez %s" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "Sélectionnez %s pour changer" + +#: contrib/admin/views/main.py:768 +msgid "Database error" msgstr "" -"Pour des raisons de sécurité, veuillez entrer votre ancien mot de passe puis " -"saisissez deux fois votre nouveau mot de passe afin que nous puissions " -"vérifier que vous l'avez tapé correctement." -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Ancien mot de passe :" +#: 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/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Nouveau mot de passe :" +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "filtre :" -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Confirmation du nouveau mot de passe" +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "vue :" -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Modifier mon mot de passe" +#: 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/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "" -"Vous recevez ce courriel car vous avez demandé un changement de mot de passe" +#: 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/templates/registration/password_reset_email.html:3 +#: contrib/admin/views/doc.py:183 #, python-format -msgid "for your user account at %(site_name)s" -msgstr "pour votre compte au site %(site_name)s" +msgid "the related `%(label)s.%(type)s` object" +msgstr "l'objet `%(label)s.%(type)s en relation " -#: contrib/admin/templates/registration/password_reset_email.html:5 +#: 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 "Your new password is: %(new_password)s" -msgstr "Votre nouveau mot de passe est : %(new_password)s" +msgid "related `%(label)s.%(name)s` objects" +msgstr "les objets `%(label)s.%(type)s en relation" -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "Vous pouvez modifier ce mot de passe à l'adresse suivante :" +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "" -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "Votre nom d'utilisateur, en cas d'oubli :" +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "nombre de %s" -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "Merci d'utiliser notre site !" +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "" -#: contrib/admin/templates/registration/password_reset_email.html:15 +#: 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:292 +msgid "Boolean (Either True or False)" +msgstr "Booléen (Vrai ou Faux)" + +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 #, python-format -msgid "The %(site_name)s team" -msgstr "L'équipe %(site_name)s" +msgid "String (up to %(maxlength)s)" +msgstr "Chaîne de caractère (jusqu'à %(maxlength)s)" -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Signets" +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "Des entiers séparés par une virgule" -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Documentation des signets" +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "Date (sans l'heure)" -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

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

                                    \n" -msgstr "" +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "Date (avec l'heure)" -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Documentation pour cette page" +#: contrib/admin/views/doc.py:297 +msgid "E-mail address" +msgstr "Courriel :" -#: 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 "" -"Vous envoie de n'importe quelle page vers la documentation de la vue qui a " -"généré cette page." +#: 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/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Afficher l'ID de l'objet" +#: contrib/admin/views/doc.py:300 +msgid "Decimal number" +msgstr "Nombre décimal" -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "" -"Montre le content-type et l'ID unique pour les pages qui représente un objet " -"unique." +#: contrib/admin/views/doc.py:306 +msgid "Boolean (Either True, False or None)" +msgstr "Booléen (Vrai, Faux ou None)" -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Editer cet objet (fenêtre courante)" +#: contrib/admin/views/doc.py:307 +msgid "Relation to parent model" +msgstr "Relation au modèle parent" -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "Renvoie à la page d'administration qui représente un objet seul." +#: contrib/admin/views/doc.py:308 +msgid "Phone number" +msgstr "Numéro de téléphone" -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Editer cet objet (nouvelle fenêtre)" +#: contrib/admin/views/doc.py:313 +msgid "Text" +msgstr "Texte" -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "" -"Comme ci-dessus, mais ouvre la page d'administration dans une nouvelle " -"fenêtre." +#: contrib/admin/views/doc.py:314 +msgid "Time" +msgstr "Heure" -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Date :" +#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Heure :" +#: 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: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:" @@ -1062,935 +1488,1009 @@ msgstr "Actuellement :" msgid "Change:" msgstr "Modification :" -#: 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/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Date :" -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "redirigé vers" +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Heure :" -#: 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/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: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 +msgid "Documentation" +msgstr "Documentation" -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "redirige" +#: 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: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 +#: 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 "Modifier votre mot de passe" -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "redirige" +#: 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/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/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 "Accueil" -#: 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/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:21 +msgid "History" +msgstr "Historique" -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "titre" +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Date/Heure" -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "contenu" +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Utilisateur" -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "autoriser les commentaires" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Action" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "nom du template" +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j. N Y, H:i" -#: contrib/flatpages/models.py:13 +#: contrib/admin/templates/admin/object_history.html:36 msgid "" -"Example: 'flatpages/contact_page'. If this isn't provided, the system will " -"use 'flatpages/default'." +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." 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" +"Cet objet n'a pas d'historique de modification. Il n'a probablement pas été " +"ajouté au moyen de ce site d'administration." -#: 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/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Ajouter %(name)s" -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "page à plat" +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Par %(filter_title)s " -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "pages à plat" +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Erreur du serveur" -#: contrib/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "nom" +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Erreur du serveur (500)" -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "nom de code" +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Erreur du serveur (500)" -#: contrib/auth/models.py:17 -msgid "permission" -msgstr "permission" +#: 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 "" +"Une erreur est survenue. Elle a été transmise par courriel aux " +"administrateurs du site et sera corrigée dans les meilleurs délais. Merci " +"pour votre patience." -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -msgid "permissions" -msgstr "permissions" +#: 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/auth/models.py:29 -msgid "group" -msgstr "groupe" +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Envoyer" -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -msgid "groups" -msgstr "groupes" +#: 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/auth/models.py:55 -msgid "username" -msgstr "nom d'utilisateur" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s résultats" -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "prénom" +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Tout montrer" -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "nom" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Site d'administration de Django" -#: contrib/auth/models.py:58 -msgid "e-mail address" -msgstr "courriel" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administration de Django" -#: contrib/auth/models.py:59 -msgid "password" -msgstr "mot de passe" +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtre" -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Utilisez '[algo]$[salt]$[hexdigest]'" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Cette page n'a pas été trouvée" -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "statut équipe" +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Nous sommes désolés, mais la page demandée est introuvable." -#: contrib/auth/models.py:60 -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/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "Modèles disponibles dans l'application %(name)s." -#: contrib/auth/models.py:61 -msgid "active" -msgstr "actif" +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" -#: contrib/auth/models.py:62 -msgid "superuser status" -msgstr "statut super-utilisateur" +#: contrib/admin/templates/admin/index.html:28 +#: contrib/admin/templates/admin/change_form.html:15 +msgid "Add" +msgstr "Ajouter" -#: contrib/auth/models.py:63 -msgid "last login" -msgstr "dernière connexion" +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Modifier" -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "date d'inscription" +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Vous n'avez pas la permission d'éditer quoi que ce soit." -#: 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 "" -"En plus des permissions qui lui sont manuellement assignées, cet utilisateur " -"recevra aussi toutes les permissions de tous les groupes auquels il " -"appartient. " +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Actions récentes" -#: contrib/auth/models.py:67 -msgid "user permissions" -msgstr "permissions de l'utilisateur" +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Mes actions" -#: contrib/auth/models.py:70 -msgid "user" -msgstr "utilisateur" +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Aucun(e) disponible" -#: contrib/auth/models.py:71 -msgid "users" -msgstr "utilisateurs" +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Voir sur le site" -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "Information personnelle" +#: 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/auth/models.py:77 -msgid "Permissions" -msgstr "Permissions" +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Tri" -#: contrib/auth/models.py:78 -msgid "Important dates" -msgstr "Dates importantes" +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Ordre :" -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "Groupes" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Bienvenue," -#: contrib/auth/models.py:219 -msgid "message" -msgstr "message" +#: contrib/admin/templates/admin/delete_confirmation.html:9 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Supprimer" -#: contrib/auth/forms.py:30 +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." +"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 "" -"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/contenttypes/models.py:28 -msgid "content type" -msgstr "type de contenu" - -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "types de contenu" - -#: contrib/sessions/models.py:35 -msgid "session key" -msgstr "clé de session" +"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/sessions/models.py:36 -msgid "session data" -msgstr "donnée de session" +#: 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 "" +"Ê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/sessions/models.py:37 -msgid "expire date" -msgstr "date d'expiration" +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "Oui, j'en suis certain" -#: contrib/sessions/models.py:41 -msgid "session" -msgstr "session" +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Sauver en tant que nouveau" -#: contrib/sessions/models.py:42 -msgid "sessions" -msgstr "sessions" +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Sauver et ajouter un nouveau" -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "nom de domaine" +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Sauver et continuer les modifications" -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "nom à afficher" +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Sauver" -#: contrib/sites/models.py:15 -msgid "site" -msgstr "site" +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "" +"Entrez un nouveau mot de passe pour l'utilisateur %(username)s." -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "sites" +#: 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" -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "j F Y" +#: 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)" -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "j F Y, G:i" +#: 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é." -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "G:i:s" +#: 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." -#: utils/dates.py:6 -msgid "Monday" -msgstr "Lundi" +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Nom d'utilisateur" -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "Mardi" +#: 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 "Modification de votre mot de passe" -#: utils/dates.py:6 -msgid "Wednesday" -msgstr "Mercredi" +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "Mot de passe modifié avec succés" -#: utils/dates.py:6 -msgid "Thursday" -msgstr "Jeudi" +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "Votre mot de passe a été modifié." -#: utils/dates.py:6 -msgid "Friday" -msgstr "Vendredi" +#: 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 "Réinitialisation de votre mot de passe" -#: utils/dates.py:7 -msgid "Saturday" -msgstr "Samedi" +#: 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 "" +"Mot de passe perdu ? Saisissez votre adresse de courriel ci-dessous et nous " +"annulerons votre mot de passe actuel avant de vous en faire parvenir un " +"nouveau par courriel." -#: utils/dates.py:7 -msgid "Sunday" -msgstr "Dimanche" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Courriel :" -#: utils/dates.py:14 -msgid "January" -msgstr "Janvier" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Réinitialiser mon mot de passe" -#: utils/dates.py:14 -msgid "February" -msgstr "Février" +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Merci pour le temps que vous avez accordé à ce site aujourd'hui." -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "Mars" +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Connectez vous à nouveau" -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "Avril" +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Mot de passe réinitialisé avec succès" -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "Mai" +#: 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 "" +"Nous vous avons envoyé par courriel un nouveau mot de passe. Vous devriez le " +"recevoir rapidement." -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "Juin" +#: 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 "" +"Pour des raisons de sécurité, veuillez entrer votre ancien mot de passe puis " +"saisissez deux fois votre nouveau mot de passe afin que nous puissions " +"vérifier que vous l'avez tapé correctement." -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "Juillet" +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Ancien mot de passe :" -#: utils/dates.py:15 -msgid "August" -msgstr "Août" +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Nouveau mot de passe :" -#: utils/dates.py:15 -msgid "September" -msgstr "Septembre" +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Confirmation du nouveau mot de passe" -#: utils/dates.py:15 -msgid "October" -msgstr "Octobre" +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Modifier mon mot de passe" -#: utils/dates.py:15 -msgid "November" -msgstr "Novembre" +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "" +"Vous recevez ce courriel car vous avez demandé un changement de mot de passe" -#: utils/dates.py:16 -msgid "December" -msgstr "Décembre" +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "pour votre compte au site %(site_name)s" -#: utils/dates.py:19 -msgid "jan" -msgstr "jan" +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Votre nouveau mot de passe est : %(new_password)s" -#: utils/dates.py:19 -msgid "feb" -msgstr "fév" +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "Vous pouvez modifier ce mot de passe à l'adresse suivante :" -#: utils/dates.py:19 -msgid "mar" -msgstr "mar" +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "Votre nom d'utilisateur, en cas d'oubli :" -#: utils/dates.py:19 -msgid "apr" -msgstr "avr" +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "Merci d'utiliser notre site !" -#: utils/dates.py:19 -msgid "may" -msgstr "mai" +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "L'équipe %(site_name)s" -#: utils/dates.py:19 -msgid "jun" -msgstr "jui" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Signets" -#: utils/dates.py:20 -msgid "jul" -msgstr "jul" +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Documentation des signets" -#: utils/dates.py:20 -msgid "aug" -msgstr "aout" +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

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

                                    \n" +msgstr "" -#: utils/dates.py:20 -msgid "sep" -msgstr "sep" +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Documentation pour cette page" -#: utils/dates.py:20 -msgid "oct" -msgstr "oct" +#: 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 "" +"Vous envoie de n'importe quelle page vers la documentation de la vue qui a " +"généré cette page." -#: utils/dates.py:20 -msgid "nov" -msgstr "nov" +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Afficher l'ID de l'objet" -#: utils/dates.py:20 -msgid "dec" -msgstr "déc" +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Montre le content-type et l'ID unique pour les pages qui représente un objet " +"unique." -#: utils/dates.py:27 -msgid "Jan." -msgstr "Jan." +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Editer cet objet (fenêtre courante)" -#: utils/dates.py:27 -msgid "Feb." -msgstr "Fév." +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "Renvoie à la page d'administration qui représente un objet seul." -#: utils/dates.py:28 -msgid "Aug." -msgstr "Aôut" +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Editer cet objet (nouvelle fenêtre)" -#: utils/dates.py:28 -msgid "Sept." -msgstr "Sept." +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" +"Comme ci-dessus, mais ouvre la page d'administration dans une nouvelle " +"fenêtre." -#: utils/dates.py:28 -msgid "Oct." -msgstr "Oct." +#: contrib/contenttypes/models.py:26 +msgid "python model class name" +msgstr "nom du module python" -#: utils/dates.py:28 -msgid "Nov." -msgstr "Nov." +#: contrib/contenttypes/models.py:29 +msgid "content type" +msgstr "type de contenu" -#: utils/dates.py:28 -msgid "Dec." -msgstr "Déc." +#: contrib/contenttypes/models.py:30 +msgid "content types" +msgstr "types de contenu" -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "année" -msgstr[1] "années" +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "Déconnecté" -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "mois" -msgstr[1] "mois" +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "nom" -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "nom de code" -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "journée" -msgstr[1] "jours" +#: contrib/auth/models.py:42 +msgid "permission" +msgstr "permission" -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "heure" -msgstr[1] "heures" +#: contrib/auth/models.py:43 contrib/auth/models.py:58 +msgid "permissions" +msgstr "permissions" -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minute" -msgstr[1] "minutes" +#: contrib/auth/models.py:60 +msgid "group" +msgstr "groupe" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "Indien" +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +msgid "groups" +msgstr "groupes" -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "Tchèque" +#: contrib/auth/models.py:90 +msgid "username" +msgstr "nom d'utilisateur" -#: conf/global_settings.py:39 -msgid "Welsh" -msgstr "Gallois" +#: 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 '_')." -#: conf/global_settings.py:40 -msgid "Danish" -msgstr "Dannois" +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "prénom" -#: conf/global_settings.py:41 -msgid "German" -msgstr "Allemand" +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "nom" -#: conf/global_settings.py:42 -msgid "Greek" -msgstr "Grec" +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "courriel" -#: conf/global_settings.py:43 -msgid "English" -msgstr "Anglais" +#: contrib/auth/models.py:94 +msgid "password" +msgstr "mot de passe" -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "Espagnol" +#: contrib/auth/models.py:94 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Utilisez [algo]$[salt]$[hexdigest]' ou le formulaire " +"de changement de mot de passe." -#: conf/global_settings.py:45 -msgid "French" -msgstr "Français" +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "statut équipe" -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "Galicien" +#: 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." -#: conf/global_settings.py:47 -msgid "Hungarian" -msgstr "Hongrois" +#: contrib/auth/models.py:96 +msgid "active" +msgstr "actif" -#: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "Israélien" +#: 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." -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "Islandais" +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "statut super-utilisateur" -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "Italien" +#: 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." -#: conf/global_settings.py:51 -msgid "Japanese" -msgstr "Japonais" +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "dernière connexion" -#: conf/global_settings.py:52 -msgid "Dutch" -msgstr "Néerlandais" +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "date d'inscription" -#: conf/global_settings.py:53 -msgid "Norwegian" -msgstr "Norvégien" +#: 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 "" +"En plus des permissions qui lui sont manuellement assignées, cet utilisateur " +"recevra aussi toutes les permissions de tous les groupes auquels il " +"appartient. " -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "Brésilien" +#: contrib/auth/models.py:102 +msgid "user permissions" +msgstr "permissions de l'utilisateur" -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "Roumain" +#: contrib/auth/models.py:105 +msgid "user" +msgstr "utilisateur" -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "Russe" +#: contrib/auth/models.py:106 +msgid "users" +msgstr "utilisateurs" -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "Slovaque" +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "Information personnelle" -#: conf/global_settings.py:58 -msgid "Slovenian" -msgstr "Slovaque" +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "Permissions" -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "Serbe" +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "Dates importantes" -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "Suédois" +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "Groupes" -#: conf/global_settings.py:61 -msgid "Ukrainian" -msgstr "Ukrainien" +#: contrib/auth/models.py:258 +msgid "message" +msgstr "message" -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "Chinois simplifié" +#: 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." -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "Chinois traditionnel" +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Un utilisateur avec ce nom existe déjà." -#: core/validators.py:60 -msgid "This value must contain only letters, numbers and underscores." +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." msgstr "" -"Ce champ ne doit contenir que des lettres, des nombres et des tirets bas " -"('_')." +"Votre navigateur ne semble pas avoir activé les cookies. Les cookies sont " +"nécessaire pour se connecter" -#: core/validators.py:64 +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Ce compte est inactif." + +#: contrib/auth/forms.py:85 msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" msgstr "" -"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas ('_') " -"et des '/'." +"Cette adresse e-mail ne correspond à aucun compte utilisateur. Êtes-vous sûr " +"de vous être enregistré ?" -#: core/validators.py:72 -msgid "Uppercase letters are not allowed here." -msgstr "Les lettres majuscules ne sont pas autorisées ici." +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Les deux nouveaux mots de passe ne correspondent pas." -#: core/validators.py:76 -msgid "Lowercase letters are not allowed here." -msgstr "Les lettres minuscules ne sont pas autorisées ici." +#: 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." -#: core/validators.py:83 -msgid "Enter only digits separated by commas." -msgstr "Saisissez uniquement des chiffres séparés par des virgules." +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "" -#: 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." +#: contrib/localflavor/usa/forms.py:17 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "" -#: core/validators.py:99 -msgid "Please enter a valid IP address." -msgstr "Entrez une adresse IP valide." +#: contrib/sessions/models.py:51 +msgid "session key" +msgstr "clé de session" -#: core/validators.py:103 -msgid "Empty values are not allowed here." -msgstr "Vous ne pouvez pas laisser ce champ vide." +#: contrib/sessions/models.py:52 +msgid "session data" +msgstr "donnée de session" -#: 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." +#: contrib/sessions/models.py:53 +msgid "expire date" +msgstr "date d'expiration" -#: 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." +#: contrib/sessions/models.py:57 +msgid "session" +msgstr "session" -#: core/validators.py:116 -msgid "Enter a whole number." -msgstr "Entrez un nombre entier." +#: contrib/sessions/models.py:58 +msgid "sessions" +msgstr "sessions" -#: core/validators.py:120 -msgid "Only alphabetical characters are allowed here." -msgstr "Seules les lettres de l'alphabet sont autorisées ici." +#: 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." -#: core/validators.py:124 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Entrez une date valide au format AAAA-MM-JJ." +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "titre" -#: core/validators.py:128 -msgid "Enter a valid time in HH:MM format." -msgstr "Entrez une heure valide au format HH:MM." +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "contenu" -#: 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." +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "autoriser les commentaires" -#: core/validators.py:136 -msgid "Enter a valid e-mail address." -msgstr "Entrez une adresse de courriel valide." +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "nom du template" -#: core/validators.py:148 +#: contrib/flatpages/models.py:13 msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." msgstr "" -"Envoyez une image valide. Le fichier que vous avez transferé n'est pas une " -"image ou bien est une image corrompue." +"Par exemple: 'flatfiles/contact_page'. Sans définition, le système utilisera " +"'flatfiles/default'." -#: 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." +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "enregistrement requis" -#: core/validators.py:159 -#, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." msgstr "" -"Les numéros de téléphone doivent être au format XXX-XXX-XXXX. \"%s\" est " -"incorrect." +"Si coché, seuls les utilisateurs connectés auront la possibilité de voir " +"cette page." -#: 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." +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "page à plat" -#: core/validators.py:171 -msgid "A valid URL is required." -msgstr "Une URL valide est requise." +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "pages à plat" -#: 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" +#: utils/dates.py:6 +msgid "Monday" +msgstr "Lundi" -#: core/validators.py:192 -#, python-format -msgid "Badly formed XML: %s" -msgstr "XML mal formé : %s" +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "Mardi" -#: core/validators.py:202 -#, python-format -msgid "Invalid URL: %s" -msgstr "URL invalide : %s" +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "Mercredi" -#: 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é." +#: utils/dates.py:6 +msgid "Thursday" +msgstr "Jeudi" -#: core/validators.py:214 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Entrez une abréviation d'état américain valide." +#: utils/dates.py:6 +msgid "Friday" +msgstr "Vendredi" -#: 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." +#: utils/dates.py:7 +msgid "Saturday" +msgstr "Samedi" -#: core/validators.py:236 -#, python-format -msgid "This field must match the '%s' field." -msgstr "Ce champ doit correspondre au champ '%s'." +#: utils/dates.py:7 +msgid "Sunday" +msgstr "Dimanche" + +#: utils/dates.py:14 +msgid "January" +msgstr "Janvier" + +#: utils/dates.py:14 +msgid "February" +msgstr "Février" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "Mars" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "Avril" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "Mai" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "Juin" + +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "Juillet" + +#: utils/dates.py:15 +msgid "August" +msgstr "Août" -#: 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." +#: utils/dates.py:15 +msgid "September" +msgstr "Septembre" -#: 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." +#: utils/dates.py:15 +msgid "October" +msgstr "Octobre" -#: 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" +#: utils/dates.py:15 +msgid "November" +msgstr "Novembre" -#: 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" +#: utils/dates.py:16 +msgid "December" +msgstr "Décembre" -#: core/validators.py:313 -msgid "Duplicate values are not allowed." -msgstr "Des valeurs identiques ne sont pas autorisées." +#: utils/dates.py:19 +msgid "jan" +msgstr "jan" -#: core/validators.py:336 -#, python-format -msgid "This value must be a power of %s." -msgstr "Cette valeur doit être une puissance de %s." +#: utils/dates.py:19 +msgid "feb" +msgstr "fév" -#: core/validators.py:347 -msgid "Please enter a valid decimal number." -msgstr "Saisissez un nombre décimal valide s'il vous plaît." +#: utils/dates.py:19 +msgid "mar" +msgstr "mar" -#: 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." +#: utils/dates.py:19 +msgid "apr" +msgstr "avr" -#: 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" +#: utils/dates.py:19 +msgid "may" +msgstr "mai" -#: 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." +#: utils/dates.py:19 +msgid "jun" +msgstr "jui" -#: 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." +#: utils/dates.py:20 +msgid "jul" +msgstr "jul" -#: core/validators.py:376 -msgid "The format for this field is wrong." -msgstr "Le format de ce champ est mauvais." +#: utils/dates.py:20 +msgid "aug" +msgstr "aout" -#: core/validators.py:391 -msgid "This field is invalid." -msgstr "Ce champ est invalide." +#: utils/dates.py:20 +msgid "sep" +msgstr "sep" -#: 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." +#: utils/dates.py:20 +msgid "oct" +msgstr "oct" -#: 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." +#: utils/dates.py:20 +msgid "nov" +msgstr "nov" -#: 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\".)" +#: utils/dates.py:20 +msgid "dec" +msgstr "déc" -#: 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\".)" +#: utils/dates.py:27 +msgid "Jan." +msgstr "Jan." -#: 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\".)" +#: utils/dates.py:27 +msgid "Feb." +msgstr "Fév." -#: 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\".)" +#: utils/dates.py:28 +msgid "Aug." +msgstr "Aôut" -#: 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\".)" +#: utils/dates.py:28 +msgid "Sept." +msgstr "Sept." -#: 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\".)" +#: utils/dates.py:28 +msgid "Oct." +msgstr "Oct." -#: db/models/manipulators.py:302 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "" +#: utils/dates.py:28 +msgid "Nov." +msgstr "Nov." -#: 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à." +#: utils/dates.py:28 +msgid "Dec." +msgstr "Déc." -#: 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." +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "année" +msgstr[1] "années" -#: db/models/fields/__init__.py:337 -msgid "This value must be an integer." -msgstr "Cette valeur doit être un entier." +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "mois" +msgstr[1] "mois" -#: db/models/fields/__init__.py:369 -msgid "This value must be either True or False." -msgstr "Cette valeur doit être soit Vraie soit Fausse." +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "semaine" +msgstr[1] "semaines" -#: db/models/fields/__init__.py:385 -msgid "This field cannot be null." -msgstr "Ce champ ne peut pas être vide." +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "journée" +msgstr[1] "jours" -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "Entrez un nom de fichier valide." +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "heure" +msgstr[1] "heures" -#: db/models/fields/related.py:43 -#, python-format -msgid "Please enter a valid %s." -msgstr "Entrez un %s valide." +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minute" +msgstr[1] "minutes" -#: db/models/fields/related.py:579 -msgid "Separate multiple IDs with commas." -msgstr "Séparez les ID par des virgules." +#: utils/dateformat.py:40 +msgid "p.m." +msgstr "après-midi" -#: 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." +#: utils/dateformat.py:41 +msgid "a.m." +msgstr "matin" -#: 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." +#: utils/dateformat.py:46 +msgid "PM" +msgstr "Matin" -#: 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." +#: utils/dateformat.py:47 +msgid "AM" +msgstr "Après-midi" -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "Les retours à la ligne ne sont pas autorisés ici." +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "minuit" -#: 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." +#: utils/dateformat.py:97 +msgid "noon" +msgstr "midi" -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "Le fichier soumis est vide." +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" +msgstr "j F Y" -#: 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." +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" +msgstr "j F Y, G:i" -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "Entrez un nombre entier positif." +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" +msgstr "G:i:s" -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Entrez un nombre entier entre 0 et 32 767." +#: utils/translation/trans_real.py:380 +#, fuzzy +msgid "YEAR_MONTH_FORMAT" +msgstr "j F Y" + +#: utils/translation/trans_real.py:381 +#, fuzzy +msgid "MONTH_DAY_FORMAT" +msgstr "j F Y" -#: template/defaultfilters.py:379 +#: template/defaultfilters.py:491 msgid "yes,no,maybe" msgstr "oui,non,peut-être" +#~ msgid "%dth" +#~ msgstr "%de" + +#~ msgid "Have you forgotten your password?" +#~ msgstr "" +#~ "Avez vous perdu votre mot de passe?" + +#~ msgid "Use '[algo]$[salt]$[hexdigest]'" +#~ msgstr "Utilisez '[algo]$[salt]$[hexdigest]'" + #~ msgid "Comment" #~ msgstr "Commentaire" diff --git a/django/conf/locale/it/LC_MESSAGES/django.mo b/django/conf/locale/it/LC_MESSAGES/django.mo index 6b7dd0f01f..584531c9b2 100644 Binary files a/django/conf/locale/it/LC_MESSAGES/django.mo and b/django/conf/locale/it/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/it/LC_MESSAGES/django.po b/django/conf/locale/it/LC_MESSAGES/django.po index ecc1cfd159..94a83048be 100644 --- a/django/conf/locale/it/LC_MESSAGES/django.po +++ b/django/conf/locale/it/LC_MESSAGES/django.po @@ -1,1970 +1,2297 @@ +# 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 , 2006. -# -# +# Nicola 'tekNico' Larosa , 2007. +# Nicola Larosa , 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 \n" -"Language-Team: Italian \n" +"POT-Creation-Date: 2007-02-26 20:44+0100\n" +"PO-Revision-Date: 2007-02-27 20:06+0100\n" +"Last-Translator: Nicola Larosa \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 -msgid "" -"Check this box if the comment is inappropriate. A \"This comment has been " -"removed\" message will be displayed instead." -msgstr "" -"Spunta la casella se il commento è inappropriato. Verrà sostituito con un " -"messaggio \"Questo commento è stato rimosso\"." +#: conf/global_settings.py:41 +msgid "Catalan" +msgstr "Catalano" -#: contrib/comments/models/comments.py:31 -msgid "Comment" -msgstr "Commento" +#: conf/global_settings.py:42 +msgid "Czech" +msgstr "Ceco" -#: contrib/comments/models/comments.py:32 -#: contrib/comments/models.py:91 -msgid "Comments" -msgstr "Commenti" +#: conf/global_settings.py:43 +msgid "Welsh" +msgstr "Gallese" -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "Contenitore" +#: conf/global_settings.py:44 +msgid "Danish" +msgstr "Danese" -#: 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 "" -"Commento di %(user)s del %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" +#: conf/global_settings.py:45 +msgid "German" +msgstr "Tedesco" -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "nome della persona" +#: conf/global_settings.py:46 +msgid "Greek" +msgstr "Greco" -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "indirizzo IP" +#: conf/global_settings.py:47 +msgid "English" +msgstr "Inglese" -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "approvato dallo staff" +#: conf/global_settings.py:48 +msgid "Spanish" +msgstr "Spagnolo" -#: contrib/comments/models.py:176 -msgid "free comment" -msgstr "commento libero" +#: conf/global_settings.py:49 +msgid "Argentinean Spanish" +msgstr "Spagnolo argentino" -#: contrib/comments/models.py:177 -msgid "free comments" -msgstr "commenti liberi" +#: conf/global_settings.py:50 +msgid "Finnish" +msgstr "Finlandese" -#: contrib/comments/models.py:233 -msgid "score" -msgstr "punteggio" +#: conf/global_settings.py:51 +msgid "French" +msgstr "Francese" -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "data punteggio" +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "Galiziano" -#: contrib/comments/models.py:237 -msgid "karma score" -msgstr "livello karma" +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "Ungherese" -#: contrib/comments/models.py:238 -msgid "karma scores" -msgstr "livelli karma" +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "Ebraico" -#: contrib/comments/models.py:242 -#, python-format -msgid "%(score)d rating by %(user)s" -msgstr "valutazione: %(score)d da %(user)s" +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "Islandese" -#: contrib/comments/models.py:258 -#, 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" +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "Italiano" -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "data flag" +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "Giapponese" -#: contrib/comments/models.py:268 -msgid "user flag" -msgstr "flag utente" +#: conf/global_settings.py:58 +msgid "Kannada" +msgstr "Kannada" -#: contrib/comments/models.py:269 -msgid "user flags" -msgstr "flag utente" +#: conf/global_settings.py:59 +msgid "Latvian" +msgstr "Lettone" -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "Flag da %r" +#: conf/global_settings.py:60 +msgid "Macedonian" +msgstr "Macedone" -#: contrib/comments/models/comments.py:278 -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "data eliminazione" +#: conf/global_settings.py:61 +msgid "Dutch" +msgstr "Olandese" -#: contrib/comments/models.py:280 -msgid "moderator deletion" -msgstr "rimozione da moderatore" +#: conf/global_settings.py:62 +msgid "Norwegian" +msgstr "Norvegese" -#: contrib/comments/models.py:281 -msgid "moderator deletions" -msgstr "rimozioni da moderatore" +#: conf/global_settings.py:63 +msgid "Polish" +msgstr "Polacco" -#: contrib/comments/models.py:285 -#, python-format -msgid "Moderator deletion by %r" -msgstr "Rimozione da moderatore di %r" +#: conf/global_settings.py:64 +msgid "Brazilian" +msgstr "Brasiliano" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Gli utenti anonimi non possono votare" +#: conf/global_settings.py:65 +msgid "Romanian" +msgstr "Rumeno" -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "ID commento non valido" +#: conf/global_settings.py:66 +msgid "Russian" +msgstr "Russo" -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "Non votare per te stesso" +#: conf/global_settings.py:67 +msgid "Slovak" +msgstr "Slovacco" -#: contrib/comments/views/comments.py:28 -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" +#: conf/global_settings.py:68 +msgid "Slovenian" +msgstr "Sloveno" -#: 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] "" -"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" -"" +#: conf/global_settings.py:69 +msgid "Serbian" +msgstr "Serbo" -#: contrib/comments/views/comments.py:117 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" -msgstr "" -"Commento di un utente \"sketchy\":\n" -"\n" -"%(text)s" +#: conf/global_settings.py:70 +msgid "Swedish" +msgstr "Svedese" -#: contrib/comments/views/comments.py:189 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Sono ammessi solo POST" - -#: 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" - -#: 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/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 "" -"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 'anteprima' o 'invia'" - -#: 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/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Password:" - -#: contrib/comments/templates/comments/form.html:6 -msgid "Forgotten your password?" -msgstr "Hai dimenticato la password?" +#: conf/global_settings.py:71 +msgid "Tamil" +msgstr "Tamil" -#: 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/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 "Opzionale" +#: conf/global_settings.py:72 +msgid "Turkish" +msgstr "Turco" -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "Invia una foto" +#: conf/global_settings.py:73 +msgid "Ukrainian" +msgstr "Ucraino" -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "Commento:" +#: conf/global_settings.py:74 +msgid "Simplified Chinese" +msgstr "Cinese semplificato" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -msgid "Preview comment" -msgstr "Anteprima commento" +#: conf/global_settings.py:75 +msgid "Traditional Chinese" +msgstr "Cinese tradizionale" -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Il tuo nome:" +#: core/validators.py:64 +msgid "This value must contain only letters, numbers and underscores." +msgstr "Questo valore può contenere solo lettere, cifre e sottolineature." -#: contrib/admin/filterspecs.py:40 -#, python-format +#: core/validators.py:68 msgid "" -"

                                    By %s:

                                    \n" -"
                                      \n" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." msgstr "" -"

                                      Da %s:

                                      \n" -"
                                        \n" - -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -msgid "All" -msgstr "Tutti" +"Questo valore può contenere solo lettere, cifre, sottolineature, trattini e " +"barre diagonali." -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Qualsiasi data" +#: 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/admin/filterspecs.py:110 -msgid "Today" -msgstr "Oggi" +#: core/validators.py:76 +msgid "Uppercase letters are not allowed here." +msgstr "Non sono ammesse lettere maiuscole." -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "Ultimi 7 giorni" +#: core/validators.py:80 +msgid "Lowercase letters are not allowed here." +msgstr "Non sono ammesse lettere minuscole." -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Questo mese" +#: core/validators.py:87 +msgid "Enter only digits separated by commas." +msgstr "Inserire solo cifre separate da virgole." -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Quest'anno" +#: core/validators.py:99 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Inserire indirizzi e-mail validi separati da virgole." -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Sì" +#: core/validators.py:103 +msgid "Please enter a valid IP address." +msgstr "Inserire un indirizzo IP valido." -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "No" +#: core/validators.py:107 +msgid "Empty values are not allowed here." +msgstr "È necessario inserire un valore." -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Sconosciuto" +#: core/validators.py:111 +msgid "Non-numeric characters aren't allowed here." +msgstr "Sono ammessi soltanto caratteri numerici." -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "data azione" +#: core/validators.py:115 +msgid "This value can't be comprised solely of digits." +msgstr "Questo valore non può essere composto solo da cifre." -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "ID dell'oggetto" +#: core/validators.py:120 newforms/fields.py:126 +msgid "Enter a whole number." +msgstr "Inserire un numero intero." -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "rappresentazione dell'oggetto" +#: core/validators.py:124 +msgid "Only alphabetical characters are allowed here." +msgstr "Sono ammessi solo caratteri alfabetici." -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "flag azione" +#: core/validators.py:139 +msgid "Year must be 1900 or later." +msgstr "L'anno deve essere 1900 o successivo." -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "modifica messaggio" +#: core/validators.py:143 +#, python-format +msgid "Invalid date: %s." +msgstr "Data non valida: %s." -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "voce di log" +#: core/validators.py:152 +msgid "Enter a valid time in HH:MM format." +msgstr "Inserire un orario valido in formato OO:MM." -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "voci di log" +#: core/validators.py:161 newforms/fields.py:269 +msgid "Enter a valid e-mail address." +msgstr "Inserire un indirizzo e-mail valido." -#: contrib/admin/templatetags/admin_list.py:228 -msgid "All dates" -msgstr "Tutte le date" +#: 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." -#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 -#: contrib/auth/forms.py:41 +#: core/validators.py:177 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." +"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." -#: contrib/admin/views/decorators.py:23 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Accedi" +#: 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." -#: 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 "" -"La sessione è scaduta, si prega di accedere nuovamente. I dati sono stati salvati." +#: 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." -#: contrib/admin/views/decorators.py:68 +#: core/validators.py:214 +#, python-format msgid "" -"Looks like your browser isn't configured to accept cookies. Please enable " -"cookies, reload this page, and try again." +"Valid HTML is required. Specific errors are:\n" +"%s" msgstr "" -"Il browser non è configurato per accettare cookie. Abilitarli, ricaricare la pagina e provare di nuovo." - -#: contrib/admin/views/decorators.py:82 -msgid "Usernames cannot contain the '@' character." -msgstr "Il nome utente non può contenere il carattere '@'." +"È richiesto HTML valido. Gli errori sono i seguenti:\n" +"%s" -#: contrib/admin/views/decorators.py:84 +#: core/validators.py:221 #, 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'." +msgid "Badly formed XML: %s" +msgstr "XML malformato: %s" -#: contrib/admin/views/main.py:226 -msgid "Site administration" -msgstr "Amministrazione sito" +#: core/validators.py:238 +#, python-format +msgid "Invalid URL: %s" +msgstr "URL non valida: %s" -#: contrib/admin/views/main.py:410 +#: core/validators.py:243 core/validators.py:245 #, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "L'oggetto %(name)s di tipo \"%(obj)s\" è stato aggiunto." +msgid "The URL %s is a broken link." +msgstr "La URL %s è un link non funzionante." -#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 -msgid "You may edit it again below." -msgstr "Puoi modificarlo nuovamente qui sotto." +#: core/validators.py:251 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Inserire un valido nome di stato USA abbreviato." -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#: core/validators.py:265 #, python-format -msgid "You may add another %s below." -msgstr "Puoi aggiungere un altro %s qui sotto." +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/admin/views/main.py:290 +#: core/validators.py:272 #, python-format -msgid "Add %s" -msgstr "Aggiungi %s" +msgid "This field must match the '%s' field." +msgstr "Questo campo deve corrispondere al campo '%s'." -#: contrib/admin/views/main.py:336 -#, python-format -msgid "Added %s." -msgstr "Aggiunto %s" +#: core/validators.py:291 +msgid "Please enter something for at least one field." +msgstr "Inserire qualcosa in almeno un campo." -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "e" +#: 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/admin/views/main.py:338 +#: core/validators.py:319 #, python-format -msgid "Changed %s." -msgstr "Modificato %s." +msgid "This field must be given if %(field)s is %(value)s" +msgstr "Questo campo è obbligatorio se %(field)s è %(value)s" -#: contrib/admin/views/main.py:340 +#: core/validators.py:332 #, python-format -msgid "Deleted %s." -msgstr "Rimosso %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/admin/views/main.py:343 -msgid "No fields changed." -msgstr "Nessun campo modificato." +#: core/validators.py:351 +msgid "Duplicate values are not allowed." +msgstr "Non sono ammessi valori duplicati." -#: contrib/admin/views/main.py:346 +#: core/validators.py:366 #, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "L'oggetto %(name)s di tipo \"%(obj)s\" è stato modificato." +msgid "This value must be between %s and %s." +msgstr "Questo valore deve essere compreso tra %s e %s." -#: contrib/admin/views/main.py:354 +#: core/validators.py:368 #, 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 "This value must be at least %s." +msgstr "Questo valore deve essere almeno pari a %s." -#: contrib/admin/views/main.py:392 +#: core/validators.py:370 #, python-format -msgid "Change %s" -msgstr "Modifica %s" +msgid "This value must be no more than %s." +msgstr "Questo valore non deve essere maggiore di %s." -#: contrib/admin/views/main.py:470 +#: core/validators.py:406 #, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Uno o più %(fieldname)s in %(name)s: %(obj)s" +msgid "This value must be a power of %s." +msgstr "Questo valore deve essere una potenza di %s." -#: contrib/admin/views/main.py:475 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Uno o più %(fieldname)s in %(name)s:" +#: core/validators.py:417 +msgid "Please enter a valid decimal number." +msgstr "Inserire un numero decimale valido." -#: contrib/admin/views/main.py:508 +#: core/validators.py:421 #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "L'oggetto %(name)s di tipo \"%(obj)s\" è stato rimosso." +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/admin/views/main.py:511 -msgid "Are you sure?" -msgstr "Sei sicuro?" +#: 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/admin/views/main.py:533 +#: core/validators.py:427 #, python-format -msgid "Change history: %s" -msgstr "Storia delle modifiche: %s" +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/admin/views/main.py:565 +#: core/validators.py:437 #, python-format -msgid "Select %s" -msgstr "Selezionare %s" +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Verificare che il file caricato sia grande almeno %s byte." -#: contrib/admin/views/main.py:565 +#: core/validators.py:438 #, python-format -msgid "Select %s to change" -msgstr "Selezionare %s per modificare" +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/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 "Intero" +#: core/validators.py:455 +msgid "The format for this field is wrong." +msgstr "Il formato di questo campo non è valido." -#: contrib/admin/views/doc.py:278 -msgid "Boolean (Either True or False)" -msgstr "Booleano (True o False)" +#: core/validators.py:470 +msgid "This field is invalid." +msgstr "Questo campo non è valido." -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#: core/validators.py:506 #, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Stringa (massimo %(maxlength)s caratteri)" - -#: contrib/admin/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "Interi separati da virgola" +msgid "Could not retrieve anything from %s." +msgstr "Impossibile recuperare alcunché da %s." -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "Data (senza orario)" +#: 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'." -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "Data (con orario)" +#: core/validators.py:542 +#, python-format +msgid "" +"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\".)" -#: contrib/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "Indirizzo e-mail" +#: 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 "" +"Il testo che comincia a linea %(line)s non e' ammesso in questo contesto. " +"(La linea comincia con \"%(start)s\".)" -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "Percorso di file" +#: 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\" a linea %(line)s non è un attributo valido. (La linea comincia con \"%(start)s\".)" -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "Numero decimale" +#: 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>\" a linea %(line)s non è un tag valido. (La linea comincia con \"%" +"(start)s\".)" -#: contrib/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "Booleano (True, False o None)" +#: 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/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "Relazione a modello padre" +#: 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/admin/views/doc.py:293 -msgid "Phone number" -msgstr "Numero di telefono" +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "I due campi parola chiave non corrispondono." -#: contrib/admin/views/doc.py:263 -msgid "String (up to 50)" -msgstr "Stringa (massimo 50 caratteri)" +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Un utente con questo nome·è già presente." -#: contrib/admin/views/doc.py:298 -msgid "Text" -msgstr "Testo" +#: contrib/auth/forms.py:53 +msgid "" +"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/admin/views/doc.py:299 -msgid "Time" -msgstr "Ora" +#: 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 "" +"Inserire nome utente e password corretti. Entrambi i campi sono case " +"sensitive." -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Questo account non è attivo." -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "Stato americano (due lettere maiuscole)" +#: 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/admin/views/doc.py:302 -msgid "XML text" -msgstr "Testo XML" +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "I due campi 'nuova parola chiave' non corrispondono." -#: 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 "Documentazione" +#: 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/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 "Modifica la password" +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "nome" -#: 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 "Pagina iniziale" +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "nome in codice" -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "Storia" +#: contrib/auth/models.py:42 +msgid "permission" +msgstr "permesso" -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Data/ora" +#: contrib/auth/models.py:43 contrib/auth/models.py:58 +msgid "permissions" +msgstr "permessi" -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Utente" +#: contrib/auth/models.py:60 +msgid "group" +msgstr "gruppo" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Azione" +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +msgid "groups" +msgstr "gruppi" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j F Y, H:i" +#: contrib/auth/models.py:90 +msgid "username" +msgstr "nome utente" -#: contrib/admin/templates/admin/object_history.html:36 +#: contrib/auth/models.py:90 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" +"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/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Amministrazione Django" +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "nome" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Errore del server" +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "cognome" -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Errore del server (500)" +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "indirizzo e-mail" -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Errore del Server (500)" +#: contrib/auth/models.py:94 +msgid "password" +msgstr "parola chiave" -#: contrib/admin/templates/admin/500.html:10 +#: contrib/auth/models.py:94 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." +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "Usare '[algo]$[salt]$[hexdigest]' oppure la maschera di cambio parola chiave." -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Pagina non trovata" +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "privilegi di staff" -#: 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/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/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "Modelli disponibili nell'applicazione %(name)s." +#: contrib/auth/models.py:96 +msgid "active" +msgstr "attivo" -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Aggiungi" +#: 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/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Modifica" +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "privilegi di superutente" -#: 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/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/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Azioni Recenti" +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "ultimo accesso" -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "Azioni Proprie" +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "iscritto in data" -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Nessuna disponibile" +#: 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/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "Aggiungi %(name)s" +#: contrib/auth/models.py:102 +msgid "user permissions" +msgstr "privilegi utente" -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Hai dimenticato la tua password?" +#: contrib/auth/models.py:105 +msgid "user" +msgstr "utente" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Benvenuto," +#: contrib/auth/models.py:106 +msgid "users" +msgstr "utenti" -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Elimina" +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "Informazioni personali" -#: 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 "" -"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:" +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "Privilegi" -#: 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 "" -"Sei sicuro di voler rimuovere %(object_name)s \"%(object)s\"? I seguenti " -"oggetti relazionati saranno rimossi:" +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "Date importanti" -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "Sì, sono sicuro" +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "Gruppi" -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(title)s " -msgstr " Per %(title)s " +#: contrib/auth/models.py:258 +msgid "message" +msgstr "messaggio" -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Vai" +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "Accesso annullato" -#: contrib/admin/templates/admin/change_form.html:21 -msgid "View on site" -msgstr "Vedi sul sito" +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "data azione" -#: contrib/admin/templates/admin/change_form.html:30 -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/models.py:19 +msgid "object id" +msgstr "ID oggetto" -#: contrib/admin/templates/admin/change_form.html:48 -msgid "Ordering" -msgstr "Ordinamento" +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "rappresentazione oggetto" -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "Ordinamento:" +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "flag azione" -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Salva come nuovo" +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "messaggio di modifica" -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Salva e crea nuovo" +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "voce di log" -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Salva e continua" +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "voci di log" -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Salva" +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

                                        By %s:

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

                                          Da %s:

                                          \n" +"
                                            \n" -#: 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/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Tutti" -#: 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/filterspecs.py:109 +msgid "Any date" +msgstr "Qualsiasi data" -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "La tua password è stata modificata." +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Oggi" -#: 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/filterspecs.py:113 +msgid "Past 7 days" +msgstr "Ultimi 7 giorni" -#: 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/filterspecs.py:115 +msgid "This month" +msgstr "Questo mese" -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "Indirizzo e-mail:" +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Quest'anno" -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Resetta la mia password" +#: contrib/admin/filterspecs.py:143 oldforms/__init__.py:572 +#: newforms/widgets.py:170 +msgid "Yes" +msgstr "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 con questo sito." +#: contrib/admin/filterspecs.py:143 oldforms/__init__.py:572 +#: newforms/widgets.py:170 +msgid "No" +msgstr "No" -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Accedi di nuovo" +#: contrib/admin/filterspecs.py:150 oldforms/__init__.py:572 +#: newforms/widgets.py:170 +msgid "Unknown" +msgstr "Sconosciuto" -#: 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/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Accedi" -#: contrib/admin/templates/registration/password_reset_done.html:12 +#: contrib/admin/views/decorators.py:62 msgid "" -"We've e-mailed a new password to the e-mail address you submitted. You " -"should be receiving it shortly." +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." msgstr "" -"Ti abbiamo inviato la nuova password all'indirizzo e-mail da te selezionato. " -"Dovresti riceverla a breve." +"La sessione è scaduta: occorre accedere nuovamente. I dati inseriti sono stati comunque" +"salvati." -#: contrib/admin/templates/registration/password_change_form.html:12 +#: contrib/admin/views/decorators.py:69 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." +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "Il browser non sembra configurato per accettare i cookie. Una volta abilitati, ricaricare la pagina e riprovare." -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Vecchia password:" +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "I nomi utente non possono contenere il carattere '@'." -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Nuova password:" +#: 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 è costituito dall'indirizzo e-mail. Provare con '%s'." -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Conferma password:" +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Amministrazione sito" -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Modifica la mia password" +#: 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\" è stato aggiunto correttamente." -#: 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/views/main.py:261 contrib/admin/views/main.py:347 +#: contrib/admin/views/auth.py:24 +msgid "You may edit it again below." +msgstr "È possibile modificarlo nuovamente qui sotto." -#: contrib/admin/templates/registration/password_reset_email.html:3 +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #, python-format -msgid "for your user account at %(site_name)s" -msgstr "per il tuo account utente su %(site_name)s" +msgid "You may add another %s below." +msgstr "È possibile aggiungere un altro %s qui sotto." -#: contrib/admin/templates/registration/password_reset_email.html:5 +#: contrib/admin/views/main.py:289 #, python-format -msgid "Your new password is: %(new_password)s" -msgstr "La tua nuova password è: %(new_password)s" +msgid "Add %s" +msgstr "Aggiungere %s" -#: 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/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "Aggiunto %s" -#: 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/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "Modificato %s." -#: 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/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "Cancellato %s" -#: contrib/admin/templates/registration/password_reset_email.html:15 +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "Nessun campo modificato." + +#: contrib/admin/views/main.py:345 #, python-format -msgid "The %(site_name)s team" -msgstr "Il team di %(site_name)s" +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)s \"%(obj)s\" è stato modificato correttamente." -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Bookmarklet" +#: 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\" è stato aggiunto correttamente. È possibile modificarlo nuovamente qui sotto." -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Bookmarklet alla documentazione" +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "Modificare %s" -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

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

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

                                            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\").

                                            \n" +#: 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/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Documentazione per questa pagina" +#: 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/templates/admin_doc/bookmarklets.html:20 -msgid "" -"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." +#: contrib/admin/views/main.py:514 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" è stato cancellato correttamente." -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Mostra l'ID dell'oggetto" +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "Sei sicuro?" -#: 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 il tipo di contenuto e l'ID univoco per pagine che rappresentano un singolo oggetto." +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "Tracciato delle modifiche: %s" -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Modifica quest'oggetto (nella finestra corrente)" +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "Seleziona %s" -#: 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." +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "Seleziona %s per modificare" -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Modifica quest'oggetto (in una nuova finestra)" +#: contrib/admin/views/main.py:768 +msgid "Database error" +msgstr "Errore nel database" -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "Come sopra, ma apre la pagina di amministrazione in una nuova finestra." +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "tag:" -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Data:" +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "filtro:" -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Ora:" +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "view:" -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Attualmente:" +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Appl. %r non trovata" -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "Modifica:" +#: 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/redirects/models.py:7 -msgid "redirect from" -msgstr "redirigi da" +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%s.%s` object" +msgstr "l'oggetto `%s.%s` collegato" -#: contrib/redirects/models.py:8 -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/'." +#: 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/redirects/models.py:9 -msgid "redirect to" -msgstr "redirigi verso" +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%s.%s` objects" +msgstr "oggetti `%s.%s` collegati" -#: contrib/redirects/models.py:10 -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://'." +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "tutti %s" -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "redirigi" +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "numero di %s" -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "redirezioni" +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Campi sugli oggetti %s" -#: 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." +#: 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/flatpages/models.py:9 -msgid "title" -msgstr "titolo" +#: contrib/admin/views/doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "Booleano (True o False)" -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "contenuto" +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "Stringa (fino a %(maxlength)s caratteri)" -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "abilita commenti" +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "Interi separati da virgola" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "nome modello" +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "Data (senza orario)" -#: 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'." +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "Data (con orario)" -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "registrazione obbligatoria" +#: contrib/admin/views/doc.py:297 +msgid "E-mail address" +msgstr "Indirizzo e-mail" -#: 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." +#: 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/flatpages/models.py:18 -msgid "flat page" -msgstr "pagina statica" +#: contrib/admin/views/doc.py:300 +msgid "Decimal number" +msgstr "Numero decimale" -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "pagine statiche" +#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85 +msgid "IP address" +msgstr "indirizzo IP" -#: contrib/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "nome" +#: contrib/admin/views/doc.py:306 +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (True, False o None)" -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "nome in codice" +#: contrib/admin/views/doc.py:307 +msgid "Relation to parent model" +msgstr "Collegamento a modello padre" -#: contrib/auth/models.py:17 -msgid "permission" -msgstr "permesso" +#: contrib/admin/views/doc.py:308 +msgid "Phone number" +msgstr "Numero di telefono" -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -msgid "permissions" -msgstr "permessi" +#: contrib/admin/views/doc.py:313 +msgid "Text" +msgstr "Testo" -#: contrib/auth/models.py:29 -msgid "group" -msgstr "gruppo" +#: contrib/admin/views/doc.py:314 +msgid "Time" +msgstr "Orario" -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -msgid "groups" -msgstr "gruppi" +#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" -#: contrib/auth/models.py:55 -msgid "username" -msgstr "nome utente" +#: contrib/admin/views/doc.py:316 +msgid "U.S. state (two uppercase letters)" +msgstr "Stato USA (due lettere maiuscole)" -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "nome" +#: contrib/admin/views/doc.py:317 +msgid "XML text" +msgstr "Testo XML" -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "cognome" +#: 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/auth/models.py:58 -msgid "e-mail address" -msgstr "indirizzo e-mail" +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "Aggiungi utente" -#: contrib/auth/models.py:59 -msgid "password" -msgstr "password" +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "La parola chiave è stata cambiata correttamente." -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Usare '[algo]$[salt]$[hexdigest]'" +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Cambia la parola chiave: %s" -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "staff" +#: contrib/admin/templatetags/admin_list.py:247 +msgid "All dates" +msgstr "Tutte le date" -#: 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/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Mostra tutto" -#: contrib/auth/models.py:61 -msgid "active" -msgstr "attivo" +#: 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 +msgid "Documentation" +msgstr "Documentazione" -#: contrib/auth/models.py:62 -msgid "superuser status" -msgstr "superuser" +#: 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/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/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 parola chiave" -#: contrib/auth/models.py:63 -msgid "last login" -msgstr "ultimo accesso" +#: 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_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 "Esci" -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "iscritto da" +#: 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: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/registration/password_change_done.html:4 +msgid "Home" +msgstr "Pagina iniziale" + +#: contrib/admin/templates/admin/delete_confirmation.html:9 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Cancella" -#: contrib/auth/models.py:66 +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." +"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 "" -"In aggiunta ai permessi assegnati manualmente, l'utente riceverà anche tutti " -"i permessi assegnati ad ogni gruppo cui appartiene." +"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/auth/models.py:67 -msgid "user permissions" -msgstr "permessi utente" +#: 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 "" +"Sei sicuro di voler rimuovere %(object_name)s \"%(escaped_object)s\"? Tutti i seguenti " +"oggetti collegati saranno cancellati:" -#: contrib/auth/models.py:70 -msgid "user" -msgstr "utente" +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "Sì, sono sicuro" -#: contrib/auth/models.py:71 -msgid "users" -msgstr "utenti" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Pagina non trovata" -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "Informazioni personali" +#: 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/auth/models.py:77 -msgid "Permissions" -msgstr "Permessi" +#: contrib/admin/templates/admin/change_form.html:15 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "Aggiungi" -#: contrib/auth/models.py:78 -msgid "Important dates" -msgstr "Date importanti" +#: contrib/admin/templates/admin/change_form.html:21 +#: contrib/admin/templates/admin/object_history.html:5 +msgid "History" +msgstr "Storia" -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "Gruppi" +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Vedi sul sito" -#: contrib/auth/models.py:219 -msgid "message" -msgstr "messaggio" +#: 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/auth/forms.py:30 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -msgstr "" -"Il browser non ha i cookie abilitati. Per accedere, è necessario abilitarli." +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Ordinamento" -#: contrib/contenttypes/models.py:25 -msgid "python model class name" -msgstr "nome della classe modello in python" +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Ordine:" -#: contrib/contenttypes/models.py:28 -msgid "content type" -msgstr "tipo di contenuto" +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Per %(filter_title)s " -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "tipo di contenuti" +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Salva come nuovo" -#: contrib/sessions/models.py:35 -msgid "session key" -msgstr "chiave di sessione" +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Salva e aggiungi un altro" -#: contrib/sessions/models.py:36 -msgid "session data" -msgstr "dati di sessione" +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Salva e continua le modifiche" -#: contrib/sessions/models.py:37 -msgid "expire date" -msgstr "data di scadenza" +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Salva" -#: contrib/sessions/models.py:41 -msgid "session" -msgstr "sessione" +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Aggiungi %(name)s" -#: contrib/sessions/models.py:42 -msgid "sessions" -msgstr "sessioni" +#: 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/sites/models.py:10 -msgid "domain name" -msgstr "nome a dominio" - -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "nome visualizzato" +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" -#: contrib/sites/models.py:15 -msgid "site" -msgstr "sito" +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Modifica" -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "siti" +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Non hai i privilegi per modificare alcunché." -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "j F Y" +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Azioni Recenti" -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "j F Y, H:i" +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Azioni Proprie" -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "H:i" +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Nessuno disponibile" -#: utils/dates.py:6 -msgid "Monday" -msgstr "Lunedì" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Amministrazione sito Django" -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "Martedì" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Amministrazione Django" -#: utils/dates.py:6 -msgid "Wednesday" -msgstr "Mercoledì" +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Data/orario" -#: utils/dates.py:6 -msgid "Thursday" -msgstr "Giovedì" +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Utente" -#: utils/dates.py:6 -msgid "Friday" -msgstr "Venerdì" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Azione" -#: utils/dates.py:7 -msgid "Saturday" -msgstr "Sabato" +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j F Y, H:i" -#: utils/dates.py:7 -msgid "Sunday" -msgstr "Domenica" +#: 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 registrati. Probabilmente non è stato creato con questo sito di amministrazione." -#: utils/dates.py:14 -msgid "January" -msgstr "Gennaio" +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Errore del server" -#: utils/dates.py:14 -msgid "February" -msgstr "Febbraio" +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Errore del server (500)" -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "Marzo" +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Errore del server (500)" -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "Aprile" +#: 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." -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "Maggio" +#: 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." -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "Giugno" +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Vai" -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "Luglio" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "1 risultato" +msgstr[1] "%(counter)s risultati" -#: utils/dates.py:15 -msgid "August" -msgstr "Agosto" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totali" -#: utils/dates.py:15 -msgid "September" -msgstr "Settembre" +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtro" -#: utils/dates.py:15 -msgid "October" -msgstr "Ottobre" +#: 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:" -#: utils/dates.py:15 -msgid "November" -msgstr "Novembre" +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "Parola chiave:" -#: utils/dates.py:16 -msgid "December" -msgstr "Dicembre" +#: contrib/admin/templates/admin/login.html:22 +msgid "Have you forgotten your password?" +msgstr "Hai dimenticato la parola chiave?" -#: utils/dates.py:19 -msgid "jan" -msgstr "gen" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Benvenuto," -#: utils/dates.py:19 -msgid "feb" -msgstr "feb" +#: 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 parola chiave. 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 "Parola chiave" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +msgid "Password (again)" +msgstr "Parola chiave (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 parola chiave inserita sopra, come verifica." + +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Inserire una nuova parola chiave per l'utente %(username)s." -#: utils/dates.py:19 -msgid "mar" -msgstr "mar" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklet" -#: utils/dates.py:19 -msgid "apr" -msgstr "apr" +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Bookmarklet alla documentazione" -#: utils/dates.py:19 -msgid "may" -msgstr "mag" +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

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

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

                                            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\").

                                            \n" -#: utils/dates.py:19 -msgid "jun" -msgstr "giu" +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Documentazione per questa pagina" -#: utils/dates.py:20 -msgid "jul" -msgstr "lug" +#: 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 "" +"Porta da qualsiasi pagina alla documentazione della view che genera " +"quella pagina." -#: utils/dates.py:20 -msgid "aug" -msgstr "ago" +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Mostra l'ID dell'oggetto" -#: utils/dates.py:20 -msgid "sep" -msgstr "set" +#: 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 il content-type e l'ID univoco di pagine che rappresentano un singolo oggetto." -#: utils/dates.py:20 -msgid "oct" -msgstr "ott" +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Modifica quest'oggetto (nella finestra corrente)" -#: utils/dates.py:20 -msgid "nov" -msgstr "nov" +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "Porta alla pagina amministrativa di pagine che rappresentano un oggetto singolo." -#: utils/dates.py:20 -msgid "dec" -msgstr "dic" +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Modifica quest'oggetto (in una nuova finestra)" -#: utils/dates.py:27 -msgid "Jan." -msgstr "Gen." +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "Come sopra, ma apre la pagina di amministrazione in una nuova finestra." -#: utils/dates.py:27 -msgid "Feb." -msgstr "Feb." +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Data:" -#: utils/dates.py:28 -msgid "Aug." -msgstr "Ago." +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Orario:" -#: utils/dates.py:28 -msgid "Sept." -msgstr "Set." +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Attualmente:" -#: utils/dates.py:28 -msgid "Oct." -msgstr "Ott." +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Modifica:" -#: utils/dates.py:28 -msgid "Nov." -msgstr "Nov." +#: 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 parola chiave" -#: utils/dates.py:28 -msgid "Dec." -msgstr "Dic." +#: 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 "Dimenticata la parola chiave? Inserire il proprio indirizzo e-mail qui sotto: la parola chiave sarà reimpostata, e la nuova ti verrà inviata per e-mail." -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "anno" -msgstr[1] "anni" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Indirizzo e-mail:" -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "mese" -msgstr[1] "mesi" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Reimposta la mia parola chiave" -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "settimana" -msgstr[1] "settimane" +#: 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 parola chiave" + +#: 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 parola chiave è: %(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 parola chiave 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 "Parola chiave reimpostata correttamente" + +#: 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 "La nuova parola chiave è stata inviata all'indirizzo e-mail inserito. Arriverà a breve." + +#: 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 di parola chiave" + +#: 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 parola chiave, per ragioni di sicurezza, e poi la nuova parola chiave due volte, per verificare di averla scritta correttamente." + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Parola chiave attuale:" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Nuova parola chiave:" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Confermare la parola chiave:" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Modifica la mia parola chiave" + +#: 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 parola chiave avvenuto correttamente" + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "La parola chiave è 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/'. Assicurarsi di inserire le barre diagonali iniziali e finali." + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "titolo" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "contenuto" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "abilita commenti" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "nome modello" + +#: contrib/flatpages/models.py:13 +msgid "" +"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" +msgstr "registrazione obbligatoria" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Se selezionato, solo gli utenti che hanno effettuato l'accesso potranno vedere la pagina." + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "pagina statica" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "pagine statiche" + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "redirigi da" + +#: 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/redirects/models.py:9 +msgid "redirect to" +msgstr "redirigi verso" + +#: 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/redirects/models.py:13 +msgid "redirect" +msgstr "redirezione" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "redirezioni" + +#: contrib/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "ID dell'oggetto" + +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "intestazione" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "commento" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "valutazione #1" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "valutazione #2" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "valutazione #3" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "valutazione #4" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "valutazione #5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "valutazione #6" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "valutazione #7" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "valutazione #8" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "è una valutazione valida" + +#: 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 "" +"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 "" +"Inserito da %(user)s il %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" + +#: contrib/comments/models.py:168 +msgid "person's name" +msgstr "nome della persona" + +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "indirizzo IP" + +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "approvato dallo staff" + +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "commento libero" + +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "commenti liberi" + +#: contrib/comments/models.py:233 +msgid "score" +msgstr "punteggio" + +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "data punteggio" + +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "livello karma" + +#: 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 "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" +"A questo commento è stato apposto un flag da %(user)s:\n" +"\n" +"%(text)s" + +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "data flag" + +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "flag utente" + +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "flag utente" + +#: 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" -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "giorno" -msgstr[1] "giorni" +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "Impossibile votare per se stessi" -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "ora" -msgstr[1] "ore" +#: 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." -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuto" -msgstr[1] "minuti" +#: 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" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "Bengali" +#: 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" -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "Ceco" +#: contrib/comments/views/comments.py:188 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "Sono ammessi solo POST" -#: conf/global_settings.py:39 -msgid "Welsh" -msgstr "Gallese" +#: 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" -#: conf/global_settings.py:40 -msgid "Danish" -msgstr "Danese" +#: 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)" -#: conf/global_settings.py:41 -msgid "German" -msgstr "Tedesco" +#: 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" -#: conf/global_settings.py:42 -msgid "Greek" -msgstr "Greco" +#: 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'" -#: conf/global_settings.py:43 -msgid "English" -msgstr "Inglese" +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Hai dimenticato la parola chiave?" -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "Spagnolo" +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Valutazioni" -#: conf/global_settings.py:45 -msgid "French" -msgstr "Francese" +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Obbligatorio" -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "Galiziano" +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Facoltativo" -#: conf/global_settings.py:47 -msgid "Hungarian" -msgstr "Ungherese" +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Invia una foto" -#: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "Ebreo" +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "Commento:" -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "Islandese" +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "Anteprima commento" -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "Italiano" +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Il suo nome:" -#: conf/global_settings.py:51 -msgid "Japanese" -msgstr "Giapponese" +#: 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." -#: conf/global_settings.py:52 -msgid "Dutch" -msgstr "Olandese" +#: 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." -#: conf/global_settings.py:53 -msgid "Norwegian" -msgstr "Norvegese" +#: contrib/sessions/models.py:51 +msgid "session key" +msgstr "chiave di sessione" -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "Brasiliano" +#: contrib/sessions/models.py:52 +msgid "session data" +msgstr "dati di sessione" -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "Rumeno" +#: contrib/sessions/models.py:53 +msgid "expire date" +msgstr "data di scadenza" -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "Russo" +#: contrib/sessions/models.py:57 +msgid "session" +msgstr "sessione" -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "Slovacco" +#: contrib/sessions/models.py:58 +msgid "sessions" +msgstr "sessioni" -#: conf/global_settings.py:58 -msgid "Slovenian" -msgstr "Sloveno" +#: contrib/contenttypes/models.py:26 +msgid "python model class name" +msgstr "nome della classe modello in Python" -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "Serbo" +#: contrib/contenttypes/models.py:29 +msgid "content type" +msgstr "content type" -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "Svedese" +#: contrib/contenttypes/models.py:30 +msgid "content types" +msgstr "content type" -#: conf/global_settings.py:61 -msgid "Ukrainian" -msgstr "Ucraino" +#: 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." -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "Cinese semplificato" +#: oldforms/__init__.py:392 +msgid "Line breaks are not allowed here." +msgstr "Non sono ammessi a capo manuali." -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "Cinese tradizionale" +#: 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." -#: core/validators.py:60 -msgid "This value must contain only letters, numbers and underscores." -msgstr "Sono ammesse solo lettere, numeri e sottolineature ('_')." +#: oldforms/__init__.py:669 +msgid "The submitted file is empty." +msgstr "Il file inviato è vuoto." -#: 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 ('/')." +#: 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." -#: core/validators.py:72 -msgid "Uppercase letters are not allowed here." -msgstr "Non sono ammesse lettere maiuscole." +#: oldforms/__init__.py:735 +msgid "Enter a positive number." +msgstr "Inserire un numero positivo." -#: core/validators.py:76 -msgid "Lowercase letters are not allowed here." -msgstr "Non sono ammesse lettere minuscole." +#: 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." -#: core/validators.py:83 -msgid "Enter only digits separated by commas." -msgstr "Inserire solo numeri separati da virgole." +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "%(verbose_name)s è stato creato correttamente." -#: core/validators.py:95 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Inserire indirizzi e-mail validi separati da virgole." +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "%(verbose_name)s è stato aggiornato correttamente." -#: core/validators.py:99 -msgid "Please enter a valid IP address." -msgstr "Inserire un indirizzo IP valido." +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "%(verbose_name)s è stato cancellato." -#: core/validators.py:103 -msgid "Empty values are not allowed here." -msgstr "E' necessario inserire un valore." +#: utils/dates.py:6 +msgid "Monday" +msgstr "Lunedì" -#: core/validators.py:107 -msgid "Non-numeric characters aren't allowed here." -msgstr "Sono ammessi soltanto caratteri numerici." +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "Martedì" -#: core/validators.py:111 -msgid "This value can't be comprised solely of digits." -msgstr "Il valore non può essere composto solo da cifre." +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "Mercoledì" -#: core/validators.py:116 -msgid "Enter a whole number." -msgstr "Inserire un numero." +#: utils/dates.py:6 +msgid "Thursday" +msgstr "Giovedì" -#: core/validators.py:120 -msgid "Only alphabetical characters are allowed here." -msgstr "Sono ammessi solo caratteri alfabetici." +#: utils/dates.py:6 +msgid "Friday" +msgstr "Venerdì" -#: core/validators.py:124 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Inserire un data valida in formato AAAA-MM-GG." +#: utils/dates.py:7 +msgid "Saturday" +msgstr "Sabato" -#: core/validators.py:128 -msgid "Enter a valid time in HH:MM format." -msgstr "Inserire un orario valido in formato OO:MM." +#: utils/dates.py:7 +msgid "Sunday" +msgstr "Domenica" -#: 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." +#: utils/dates.py:14 +msgid "January" +msgstr "Gennaio" -#: core/validators.py:136 -msgid "Enter a valid e-mail address." -msgstr "Inserire un indirizzo e-mail valido." +#: utils/dates.py:14 +msgid "February" +msgstr "Febbraio" -#: 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." +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "Marzo" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "Aprile" -#: core/validators.py:155 -#, python-format -msgid "The URL %s does not point to a valid image." -msgstr "L'URL %s non punta ad un'immagine valida." +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "Maggio" -#: core/validators.py:159 -#, 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." +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "Giugno" -#: core/validators.py:167 -#, 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." +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "Luglio" -#: core/validators.py:171 -msgid "A valid URL is required." -msgstr "Inserire un URL valido." +#: utils/dates.py:15 +msgid "August" +msgstr "Agosto" -#: core/validators.py:185 -#, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" -msgstr "" -"E' richiesto HTML valido. Gli errori sono i seguenti:\n" -"%s" +#: utils/dates.py:15 +msgid "September" +msgstr "Settembre" -#: core/validators.py:192 -#, python-format -msgid "Badly formed XML: %s" -msgstr "XML malformato: %s" +#: utils/dates.py:15 +msgid "October" +msgstr "Ottobre" -#: core/validators.py:202 -#, python-format -msgid "Invalid URL: %s" -msgstr "URL non valida: %s" +#: utils/dates.py:15 +msgid "November" +msgstr "Novembre" -#: 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." +#: utils/dates.py:16 +msgid "December" +msgstr "Dicembre" -#: core/validators.py:214 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Inserire un nome di stato americano abbreviato valido." +#: utils/dates.py:19 +msgid "jan" +msgstr "gen" -#: 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." +#: utils/dates.py:19 +msgid "feb" +msgstr "feb" -#: core/validators.py:236 -#, python-format -msgid "This field must match the '%s' field." -msgstr "Questo campo deve corrispondere al campo '%s'." +#: utils/dates.py:19 +msgid "mar" +msgstr "mar" -#: core/validators.py:255 -msgid "Please enter something for at least one field." -msgstr "Inserire qualcosa in almeno un campo." +#: utils/dates.py:19 +msgid "apr" +msgstr "apr" -#: 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." +#: utils/dates.py:19 +msgid "may" +msgstr "mag" -#: core/validators.py:282 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "Il campo è obbligatorio se %(field)s è %(value)s" +#: utils/dates.py:19 +msgid "jun" +msgstr "giu" -#: 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" +#: utils/dates.py:20 +msgid "jul" +msgstr "lug" -#: core/validators.py:313 -msgid "Duplicate values are not allowed." -msgstr "Non sono ammessi valori duplicati." +#: utils/dates.py:20 +msgid "aug" +msgstr "ago" -#: core/validators.py:336 -#, python-format -msgid "This value must be a power of %s." -msgstr "Il valore deve essere una potenza di %s." +#: utils/dates.py:20 +msgid "sep" +msgstr "set" -#: core/validators.py:347 -msgid "Please enter a valid decimal number." -msgstr "Inserire un numero decimale valido." +#: utils/dates.py:20 +msgid "oct" +msgstr "ott" -#: 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." +#: utils/dates.py:20 +msgid "nov" +msgstr "nov" -#: 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." +#: utils/dates.py:20 +msgid "dec" +msgstr "dic" -#: 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." +#: utils/dates.py:27 +msgid "Jan." +msgstr "Gen." -#: 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." +#: utils/dates.py:27 +msgid "Feb." +msgstr "Feb." -#: core/validators.py:376 -msgid "The format for this field is wrong." -msgstr "Formato del file non valido." +#: utils/dates.py:28 +msgid "Aug." +msgstr "Ago." -#: core/validators.py:391 -msgid "This field is invalid." -msgstr "Il campo non è valido." +#: utils/dates.py:28 +msgid "Sept." +msgstr "Set." -#: core/validators.py:426 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "Impossibile recuperare alcunché da %s." +#: utils/dates.py:28 +msgid "Oct." +msgstr "Ott." -#: 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'." +#: utils/dates.py:28 +msgid "Nov." +msgstr "Nov." -#: 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\".)" +#: utils/dates.py:28 +msgid "Dec." +msgstr "Dic." -#: 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\".)" +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "anno" +msgstr[1] "anni" -#: 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\".)" +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "mese" +msgstr[1] "mesi" -#: 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\".)" +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "settimana" +msgstr[1] "settimane" -#: 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\".)" +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "giorno" +msgstr[1] "giorni" -#: 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\".)" +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "ora" +msgstr[1] "ore" -#: 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." +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuto" +msgstr[1] "minuti" -#: 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à." +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" +msgstr "j F Y" -#: 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." +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" +msgstr "j F Y, H:i" -#: db/models/fields/__init__.py:337 -msgid "This value must be an integer." -msgstr "Il valore deve essere un intero." +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" +msgstr "H:i" -#: db/models/fields/__init__.py:369 -msgid "This value must be either True or False." -msgstr "Il valore deve essere True o False." +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" +msgstr "Y F" -#: db/models/fields/__init__.py:385 -msgid "This field cannot be null." -msgstr "Il campo non può essere nullo." +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" +msgstr "F j" -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "Inserire un nome file valido." +#: template/defaultfilters.py:490 +msgid "yes,no,maybe" +msgstr "sì,no,forse" -#: db/models/fields/related.py:43 +#: newforms/fields.py:101 newforms/fields.py:254 #, 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." +msgid "Ensure this value has at most %d characters." +msgstr "Assicurarsi che questo valore non contenga più di %d caratteri." -#: 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." +#: newforms/fields.py:103 newforms/fields.py:256 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "Assicurarsi che questo valore contenga almeno %d caratteri." -#: db/models/fields/related.py:625 +#: newforms/fields.py:128 #, 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." +msgid "Ensure this value is less than or equal to %s." +msgstr "Assicurarsi che questo valore sia minore o uguale a %s." -#: forms/__init__.py:380 +#: newforms/fields.py:130 #, 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." +msgid "Ensure this value is greater than or equal to %s." +msgstr "Assicurarsi che questo valore sia maggiore o uguale a %s." -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "Non è ammesso andare a capo." +#: newforms/fields.py:163 +msgid "Enter a valid date." +msgstr "Inserire una data valida." -#: 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." +#: newforms/fields.py:190 +msgid "Enter a valid time." +msgstr "Inserire un orario valido." -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "Il file sottomesso è vuoto." +#: newforms/fields.py:226 +msgid "Enter a valid date/time." +msgstr "Inserire una coppia data/orario valida." -#: forms/__init__.py:699 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Inserire un numero tra -32768 e 32767." +#: newforms/fields.py:240 +msgid "Enter a valid value." +msgstr "Inserire un valore valido." -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "Inserire un numero positivo." +#: newforms/fields.py:287 newforms/fields.py:309 +msgid "Enter a valid URL." +msgstr "Inserire una URL valida." -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Inserire un numero compreso tra 0 e 32767." +#: newforms/fields.py:311 +msgid "This URL appears to be a broken link." +msgstr "Questa URL non sembra funzionare." -#: template/defaultfilters.py:379 -msgid "yes,no,maybe" -msgstr "sì,no,forse" +#: 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." + +#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181 +msgid "Enter a list of values." +msgstr "Inserire una lista di valori." + +#: newforms/fields.py:387 newforms/models.py:187 +#, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Selezionare un'opzione valida;'%s non compare tra quelle disponibili." diff --git a/django/conf/locale/it/LC_MESSAGES/djangojs.mo b/django/conf/locale/it/LC_MESSAGES/djangojs.mo index 2df21b6558..c34009f148 100644 Binary files a/django/conf/locale/it/LC_MESSAGES/djangojs.mo and b/django/conf/locale/it/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/it/LC_MESSAGES/djangojs.po b/django/conf/locale/it/LC_MESSAGES/djangojs.po index 4b68decff2..4f01cd04a0 100644 --- a/django/conf/locale/it/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/it/LC_MESSAGES/djangojs.po @@ -1,20 +1,39 @@ +# 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 , 2006. # +# Carlo C8E Miron , 2006. +# Nicola 'tekNico' Larosa , 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 \n" -"Language-Team: Italian \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 \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 @@ -23,7 +42,7 @@ msgstr "Disponibile %s" #: 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 @@ msgstr "Rimuovi" #: 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 @@ msgstr "Seleziona le tue scelte e clicca " 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" + diff --git a/django/conf/locale/ja/LC_MESSAGES/django.mo b/django/conf/locale/ja/LC_MESSAGES/django.mo index 34b80e976e..97b8f4145b 100644 Binary files a/django/conf/locale/ja/LC_MESSAGES/django.mo and b/django/conf/locale/ja/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ja/LC_MESSAGES/django.po b/django/conf/locale/ja/LC_MESSAGES/django.po index dbc3de5f53..46700505ba 100644 --- a/django/conf/locale/ja/LC_MESSAGES/django.po +++ b/django/conf/locale/ja/LC_MESSAGES/django.po @@ -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 , YEAR. +# makoto tsuyuki , 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 \n" "Language-Team: Japanese \n" @@ -16,113 +15,147 @@ msgstr "" "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 @@ msgstr "" "
                                              \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 @@ msgstr "今月" 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 @@ msgid "We're sorry, but the requested page could not be found." msgstr "申し訳ありませんが、お探しのページは見つかりませんでした。" #: contrib/admin/templates/admin/500.html:4 -#: contrib/admin/templates/admin/base.html: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 @@ msgstr "" "エラーが発生しました。エラーをサイトの管理者にメールで報告しましたので、近い" "うちに修正されるはずです。しばらくお待ちください。" -#: 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 @@ msgstr "ドキュメント" 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 @@ msgstr "パスワードの変更" #: 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 @@ msgstr "Django サイト管理" #: 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 @@ 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:" +"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 @@ 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/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 @@ msgstr "操作" 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 @@ msgid "Username:" 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 forgotten your password?" -msgstr "パスワードをお忘れですか?" - #: 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 @@ msgstr "" "このオブジェクトには変更履歴がありません。おそらくこの管理サイトで追加したも" "のではありません。" +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "全件表示" + #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" msgstr "検索" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "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 @@ msgstr "保存して編集を続ける" 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 %(username)s." +msgstr "%(username)sさんの新しいパスワードを入力してください。" + #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Bookmarklets" msgstr "ブックマークレット" @@ -572,7 +678,7 @@ msgstr "新しいパスワード:" #: contrib/admin/templates/registration/password_change_form.html:21 msgid "Confirm password:" -msgstr "新しいパスワード (もう一度) :" +msgstr "新しいパスワード (確認用) :" #: contrib/admin/templates/registration/password_change_form.html:23 msgid "Change my password" @@ -663,19 +769,41 @@ msgstr "現在:" 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 @@ 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." @@ -691,188 +819,252 @@ 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' を試してみてください。" -#: 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 -msgid "Site administration" -msgstr "サイト管理" - -#: contrib/admin/views/main.py:260 +#: contrib/admin/views/doc.py:343 #, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "%(name)s \"%(obj)s\" を追加しました。" +msgid "%s does not appear to be a urlpattern object" +msgstr "%s はurlpatternオブジェクトでは無いようです" -#: 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:223 +msgid "Site administration" +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 を追加" -#: 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 @@ msgstr "" "お使いのブラウザはクッキーを有効にしていないようです。ログインにはクッキーが" "必要です。" -#: 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 change " +"password form." +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 "ユーザが管理サイトにログイン可能かどうかを示します。" -#: 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 @@ msgstr "" "手動で付与したパーミッションに加え、所属しているグループに付与された全ての" "パーミッションを獲得します。" -#: 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 @@ msgstr "" "た」と表示されるようになります。" #: contrib/comments/models.py:91 -#, fuzzy msgid "comments" msgstr "コメント" @@ -1106,12 +1335,10 @@ msgid "approved by staff" 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 @@ msgid "score date" 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 @@ msgid "flag date" 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 @@ msgid "deletion date" 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 @@ msgstr "モデレータ削除" 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 @@ msgstr "オプション" 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 @@ msgid_plural "" 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 @@ msgstr "" "\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 @@ msgstr "コメント ID が不正です" 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 @@ msgstr "テンプレート名" #: 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 @@ msgstr "フラットページ" 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 @@ msgid "" "'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 @@ msgstr "サイト" 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 @@ msgstr "" "画像をアップロードしてください。アップロードした画像は画像でないか、または壊" "れています。" -#: 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 @@ msgstr "" "有効な 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 @@ msgstr "" "%(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 @@ msgstr "" "%(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 @@ msgstr "" "%(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 @@ msgstr "" "%(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 @@ msgstr "" "%(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 @@ msgstr "" "%(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 @@ msgid_plural "" 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 @@ msgid "December" msgstr "12月" #: utils/dates.py:19 -#, fuzzy msgid "jan" msgstr "1月" @@ -1883,7 +2196,6 @@ msgid "apr" msgstr "4月" #: utils/dates.py:19 -#, fuzzy msgid "may" msgstr "5月" @@ -1979,32 +2291,37 @@ msgid_plural "minutes" 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 字まで)" - -#~ msgid "Comment" -#~ msgstr "コメント" +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" +msgstr "Y/m/d" -#~ msgid "Comments" -#~ msgstr "コメント" +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" +msgstr "m/d" -#~ msgid "label" -#~ msgstr "ラベル" +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "%(verbose_name)s を作成しました。" -#~ msgid "package" -#~ msgstr "パッケージ" +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "%(verbose_name)s を更新しました。" -#~ msgid "packages" -#~ msgstr "パッケージ" +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr " %(verbose_name)s を削除しました。" diff --git a/django/conf/locale/ja/LC_MESSAGES/djangojs.mo b/django/conf/locale/ja/LC_MESSAGES/djangojs.mo index dee3150d1e..bddecacb10 100644 Binary files a/django/conf/locale/ja/LC_MESSAGES/djangojs.mo and b/django/conf/locale/ja/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/ja/LC_MESSAGES/djangojs.po b/django/conf/locale/ja/LC_MESSAGES/djangojs.po index 3d91a17f7d..0ec1cadcf5 100644 --- a/django/conf/locale/ja/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/ja/LC_MESSAGES/djangojs.po @@ -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 , YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: Django 1.0\n" -"Report-Msgid-Bugs-To: Django-users Japan \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 \n" "Language-Team: Japanese \n" @@ -61,50 +61,58 @@ msgstr "選択してクリック" 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 "明日" - diff --git a/django/conf/locale/kn/LC_MESSAGES/django.mo b/django/conf/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..51e9ab5fbc Binary files /dev/null and b/django/conf/locale/kn/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/kn/LC_MESSAGES/django.po b/django/conf/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 0000000000..b8adeb2c43 --- /dev/null +++ b/django/conf/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,2533 @@ +# Kannada translation of Django. +# Copyright (C) 2007 Translation Team +# This file is distributed under the same license as the Django package. +# Kannada Localization Team , 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 \n" +"Language-Team: Kannada \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 "" +"

                                              By %s:

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

                                                %s ಇಂದ :

                                                \n" +"
                                                  \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "ಎಲ್ಲಾ" + +#: 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 (500)" +msgstr "ಸರ್ವರ್ ದೋಷ(೫೦೦)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via " +"e-mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"ಇಲ್ಲಿ ಒಂದು ತಪ್ಪಾಗಿದೆ. ಅದನ್ನು " +"ತಾಣದ ಆಡಳಿತಗಾರರಿಗೆ ವರದಿ " +"ಮಾಡಲಾಗಿದ್ದು ಶೀಘ್ರದ್ದಲ್ಲಿ " +"ಸರಿಪಡಿಸಲಾಗುವದು. ನಿಮ್ಮ " +"ತಾಳ್ಮೆಗೆ ಧನ್ಯವಾದಗಳು." + +#: contrib/admin/templates/admin/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 forgotten your password?" +msgstr "" +"ನೀವು ಪ್ರವೇಶಪದವನ್ನು " +"ಮರೆತಿದ್ದೀರಾ?" + +#: 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" +"

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

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

                                                  ಸಣ್ಣ್ಪುಟಗುರುತುಗಳನ್ನು " +"ಅನುಸ್ಥಾಪಿಸಲು ಕೊಂಡಿಯನ್ನು " +"ಪುಟಗುರುತು ಉಪಕರಣಪಟ್ಟಿ(ಟೂಲ್ " +"ಬಾರ್)ಕಡೆಗೆ ಎಳೆದೊಯ್ಯಿರಿ,\n" +" ಅಥವಾ ಕೊಂಡಿಯ ಮೇಲೆ " +"ಮೂಷಿಕ(ಮೌಸ್)ದ ಬಲಬಟನ್ನನ್ನು " +"ಒತ್ತಿ ಪುಟಗುರುತುಗಳಿಗೆ " +"ಸೇರಿಸಿಕೊಳ್ಳಿ. ಈಗ \n" +" ನೀವು ಸಣ್ಣಪುಟಗುರುತುಗಳನ್ನು " +"ತಾಣದ ಯಾವ ಪುಟದಿಂದ ಬೇಕಾದರೂ " +"ಆಯ್ಕೆಮಾಡಿಕೊಳ್ಳಬಹುದು.\n" +"ನೆನಪಿರಲಿ, ಕೆಲವು " +"ಸಣ್ಣಪುಟಗುರುತುಗಳಿಗೆ ನೀವು ಈ " +"ತಾಣವನ್ನು ಆಂತರಿಕ (\"internal\") ಎಂದು " +"ಸೂಚಿತವಾಗಿರುವ ಗಣಕದಿಂದ " +"ವೀಕ್ಷಿಸಬೇಕಾಗುತ್ತದೆ.\n" +"( ನಿಮ್ಮ ಗಣಕವು \"internal\" ಹೌದೇ " +"ಅಲ್ಲವೇ ಎಂದು " +"ಗೊತ್ತಿಲ್ಲದಿದ್ದರೆ , ಗಣಕದ " +"ಆಡಳಿತಗಾರರನ್ನು ಕೇಳಿರಿ).

                                                  \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 "ಹೌದು,ಇಲ್ಲ,ಇರಬಹುದು" + diff --git a/django/conf/locale/kn/LC_MESSAGES/djangojs.mo b/django/conf/locale/kn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..cbb9fb5ffc Binary files /dev/null and b/django/conf/locale/kn/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/kn/LC_MESSAGES/djangojs.po b/django/conf/locale/kn/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..38b4a6d341 --- /dev/null +++ b/django/conf/locale/kn/LC_MESSAGES/djangojs.po @@ -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 , 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 \n" +"Language-Team: Kannada \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 "ನಾಳೆ" diff --git a/django/conf/locale/lv/LC_MESSAGES/django.mo b/django/conf/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..21f9e8aecb Binary files /dev/null and b/django/conf/locale/lv/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/lv/LC_MESSAGES/django.po b/django/conf/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 0000000000..72e2316fcb --- /dev/null +++ b/django/conf/locale/lv/LC_MESSAGES/django.po @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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 change " +"password form." +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 "" +"

                                                  By %s:

                                                  \n" +"
                                                    \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" +"

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

                                                    \n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "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 (500)" +msgstr "Servera kļūda (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"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 %(username)s." +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 forgotten your password?" +#~ msgstr "Vai esat aizmirsis paroli?" diff --git a/django/conf/locale/lv/LC_MESSAGES/djangojs.mo b/django/conf/locale/lv/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..b81550aedb Binary files /dev/null and b/django/conf/locale/lv/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/lv/LC_MESSAGES/djangojs.po b/django/conf/locale/lv/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..534cffd8d0 --- /dev/null +++ b/django/conf/locale/lv/LC_MESSAGES/djangojs.po @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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 "" diff --git a/django/conf/locale/mk/LC_MESSAGES/django.mo b/django/conf/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..5ab5aa6cbb Binary files /dev/null and b/django/conf/locale/mk/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/mk/LC_MESSAGES/django.po b/django/conf/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 0000000000..f23d8ed58a --- /dev/null +++ b/django/conf/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,2320 @@ +# translation of mk_django.po to Macedonian +# +# Georgi Stanojevski , 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 \n" +"Language-Team: Macedonian \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 change " +"password form." +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: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 "" +"

                                                    By %s:

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

                                                      Од %s:

                                                      \n" +"
                                                        \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Сите" + +#: 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" +"

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

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

                                                        За да инсталирате обележувачи, влечете ја врската до " +"вашата\n" +"лента со алатки, или кликнете со десното копче и додадете го во вашите \n" +"обележувачи. Сега може да го изберете обележувачот од било која страница " +"на \n" +"сајтот. Имајте на ум дека за некои од овие обележувачи е потребно да го " +"гледате \n" +"сајтот од компјутер кој е означен како „внатрешен“ (разговарајте со вашиот \n" +"администратор ако не сте сигурни).

                                                        \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 (500)" +msgstr "Грешка со серверот (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Имаше грешка. Истата беше пријавена на администраторите и ќе биде поправена " +"во брзо време. Ви благодариме за вашето трпение." + +#: 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 %(username)s." +msgstr "Внесете нова лозинка за корисникот %(username)s." + +#: 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“)." + diff --git a/django/conf/locale/mk/LC_MESSAGES/djangojs.mo b/django/conf/locale/mk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..64971dc55e Binary files /dev/null and b/django/conf/locale/mk/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/mk/LC_MESSAGES/djangojs.po b/django/conf/locale/mk/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..0c06326fd5 --- /dev/null +++ b/django/conf/locale/mk/LC_MESSAGES/djangojs.po @@ -0,0 +1,119 @@ +# translation of djangojs.po to Macedonian +# +# Georgi Stanojevski , 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 \n" +"Language-Team: Macedonian \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 "Скриј" + diff --git a/django/conf/locale/nl/LC_MESSAGES/django.mo b/django/conf/locale/nl/LC_MESSAGES/django.mo index abc387aeea..f4be11f7c5 100644 Binary files a/django/conf/locale/nl/LC_MESSAGES/django.mo and b/django/conf/locale/nl/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/nl/LC_MESSAGES/django.po b/django/conf/locale/nl/LC_MESSAGES/django.po index bba721b56a..89862155d8 100644 --- a/django/conf/locale/nl/LC_MESSAGES/django.po +++ b/django/conf/locale/nl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" 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 \n" "Language-Team: \n" @@ -17,29 +17,34 @@ msgstr "" "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 @@ msgid_plural "" 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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "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,7 +421,16 @@ msgid_plural "" 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 "" @@ -366,30 +438,30 @@ msgid_plural "" 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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "\"%(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 @@ msgstr "" "\"<%(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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "" "
                                                          \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 @@ msgstr "Nee" 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 @@ msgstr "" "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 @@ msgstr "" "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 @@ msgstr "Documentatie" #: 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 @@ msgstr "Wachtwoord wijzigen" #: 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 @@ msgstr "Wachtwoord wijzigen" #: 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 @@ msgstr "Afmelden" #: 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 @@ msgstr "Verwijderen" #: 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 @@ msgstr "Pagina niet gevonden" #: 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 @@ msgstr "Sortering:" #: 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 @@ msgstr "%(name)s toevoegen" 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 @@ msgstr "" "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 @@ msgid "Username:" 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 forgotten your password?" -msgstr "Wachtwoord vergeten?" - -#: 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 @@ 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 "" -"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 @@ msgstr "sites" #: 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 @@ msgstr "sjabloonnaam" #: 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 @@ msgstr "" "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 @@ msgstr "Ongeldige opmerkingen ID" 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 @@ msgstr[1] "" "\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 @@ msgstr "" "\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 @@ msgstr "" 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 @@ msgstr "Optioneel" 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 @@ msgstr "Concept opmerking" 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 @@ msgstr "nov." 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 @@ msgid_plural "minutes" 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." diff --git a/django/conf/locale/no/LC_MESSAGES/django.mo b/django/conf/locale/no/LC_MESSAGES/django.mo index 4f55637235..ee2152b5e1 100644 Binary files a/django/conf/locale/no/LC_MESSAGES/django.mo and b/django/conf/locale/no/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/no/LC_MESSAGES/django.po b/django/conf/locale/no/LC_MESSAGES/django.po index 9b3099046d..427879a8f3 100644 --- a/django/conf/locale/no/LC_MESSAGES/django.po +++ b/django/conf/locale/no/LC_MESSAGES/django.po @@ -264,7 +264,7 @@ msgstr "Bare POST er tillatt" #: 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 @@ msgid "All" 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 @@ msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." msgstr "" +"Vær snill å angi korrekt brukernavn og passord. La merke til at små og " +"store bokstaver er betraktet ulik." #: 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 @@ msgstr "Brukernavnet kan ikke inneholde '@'" #: 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 @@ msgstr "Ny %s" #: 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 @@ msgid "Are you sure?" 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 @@ msgid "Integer" 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 @@ msgstr "Dato/tid" #: 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 @@ msgid "Decimal number" 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 @@ msgstr "Tid" #: 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 @@ msgstr "Fant ikke siden" #: 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 @@ msgid "" "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 @@ msgstr "Av %(title)s " #: 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 @@ 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 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 @@ msgstr "Takk for å bruke tid på internett siden i dag." #: 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 @@ msgid "" "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 @@ msgstr "Endre passord" #: contrib/admin/templates/registration/password_reset_email.html:2 msgid "You're receiving this e-mail because you requested a password reset" msgstr "" -"Du har mottatt denne 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 @@ msgid "Edit this object (current window)" 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 @@ msgstr "Samme som over, men åpner administrasjonsiden i et nytt vindu." #: 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 @@ msgid "" "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 @@ msgstr "registrering kreves" #: 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 @@ msgid "codename" 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 @@ msgstr "administrasjons status" #: 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 @@ msgstr "super bruker" #: 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 @@ msgstr "" "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 @@ msgid "Groups" msgstr "Grupper" #: contrib/auth/models.py:219 -#, fuzzy msgid "message" -msgstr "Meldinger" +msgstr "Melding" #: contrib/auth/forms.py:30 msgid "" @@ -1274,9 +1259,8 @@ msgid "" 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 @@ msgstr "domene navn" #: 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 @@ msgstr "h:i" #: utils/dates.py:6 msgid "Monday" -msgstr "Mondag" +msgstr "Mandag" #: utils/dates.py:6 msgid "Tuesday" @@ -1411,54 +1395,52 @@ msgid "December" 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 @@ msgstr "Jan." #: utils/dates.py:27 msgid "Feb." -msgstr "Fef." +msgstr "Feb." #: utils/dates.py:28 msgid "Aug." @@ -1491,40 +1473,38 @@ msgstr "Des." #: 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 @@ msgstr "Tysk" #: conf/global_settings.py:42 msgid "Greek" -msgstr "" +msgstr "Gresk" #: conf/global_settings.py:43 msgid "English" @@ -1568,11 +1548,11 @@ msgstr "Galisisk" #: 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 @@ msgstr "Italiensk" #: 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 @@ msgstr "Brasiliansk" #: conf/global_settings.py:55 msgid "Romanian" -msgstr "Romansk" +msgstr "Rumensk" #: conf/global_settings.py:56 msgid "Russian" @@ -1611,9 +1591,8 @@ msgid "Slovak" 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 @@ msgid "Swedish" 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 @@ msgstr "Simplifisert Kinesisk" #: 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 @@ msgstr "" #: 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 @@ msgstr "Skriv inn et helt nummer." #: 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 @@ msgstr "Internettadressen %s peker ikke til et godkjent bilde." #, 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 @@ msgstr "Internettadressen %s peker ikke til en godkjent QuickTime film." #: 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 @@ msgid "" "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 @@ msgstr "Ikke godkjent XML: %s" #: 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 @@ msgstr "Internettadresse fører til en side som ikke virker." #: 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 @@ msgstr[1] "Pass munnen din! Ordene %s er ikke tillatt her." #: 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 @@ msgstr "Vennligst skriv inn noe i begge felta, eller la dem stå blanke." #: 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 @@ msgstr[1] "Skriv inn et desimal tall med maksimum %s tall bak komma. " #, 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 @@ msgstr "Klarte ikke å motta noe fra %s." 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 @@ msgid "" "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 @@ msgid "" "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 @@ msgid "" "\"%(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 @@ msgid "" "\"<%(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 @@ msgid "" "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 @@ msgid "" "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 @@ msgid "This field is required." 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 @@ msgstr "" 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 @@ msgstr "Det er ikke tillatt med flere linjer 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 "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 @@ msgstr "Skriv inn et heltall mellom 0 og 32767." #: template/defaultfilters.py:379 msgid "yes,no,maybe" -msgstr "" +msgstr "ja,nei,kanskje" #, fuzzy #~ msgid "Comments" diff --git a/django/conf/locale/no/LC_MESSAGES/djangojs.mo b/django/conf/locale/no/LC_MESSAGES/djangojs.mo index acdc98a7ef..4b23aba4e0 100644 Binary files a/django/conf/locale/no/LC_MESSAGES/djangojs.mo and b/django/conf/locale/no/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/no/LC_MESSAGES/djangojs.po b/django/conf/locale/no/LC_MESSAGES/djangojs.po index befc101881..c6087646e0 100644 --- a/django/conf/locale/no/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/no/LC_MESSAGES/djangojs.po @@ -61,6 +61,15 @@ msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag" 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 @@ msgstr "24.00" #: 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" diff --git a/django/conf/locale/pl/LC_MESSAGES/django.mo b/django/conf/locale/pl/LC_MESSAGES/django.mo index f7fad56339..d132fc114e 100644 Binary files a/django/conf/locale/pl/LC_MESSAGES/django.mo and b/django/conf/locale/pl/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/pl/LC_MESSAGES/django.po b/django/conf/locale/pl/LC_MESSAGES/django.po index b6449e22b0..61fc4d0a90 100644 --- a/django/conf/locale/pl/LC_MESSAGES/django.po +++ b/django/conf/locale/pl/LC_MESSAGES/django.po @@ -126,12 +126,10 @@ msgid "approved by staff" 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 @@ msgid "score date" msgstr "data przyznania punktów" #: contrib/comments/models.py:237 -#, fuzzy msgid "karma score" msgstr "ilość punktów" @@ -243,6 +240,9 @@ msgid "" "\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 @@ msgstr "Jedno lub więcej wymaganych pól nie zostało wypełnionych" #: 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 @@ msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)" #: 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 @@ msgid "" "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 @@ msgid "" "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 @@ msgid "View on site" 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 @@ msgstr "Zespół %(site_name)s" #: 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 @@ msgid "" "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 @@ msgstr "Jeżeli zaznaczone - tylko zalogowani użytkownicy będą mogli zobaczy #: 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 @@ msgstr "nazwa" #: contrib/auth/models.py:15 msgid "codename" -msgstr "" +msgstr "nazwa kodowa" #: contrib/auth/models.py:17 msgid "permission" @@ -1161,11 +1168,11 @@ msgstr "Użyj '[algo]$[salt]$[hexdigest]'" #: 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 @@ msgstr "" 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 @@ msgid "Groups" msgstr "Grupy" #: contrib/auth/models.py:219 -#, fuzzy msgid "message" msgstr "wiadomość" @@ -1371,7 +1376,6 @@ msgid "December" msgstr "Grudzień" #: utils/dates.py:19 -#, fuzzy msgid "jan" msgstr "sty" @@ -1472,11 +1476,10 @@ msgstr[0] "dzień" 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 @@ msgid "Slovak" msgstr "Słowacki" #: conf/global_settings.py:58 -#, fuzzy msgid "Slovenian" msgstr "Słowacki" @@ -1582,9 +1584,8 @@ msgid "Swedish" 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 @@ msgstr "Odnośnik %s jest nieprawidłowy." #: 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 @@ msgstr "To pole musi być uzupełnione jeśli %(field)s jest %(value)s" #: 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 @@ msgid "Please enter a valid decimal number." 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 @@ msgstr "To pole jest nieprawidłowe." #: 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 @@ msgstr "To pole jest wymagane" #: 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 @@ msgid "Please enter a valid %s." 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[0] "" 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." diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo index 3df145a0d3..7f506f972f 100644 Binary files a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo and b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/django/conf/locale/pt_BR/LC_MESSAGES/django.po index 337027d267..bc955f29c4 100644 --- a/django/conf/locale/pt_BR/LC_MESSAGES/django.po +++ b/django/conf/locale/pt_BR/LC_MESSAGES/django.po @@ -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 , 2006. +# Carlos Eduardo de Paula , 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 \n" +"PO-Revision-Date: 2006-11-01 17:45-0300\n" +"Last-Translator: Carlos Eduardo de Paula \n" "Language-Team: Português do Brasil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -86,12 +87,12 @@ msgid "" "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 @@ msgstr "Pontuação de Karma" #: 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 @@ msgstr "" #: 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 @@ msgstr "Flag por %r" #: 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 @@ msgid_plural "" "\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 @@ msgid "" "\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 @@ msgstr "Senha:" #: 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 @@ msgstr "Encerrar sessão" #: 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 @@ msgstr "Comentário" #: 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 @@ msgid "" "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 @@ msgstr "" #: 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 @@ msgstr "Um(a) ou mais %(fieldname)s em %(name)s:" #: 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 @@ msgid "" "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 @@ msgstr "Desculpe, mas a página requisitada não pode ser encontrada." #: 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 @@ msgstr "Adicionar %(name)s" #: contrib/admin/templates/admin/login.html:22 msgid "Have you forgotten your password?" -msgstr "Você ?" +msgstr "Você esqueceu sua senha?" #: contrib/admin/templates/admin/base.html:23 msgid "Welcome," @@ -836,7 +837,7 @@ msgstr "Por %(title)s " #: 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 @@ msgstr "Ver no site" 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 @@ msgid "" "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 @@ msgstr "Sua nova senha é: %(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 "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 @@ msgstr "" #: 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 @@ msgstr "" #: 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 @@ msgstr "nome código" #: 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 @@ msgstr "" #: 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 @@ msgstr "Grupos" #: contrib/auth/models.py:219 #, fuzzy msgid "message" -msgstr "Mensagem" +msgstr "mensagem" #: contrib/auth/forms.py:30 msgid "" @@ -1275,7 +1276,7 @@ msgid "" "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 @@ msgstr "Dezembro" #: 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 @@ msgstr "Dez." 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 @@ msgstr "" #: conf/global_settings.py:40 #, fuzzy msgid "Danish" -msgstr "Espanhol" +msgstr "Dinamarquês" #: conf/global_settings.py:41 msgid "German" @@ -1556,7 +1557,7 @@ msgstr "Alemão" #: conf/global_settings.py:42 msgid "Greek" -msgstr "" +msgstr "Grego" #: conf/global_settings.py:43 msgid "English" @@ -1576,11 +1577,11 @@ msgstr "Galiciano" #: 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 @@ msgstr "Norueguês" #: conf/global_settings.py:54 msgid "Brazilian" -msgstr "Brazileiro" +msgstr "Brasileiro" #: conf/global_settings.py:55 msgid "Romanian" @@ -1621,7 +1622,7 @@ msgstr "Eslovaco" #: conf/global_settings.py:58 #, fuzzy msgid "Slovenian" -msgstr "Eslovaco" +msgstr "Esloveno" #: conf/global_settings.py:59 msgid "Serbian" @@ -1634,7 +1635,7 @@ msgstr "Sueco" #: conf/global_settings.py:61 #, fuzzy msgid "Ukrainian" -msgstr "Brazileiro" +msgstr "Ucraniano" #: conf/global_settings.py:62 msgid "Simplified Chinese" @@ -1689,7 +1690,7 @@ msgstr "Este valor não pode conter apenas dígitos." #: 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 @@ msgstr "Informe uma abreviação válida de nome de um estado dos EUA." 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 @@ msgstr "Este valor deve ser uma potência de %s." #: 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 "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] "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 @@ msgstr "Este campo é requerido." #: 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 @@ msgstr "Por favor informe um %s válido." #: 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 @@ msgid_plural "" 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 @@ msgstr "sim,não,talvez" #~ "\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 @@ msgstr "sim,não,talvez" #, fuzzy #~ msgid "count" -#~ msgstr "conteúdo" +#~ msgstr "contagem" diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo b/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo index f8c53203c9..31a2b1b3c0 100644 Binary files a/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo and b/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po b/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po index 44aa1d86ec..299fc6526a 100644 --- a/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/pt_BR/LC_MESSAGES/djangojs.po @@ -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 , YEAR. +# Carlos Eduardo de Paula , 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 \n" +"PO-Revision-Date: 2006-11-01 17:45-0300\n" +"Last-Translator: Carlos Eduardo de Paula \n" "Language-Team: Português do Brasil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,7 +51,7 @@ msgid "" "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" diff --git a/django/conf/locale/ru/LC_MESSAGES/django.mo b/django/conf/locale/ru/LC_MESSAGES/django.mo index 467c8ddb62..12e240529f 100644 Binary files a/django/conf/locale/ru/LC_MESSAGES/django.mo and b/django/conf/locale/ru/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ru/LC_MESSAGES/django.po b/django/conf/locale/ru/LC_MESSAGES/django.po index ca204d2ddf..f329efe24f 100644 --- a/django/conf/locale/ru/LC_MESSAGES/django.po +++ b/django/conf/locale/ru/LC_MESSAGES/django.po @@ -8,12 +8,13 @@ msgstr "" "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: 2006-08-14 18:08+0300\n" -"Last-Translator: Grigory Fateyev \n" +"PO-Revision-Date: 2006-09-07 15:28+0300\n" +"Last-Translator: Alexander Yakovlev \n" "Language-Team: Dialcom Services \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" @@ -25,81 +26,81 @@ 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: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 msgid "date/time submitted" -msgstr "дата/время добавления" +msgstr "Дата/время добавления" #: 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 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 "Отметте, если комментарий нежелателен. Сообщение \"Этот комментарий был удалён\" будет показано взамен." +msgstr "Отметьте, если комментарий нежелателен. Сообщение \"Этот комментарий был удалён\" будет показано взамен." #: contrib/comments/models.py:91 msgid "comments" -msgstr "комментарии" +msgstr "Комментарии" #: contrib/comments/models.py:131 #: contrib/comments/models.py:207 msgid "Content object" -msgstr "Объект наполнения" +msgstr "Объект содержимого" #: contrib/comments/models.py:159 #, python-format @@ -110,7 +111,7 @@ msgid "" "\n" "http://%(domain)s%(url)s" msgstr "" -"Добавил %(user)s %(date)s\n" +"Добавил %(user)s %(date)s\n" "\n" "%(comment)s\n" "\n" @@ -118,15 +119,15 @@ msgstr "" #: 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" @@ -138,24 +139,24 @@ 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" -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 "%(score)d рейтинг %(user)s" +msgstr "%(score)d рейтинг пользователя %(user)s" #: contrib/comments/models.py:258 #, python-format @@ -164,21 +165,21 @@ msgid "" "\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 @@ -187,11 +188,11 @@ msgstr "Отмечен %r" #: 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" @@ -216,7 +217,7 @@ msgstr "Нельзя голосовать за себя" #: contrib/comments/views/comments.py:28 msgid "This rating is required because you've entered at least one other rating." -msgstr "Этот рейтинг необходим, так как вы входили хоть однажды в другие рейтинги." +msgstr "Этот рейтинг обязателен, так как вы уже ввели как минимум еще один рейтинг." #: contrib/comments/views/comments.py:112 #, python-format @@ -229,7 +230,17 @@ msgid_plural "" "\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 @@ -238,14 +249,14 @@ msgid "" "\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 @@ -255,17 +266,17 @@ msgstr "Одно или больше обязательных полей не б #: 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 объекта неверно" +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 @@ -310,7 +321,7 @@ 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 @@ -329,11 +340,11 @@ msgstr "Комментарий:" #: contrib/comments/templates/comments/form.html:32 #: contrib/comments/templates/comments/freeform.html:9 msgid "Preview comment" -msgstr "Просмотр комментария" +msgstr "Предпросмотр комментария" #: contrib/comments/templates/comments/freeform.html:4 msgid "Your name:" -msgstr "имя пользователя:" +msgstr "Имя пользователя:" #: contrib/admin/filterspecs.py:40 #, python-format @@ -341,7 +352,7 @@ msgid "" "

                                                          By %s:

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

                                                            К %s:

                                                            \n" +"

                                                            По %s:

                                                            \n" "
                                                              \n" #: contrib/admin/filterspecs.py:70 @@ -384,7 +395,7 @@ msgstr "Неизвестно" #: contrib/admin/models.py:16 msgid "action time" -msgstr "время действия" +msgstr "Время действия" #: contrib/admin/models.py:19 msgid "object id" @@ -392,23 +403,23 @@ msgstr "id обьекта" #: 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" @@ -418,7 +429,7 @@ msgstr "Все даты" #: 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 "Пожалуйста, введите верные имя пользователя и пароль. Помните, оба поля чувствительны к регистру." #: contrib/admin/views/decorators.py:23 #: contrib/admin/templates/admin/login.html:25 @@ -427,11 +438,11 @@ 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 "Пожалуйста войдите снова, посколькук ваша сессия устарела. Не беспокойтесь:введенные вами данные сохранены." +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, перезагрузите страницу и попытайтесь снова. " +msgstr "Похоже, ваш броузер не настроен на прием cookies. Пожалуйства, включите cookie, перезагрузите страницу и попытайтесь снова." #: contrib/admin/views/decorators.py:82 msgid "Usernames cannot contain the '@' character." @@ -440,7 +451,7 @@ msgstr "Имя пользователя не может включать сим #: contrib/admin/views/decorators.py:84 #, python-format msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "Ваш e-mail адрес не ваше имя. Попробуйте '%s' в замен." +msgstr "Ваш адрес электронной почты не является вашим именем пользователя. Попробуйте '%s' взамен." #: contrib/admin/views/main.py:226 msgid "Site administration" @@ -449,12 +460,12 @@ msgstr "Администрирование сайта" #: 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 msgid "You may edit it again below." -msgstr "Вы снова можете редактировать их внизу" +msgstr "Ниже можно снова редактировать его" #: contrib/admin/views/main.py:272 #: contrib/admin/views/main.py:357 @@ -470,7 +481,7 @@ msgstr "Добавить %s" #: 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 @@ -481,12 +492,12 @@ msgstr "и" #: 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." @@ -495,12 +506,12 @@ msgstr "Ни одно поле не изменено." #: contrib/admin/views/main.py:346 #, 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 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "%(name)s \"%(obj)s\" было успешно изменено. Вы можете редактировать его снова." +msgstr "%(name)s \"%(obj)s\" был успешно добавлен. Ниже можно снова редактировать его." #: contrib/admin/views/main.py:392 #, python-format @@ -510,17 +521,17 @@ msgstr "Изменить %s" #: 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?" @@ -529,7 +540,7 @@ msgstr "Вы уверены?" #: contrib/admin/views/main.py:533 #, python-format msgid "Change history: %s" -msgstr "Измени историю: %s" +msgstr "История изменений: %s" #: contrib/admin/views/main.py:565 #, python-format @@ -574,7 +585,7 @@ msgstr "Дата (с указанием времени)" #: 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 @@ -591,7 +602,7 @@ msgstr "Логическое (True, False или None)" #: contrib/admin/views/doc.py:292 msgid "Relation to parent model" -msgstr "Зависимость на родительскую модель." +msgstr "Связь с родительской моделью" #: contrib/admin/views/doc.py:293 msgid "Phone number" @@ -612,11 +623,11 @@ 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 @@ -683,11 +694,11 @@ msgstr "Действие" #: 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 "Данный обьект не имеет истории изменения. Возможно он не был добавлен через данный административный сайт." +msgstr "Данный обьект не имеет истории изменений. Возможно, он был добавлен не через данный административный сайт." #: contrib/admin/templates/admin/base_site.html:4 msgid "Django site admin" @@ -711,7 +722,7 @@ msgstr "Ошибка сервера (500)" #: contrib/admin/templates/admin/500.html:10 msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." -msgstr "Произошла ошибка. Отчет об ошибке отправлен администраторам сайта по e-mailи она должна быть вскоре исправлена. Благодарим вас на терпение и помощь." +msgstr "Произошла ошибка. Отчет об ошибке отправлен администраторам сайта по электронной почте, ошибка должна быть вскоре исправлена. Благодарим вас на терпение и помощь." #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 @@ -725,7 +736,7 @@ msgstr "К сожалению, запрашиваемая вами страни #: 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 @@ -742,11 +753,11 @@ msgstr "Недостаточно прав для редактирования." #: 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" @@ -773,12 +784,12 @@ 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_name)s '%(object)s' приведет к удалению зависимых элементов, но предоставленных вам прав недостаточно для удаления следующих типов объектов:" +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\"? Все следующие объекты также будут удалены:" +msgstr "Вы уверены, что хотите удалить %(object_name)s \"%(object)s\"? Все следующие связанные объекты также будут удалены:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" @@ -787,12 +798,24 @@ msgstr "Да, я уверен" #: contrib/admin/templates/admin/filter.html:2 #, python-format msgid " By %(title)s " -msgstr "К%(title)s " +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 "Смотреть сайт" @@ -800,8 +823,9 @@ 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] "Пожалуйста, исправьте ошибки ниже." +msgstr[2] "Пожалуйста, исправьте ошибки ниже." #: contrib/admin/templates/admin/change_form.html:48 msgid "Ordering" @@ -852,11 +876,11 @@ 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 новый." +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" @@ -877,11 +901,11 @@ 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 "Мы отправили новый пароль по указанному вами адресу электронной почты. Вы должны его вскоре получить." +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 "В целях безопасности, пожалуйста, введите ваш старый пароль, затем - новый пароль дважды, с тем, чтобы мы могли убедиться в правильности написания." +msgstr "В целях безопасности, пожалуйста, введите свой старый пароль, затем - новый пароль дважды, с тем, чтобы мы могли убедиться в правильности написания." #: contrib/admin/templates/registration/password_change_form.html:17 msgid "Old password:" @@ -901,12 +925,12 @@ msgstr "Изменение пароля" #: 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 @@ -915,7 +939,7 @@ 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 "Вы всегда можете изменить этот пароль перейдя на страницу:" +msgstr "Вы всегда можете изменить этот пароль, перейдя на страницу:" #: contrib/admin/templates/registration/password_reset_email.html:11 msgid "Your username, in case you've forgotten:" @@ -936,7 +960,7 @@ msgstr "Закладки" #: contrib/admin/templates/admin_doc/bookmarklets.html:5 msgid "Documentation bookmarklets" -msgstr "Документация по bookmarklets" +msgstr "Закладки документации" #: contrib/admin/templates/admin_doc/bookmarklets.html:9 msgid "" @@ -948,6 +972,13 @@ msgid "" "as \"internal\" (talk to your system administrator if you aren't sure if\n" "your computer is \"internal\").

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

                                                              Для установки закладок перетащите ссылку к себе на панель\n" +"закладок или щелкните правой кнопкой мыши по ссылке и добавьте ее в закладки. Теперь у вас есть возможность\n" +"выбрать закладку с любой страницы сайта. Обратите внимание: некоторые из этих\n" +"закладок требуют, чтобы вы просматривали сайт с компьютера, определенного\n" +"как \"внутренний\" (уточните у своего системного администратора, если не уверены, является ли\n" +"ваш компьютер \"внутренним\").

                                                              \n" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "Documentation for this page" @@ -955,7 +986,7 @@ 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 "Перенаправит вас с любой страницы к просмотру документа, который генерирует эту страницу." +msgstr "Перенаправляет вас с любой страницы к документации view, который генерирует эту страницу." #: contrib/admin/templates/admin_doc/bookmarklets.html:22 msgid "Show object ID" @@ -963,7 +994,7 @@ 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 для страниц, которые означают одинокий объект." +msgstr "Показывает тип наполнения и уникальный ID для страниц, представляющих один объект." #: contrib/admin/templates/admin_doc/bookmarklets.html:25 msgid "Edit this object (current window)" @@ -971,7 +1002,7 @@ msgstr "Редактировать данный обьект (в текущем #: 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)" @@ -979,7 +1010,7 @@ msgstr "Редактировать данный обьект (в новом ок #: 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:" @@ -999,27 +1030,27 @@ msgstr "Изменить:" #: 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/'." +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://'." +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." @@ -1027,19 +1058,19 @@ 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'." @@ -1047,7 +1078,7 @@ msgstr "Пример: 'flatpages/contact_page'. Если этот файл не #: 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." @@ -1055,24 +1086,24 @@ msgstr "Если отмечено, только вошедшие пользов #: 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 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 @@ -1090,23 +1121,23 @@ 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]'" @@ -1114,7 +1145,7 @@ 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." @@ -1122,27 +1153,27 @@ msgstr "Отметьте, если пользователь может вход #: 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 "К добавлению к перавам выбрнанным вуручную, этот пользователь может получить все права группы, к которой он принадлежит." +msgstr "В добавление к правам, присвоенным вручную, этот пользователь получит все права групп, к которым он принадлежит." #: contrib/auth/models.py:67 msgid "user permissions" -msgstr "Права пользователя" +msgstr "права пользователя" #: contrib/auth/models.py:70 msgid "user" @@ -1182,59 +1213,59 @@ msgstr "имя класса python модуля" #: 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" @@ -1307,7 +1338,7 @@ msgstr "Сентябрь" #: utils/dates.py:15 msgid "October" -msgstr "Остябрь" +msgstr "Октябрь" #: utils/dates.py:15 msgid "November" @@ -1367,143 +1398,149 @@ 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[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" @@ -1511,100 +1548,100 @@ msgstr "Русский" #: 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 "Значение может содержать только буквы, цифры, подчеркивания, дифисы или тере." +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 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 "Загрузите реальное изображение. Файл, который вы загружали, не был изображением или был поврежден." +msgstr "Загрузите реальное изображение. Файл, который вы загрузили, не является изображением или был поврежден." #: core/validators.py:155 #, python-format @@ -1614,7 +1651,7 @@ msgstr "URL %s не указывает на реальное изображен #: 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 @@ -1623,7 +1660,7 @@ msgstr "URL %s не указывает на реальное видео QuickTim #: core/validators.py:171 msgid "A valid URL is required." -msgstr "Реальный URL обязателен." +msgstr "Правильный URL обязателен." #: core/validators.py:185 #, python-format @@ -1631,7 +1668,7 @@ msgid "" "Valid HTML is required. Specific errors are:\n" "%s" msgstr "" -"Реальный HTML обязателен. Специфичные ошибки:\n" +"Правильный HTML обязателен. Специфичные ошибки:\n" "%s" #: core/validators.py:192 @@ -1648,11 +1685,11 @@ msgstr "Неверный URL: %s" #: 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 @@ -1660,6 +1697,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] "Следите за своими словами! Слово %s здесь запрещено." msgstr[1] "Следите за своими словами! Слова %s здесь запрещены." +msgstr[2] "Следите за своими словами! Слова %s здесь запрещены." #: core/validators.py:236 #, python-format @@ -1673,58 +1711,60 @@ msgstr "Пожалуйста, заполните хотя бы одно поле #: 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." +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." +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." @@ -1733,7 +1773,7 @@ msgstr "Это поле неверно." #: core/validators.py:426 #, python-format msgid "Could not retrieve anything from %s." -msgstr "Невозможно получить что-либо с %s." +msgstr "Невозможно получить ничего с %s." #: core/validators.py:429 #, python-format @@ -1743,42 +1783,42 @@ msgstr "URL %(url)s вернул неверный заголовок Content-Typ #: core/validators.py:462 #, python-format msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)" -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 @@ -1790,11 +1830,11 @@ msgstr "Обязательное поле." #: db/models/fields/__init__.py:337 msgid "This value must be an integer." -msgstr "" +msgstr "Это значение должно быть целым числом." #: db/models/fields/__init__.py:369 msgid "This value must be either True or False." -msgstr "Значение должно либо True либо False." +msgstr "Значение должно либо True, либо False." #: db/models/fields/__init__.py:385 msgid "This field cannot be null." @@ -1807,48 +1847,50 @@ msgstr "Укажите правильное имя файла." #: db/models/fields/related.py:43 #, python-format msgid "Please enter a valid %s." -msgstr "" +msgstr "Пожалуйста, введите правильный %s." #: db/models/fields/related.py:579 msgid "Separate multiple IDs with commas." -msgstr "Несколько значений ID разделяйте запятыми." +msgstr "Несколько значений ID разделите запятыми." #: db/models/fields/related.py:581 msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr " Удерживайте \"Control\", или \"Command\" на Макинтош, для выбора больше чем одного." +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] "" +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 #, 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." diff --git a/django/conf/locale/sl/LC_MESSAGES/django.mo b/django/conf/locale/sl/LC_MESSAGES/django.mo index 12253610c4..a96fd554ef 100644 Binary files a/django/conf/locale/sl/LC_MESSAGES/django.mo and b/django/conf/locale/sl/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/sl/LC_MESSAGES/django.po b/django/conf/locale/sl/LC_MESSAGES/django.po index 5a9b6d6b46..b0617a5bd8 100644 --- a/django/conf/locale/sl/LC_MESSAGES/django.po +++ b/django/conf/locale/sl/LC_MESSAGES/django.po @@ -1,7 +1,9 @@ # translation of django.po to Slovenian # Igor Kolar , 2006. +# Jure Cuhalev , 2006, 2007. +# Gasper Koren , 2007. +# Jozko Skrablin , 2007. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. msgid "" @@ -9,8 +11,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-05-16 10:13+0200\n" -"PO-Revision-Date: 2006-07-29 11:52+0100\n" -"Last-Translator: Jure Čuhalev \n" +"PO-Revision-Date: 2007-02-15 21:47+0100\n" +"Last-Translator: Gasper Koren \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -90,7 +92,7 @@ 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\"." +msgstr "Odkljukaj, če je komentar neprimeren. Namesto komentarja bo vidno obvestilo \"Ta komentar je bil odstranjen\"." #: contrib/comments/models.py:91 msgid "comments" @@ -126,7 +128,7 @@ msgstr "ip naslov" #: contrib/comments/models.py:173 msgid "approved by staff" -msgstr "potrjeno s strani osebja" +msgstr "osebje je potrdilo" #: contrib/comments/models.py:176 msgid "free comment" @@ -174,7 +176,7 @@ msgstr "datum označitve (zastavice)" #: contrib/comments/models.py:268 msgid "user flag" -msgstr "uporabnikova zastavica" +msgstr "uporabniška zastavica" #: contrib/comments/models.py:269 msgid "user flags" @@ -204,7 +206,7 @@ msgstr "Izbris opravil moderator %r" #: 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" @@ -216,7 +218,7 @@ 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." +msgstr "To oceno moraš podati, ker si podal vsaj še eno drugo oceno." #: contrib/comments/views/comments.py:112 #, python-format @@ -233,15 +235,15 @@ msgstr[0] "" "\n" "%(text)s" msgstr[1] "" -"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s 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 komentarja:\n" +"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 komentarje:\n" +"Ta komentar je poslal uporabnik, ki je do zdaj poslal manj kot %(count)s komentarjev:\n" "\n" "%(text)s" @@ -259,7 +261,7 @@ msgstr "" #: contrib/comments/views/comments.py:189 #: contrib/comments/views/comments.py:280 msgid "Only POSTs are allowed" -msgstr "Dovoljena je le metoda POST" +msgstr "Dovoljena je le POST metoda" #: contrib/comments/views/comments.py:193 #: contrib/comments/views/comments.py:284 @@ -398,7 +400,7 @@ msgstr "Neznano" #: contrib/admin/models.py:16 msgid "action time" -msgstr "čas oprave dejanja" +msgstr "čas dejanja" #: contrib/admin/models.py:19 msgid "object id" @@ -410,7 +412,7 @@ msgstr "predstavitev objekta" #: 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,7 +434,7 @@ msgstr "Vsi datumi" #: 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" +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 @@ -441,11 +443,11 @@ 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. Ne skrbite, vaše objave so varno shranjene." +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." +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." @@ -454,7 +456,7 @@ 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" @@ -484,7 +486,7 @@ msgstr "Dodaj %s" #: 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 @@ -495,12 +497,12 @@ msgstr "in" #: 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." @@ -509,12 +511,12 @@ msgstr "Nobeno polje ni bilo spremenjeno." #: 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." +msgstr "%(name)s \"%(obj)s\" je bil uspešno dodano. Ponovno ga lahko urejdite spodaj." #: contrib/admin/views/main.py:392 #, python-format @@ -534,7 +536,7 @@ msgstr "Eden ali več %(fieldname)s v %(name)s:" #: 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?" @@ -562,11 +564,11 @@ msgstr "Izberite %s, ki ga želite spremeniti" #: contrib/admin/views/doc.py:295 #: contrib/admin/views/doc.py:297 msgid "Integer" -msgstr "Število (integer)" +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 @@ -576,19 +578,19 @@ 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 @@ -601,7 +603,7 @@ msgstr "Decimalno število" #: 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" @@ -701,11 +703,11 @@ 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." +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" @@ -717,7 +719,7 @@ msgstr "Napaka strežnika" #: 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 (500)" @@ -725,7 +727,7 @@ msgstr "Napaka strežnika (500)" #: contrib/admin/templates/admin/500.html:10 msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." -msgstr "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." +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 @@ -734,7 +736,7 @@ msgstr "Strani ni mogoče najti" #: contrib/admin/templates/admin/404.html:10 msgid "We're sorry, but the requested page could not be found." -msgstr "Se opravič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 @@ -773,7 +775,7 @@ msgstr "Dodaj %(name)s" #: contrib/admin/templates/admin/login.html:22 msgid "Have you forgotten your password?" -msgstr "Ste pozabili geslo" +msgstr "Ste pozabili geslo?" #: contrib/admin/templates/admin/base.html:23 msgid "Welcome," @@ -787,7 +789,7 @@ msgstr "Izbriši" #: 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:" +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 @@ -815,17 +817,17 @@ msgstr "Poglej na strani" 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[2] "Prosimo, odpravite sledeči napaki." +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" @@ -853,7 +855,7 @@ msgstr "Sprememba gesla" #: 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." @@ -864,23 +866,23 @@ msgstr "Vaše geslo je bilo spremenjeno." #: 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." +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" @@ -889,15 +891,15 @@ msgstr "Ponovna prijava" #: 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" +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)" +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:" @@ -913,16 +915,16 @@ msgstr "Potrditev gesla:" #: 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 @@ -935,7 +937,7 @@ msgstr "Geslo lahko spremenite z obiskom strani:" #: 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!" @@ -955,6 +957,7 @@ msgid "Documentation bookmarklets" msgstr "Dokumentacijske zaznamkice" #: contrib/admin/templates/admin_doc/bookmarklets.html:9 +#, fuzzy msgid "" "\n" "

                                                              To install bookmarklets, drag the link to your bookmarks\n" @@ -966,11 +969,11 @@ msgid "" msgstr "" "\n" "

                                                              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)

                                                              \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).

                                                              \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." @@ -986,7 +989,7 @@ msgstr "Pokaže content-type in unikatni ID za strani, ki predstavljajo en objek #: 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." @@ -1006,7 +1009,7 @@ msgstr "Datum:" #: contrib/admin/templates/widget/date_time.html:4 msgid "Time:" -msgstr "Čas:" +msgstr "Ura:" #: contrib/admin/templates/widget/file.html:2 msgid "Currently:" @@ -1022,7 +1025,7 @@ 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'-" +msgstr "Ta pot mora biti absolutna, brez imena domene. Primer: '/events/search'" #: contrib/redirects/models.py:9 msgid "redirect to" @@ -1030,7 +1033,7 @@ 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://')" +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" @@ -1042,7 +1045,7 @@ 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." +msgstr "Primer: '/about/contact/'. Preverite ali vsebuje / (poševnico) na začetku in koncu vnosa." #: contrib/flatpages/models.py:9 msgid "title" @@ -1070,7 +1073,7 @@ msgstr "obvezna registracija" #: 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" @@ -1121,7 +1124,7 @@ msgstr "priimek" #: contrib/auth/models.py:58 msgid "e-mail address" -msgstr "e-naslov" +msgstr "e-mail naslov" #: contrib/auth/models.py:59 msgid "password" @@ -1157,7 +1160,7 @@ 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." +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 msgid "user permissions" @@ -1201,19 +1204,19 @@ 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" @@ -1415,50 +1418,50 @@ msgstr "dec." #: utils/timesince.py:12 msgid "year" msgid_plural "years" -msgstr[0] "let" -msgstr[1] "leto" -msgstr[2] "leti" -msgstr[3] "leta" +msgstr[0] "leto" +msgstr[1] "leti" +msgstr[2] "leta" +msgstr[3] "let" #: utils/timesince.py:13 msgid "month" msgid_plural "months" -msgstr[0] "mesecev" -msgstr[1] "mesec" -msgstr[2] "meseca" -msgstr[3] "meseci" +msgstr[0] "mesec" +msgstr[1] "meseca" +msgstr[2] "meseci" +msgstr[3] "mesecev" #: utils/timesince.py:14 msgid "week" msgid_plural "weeks" -msgstr[0] "tednov" -msgstr[1] "teden" -msgstr[2] "tedna" +msgstr[0] "teden" +msgstr[1] "tedna" +msgstr[2] "tedni" msgstr[3] "tednov" #: utils/timesince.py:15 msgid "day" msgid_plural "days" -msgstr[0] "dni" -msgstr[1] "dan" -msgstr[2] "dneva" +msgstr[0] "dan" +msgstr[1] "dneva" +msgstr[2] "dnevi" msgstr[3] "dni" #: utils/timesince.py:16 msgid "hour" msgid_plural "hours" -msgstr[0] "ur" -msgstr[1] "ura" -msgstr[2] "uri" -msgstr[3] "ure" +msgstr[0] "ura" +msgstr[1] "uri" +msgstr[2] "ure" +msgstr[3] "ur" #: utils/timesince.py:17 msgid "minute" msgid_plural "minutes" -msgstr[0] "minut" -msgstr[1] "minuta" -msgstr[2] "minuti" -msgstr[3] "minute" +msgstr[0] "minuta" +msgstr[1] "minuti" +msgstr[2] "minute" +msgstr[3] "minut" #: conf/global_settings.py:37 msgid "Bengali" @@ -1562,7 +1565,7 @@ msgstr "Ukrajinski" #: conf/global_settings.py:62 msgid "Simplified Chinese" -msgstr "Poenostavljen kitajski" +msgstr "Poenostavljeni kitajski" #: conf/global_settings.py:63 msgid "Traditional Chinese" @@ -1570,27 +1573,27 @@ msgstr "Tradicionalni kitajski" #: 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 msgid "This value must contain only letters, numbers, underscores, dashes or slashes." -msgstr "To polje lahko vsebuje le črke, števila, podčrtaje, poševnice ali pomišljaje." +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." @@ -1602,11 +1605,11 @@ msgstr "Prazne vrednosti tu niso dovoljene." #: 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." @@ -1614,7 +1617,7 @@ msgstr "Vnesite celo število." #: 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." @@ -1631,11 +1634,11 @@ msgstr "Vnesite veljavni datum/čas v zapisu YYYY-MM-DD HH:MM (leto-mesec-dan ur #: 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." +msgstr "Naložite veljavno sliko. Naložena datoteka ni bila slika ali pa je bila le-ta okvarjena." #: core/validators.py:155 #, python-format @@ -1654,7 +1657,7 @@ msgstr "URL %s ne kaže na veljavni QuickTime video." #: 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 @@ -1662,24 +1665,24 @@ msgid "" "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 #, 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." @@ -1690,7 +1693,7 @@ msgstr "Vnesi veljavno okrajšavo za ameriško zvezno državo." 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." @@ -1701,22 +1704,22 @@ msgstr "To polje mora ustrezati polju '%s'." #: 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 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." @@ -1729,7 +1732,7 @@ msgstr "Ta vrednost mora biti potenca od %s." #: 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 @@ -1745,19 +1748,19 @@ msgstr[3] "Prosimo, vnesite veljavno decimalno število z največ %s števkami." 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 decimalnim mestom." -msgstr[1] "Prosimo, vnesite veljavno decimalno število z največ %s decimalnimi mesti." +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." @@ -1770,7 +1773,7 @@ msgstr "To polje ni veljavno." #: 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 @@ -1780,7 +1783,7 @@ 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\".)" +msgstr "Prosimo, zaprite %(tag)s oznako v vrstici %(line)s. (Vrstica se začne z \"%(start)s\".)" #: core/validators.py:466 #, python-format @@ -1790,7 +1793,7 @@ msgstr "Tekst z začetka vrstice %(line)s ni dovoljen v tem kontekstu. (Vrstica #: 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\" v vrstici %(line)s je neveljavna oznaka. (Vrstica se začne z \"%(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 @@ -1800,12 +1803,12 @@ msgstr "\"<%(tag)s>\" v vrstici %(line)s je neveljavna oznaka. (Vrstica se začn #: 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 na vrstici %(line)s manjka eden ali več zahtevanih parametrov. (Vrstica se začne z \"%(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\".)" +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 @@ -1827,7 +1830,7 @@ msgstr "To polje je obvezno" #: db/models/fields/__init__.py:337 msgid "This value must be an integer." -msgstr "Ta vrednost mora biti število." +msgstr "Ta vrednost mora biti celo število." #: db/models/fields/__init__.py:369 msgid "This value must be either True or False." @@ -1858,8 +1861,8 @@ msgstr "Držite \"Control\" (ali \"Command\" na Mac-u), za izbiro več kot enega #, 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 veljavne %(self)s ID-je. Vrednost %(value)r ni veljavna." -msgstr[1] "Prosimo, vnesite veljavni %(self)s ID. Vrednosti %(value)r niso veljavne." +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." @@ -1867,8 +1870,8 @@ msgstr[3] "Prosimo, vnesite veljavne %(self)s ID-je. Vrednosti %(value)r niso ve #, 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 od %s znakov." -msgstr[1] "Poskrbite, da bo tekst krajši od %s znaka." +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." @@ -1885,11 +1888,11 @@ 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." @@ -1897,11 +1900,11 @@ msgstr "Vnesite pozitivno število." #: 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" diff --git a/django/conf/locale/sr/LC_MESSAGES/django.mo b/django/conf/locale/sr/LC_MESSAGES/django.mo index 06ac3cde5a..c942838b09 100644 Binary files a/django/conf/locale/sr/LC_MESSAGES/django.mo and b/django/conf/locale/sr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/sr/LC_MESSAGES/django.po b/django/conf/locale/sr/LC_MESSAGES/django.po index ad45c28457..3d7cef4f2b 100644 --- a/django/conf/locale/sr/LC_MESSAGES/django.po +++ b/django/conf/locale/sr/LC_MESSAGES/django.po @@ -3,101 +3,99 @@ msgstr "" "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ć \n" -"Language-Team: Nesh & Petar \n" +"PO-Revision-Date: 2007-02-20 18:50+0100\n" +"Last-Translator: Petar Marić \n" +"Language-Team: Nesh & Petar \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 @@ msgid "" "\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 @@ msgstr "ip adresa" #: 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 @@ msgid "score date" 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 @@ msgid "" "\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 @@ msgstr "Neispravan ID komentara" #: 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 @@ msgid "" "\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 @@ msgstr "Jedino je POST dozvoljen" #: 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 @@ msgid "Password:" 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 @@ msgstr "Izmeni moju lozinku" #: 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 @@ msgid "" "

                                                              By %s:

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

                                                                Od %s:

                                                                \n" +"

                                                                Po %s:

                                                                \n" "
                                                                  \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 @@ msgstr "Danas" #: 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 @@ msgstr "Nepoznato" #: 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 @@ msgstr "opis objekta" #: 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 @@ msgstr "Korisnička imena ne mogu sadržati karakter '@'." #: 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 @@ msgstr "Administracija sajta" 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 @@ msgstr "Izmenjen %s." #: 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 @@ msgstr "Uspešno izmenjen: %(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\" 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 @@ msgstr "Istorija izmena: %s" #: 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" - -#: 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 +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 msgid "Integer" msgstr "Ceo broj" @@ -591,7 +564,8 @@ msgstr "Ceo broj" 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 @@ msgstr "Datum (sa vremenom)" 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 @@ msgstr "Logička vrednost (Tačno, Netačno ili prazno)" #: 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 @@ msgstr "Tekst" 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 @@ msgstr "Dokumentacija" #: 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 @@ msgstr "Korisnik" #: 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 @@ msgid "Server Error (500)" msgstr "Greška na serveru (500)" #: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"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 @@ msgstr "Tražena strana ne postoji." #: 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 @@ msgstr "Nemate prava da vršite izmene." #: 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 forgotten your password?" -msgstr "Da li ste zaboravili Vašu lozinku??" +msgstr "Da li ste zaboravili vašu lozinku??" #: contrib/admin/templates/admin/base.html:23 msgid "Welcome," @@ -812,26 +778,17 @@ msgstr "Dobrodošli," #: 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 @@ msgstr "Da, siguran sam" #: 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 @@ msgstr "Red:" #: 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 @@ msgid "Password reset" 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 @@ msgstr "E-mail adresa:" #: 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 @@ msgstr "Hvala Vam na poseti." #: 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 @@ msgid "Password reset successful" 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 @@ msgstr "Potvrdite novu lozinku:" #: 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 @@ msgid "" "your computer is \"internal\").

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

                                                                  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\").

                                                                  \n" +"

                                                                  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\").

                                                                  \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 @@ msgstr "Skače na admin stranu za strane koje predstavljaju objekt." #: 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 @@ msgstr "Izmenite:" #: 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 @@ msgstr "omogućite komentare" #: 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 @@ msgstr "samo za registrovane korisnike" #: 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 @@ msgstr "statična strana" 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 @@ msgstr "Koristite '[algo]$[salt]$[hexdigest]'" #: 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 @@ msgid "date joined" 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 @@ msgstr "Lične informacije" #: contrib/auth/models.py:77 msgid "Permissions" -msgstr "Prava" +msgstr "Dozvole" #: contrib/auth/models.py:78 msgid "Important dates" @@ -1274,22 +1182,16 @@ msgid "Groups" 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 @@ msgstr "Januar" 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 @@ msgid "December" 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 @@ msgstr[2] "meseci" #: 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 @@ msgstr "Nemački" #: conf/global_settings.py:42 msgid "Greek" -msgstr "" +msgstr "Grčki" #: conf/global_settings.py:43 msgid "English" @@ -1585,11 +1490,11 @@ msgstr "Galski" #: 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 @@ msgid "Slovak" 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 @@ msgid "Swedish" 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 @@ msgid "This value must contain only letters, numbers and underscores." 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 @@ msgstr "Unesite ispravnu IP adresu." #: 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 @@ msgstr "Unesite ispravan datum u YYYY-MM-DD formatu." 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 @@ msgid "Enter a valid e-mail address." 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 @@ msgstr "URL %s ne pokazuje na ispravnu sliku" #: 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 @@ msgstr "Neispravan XML: %s" 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 @@ msgstr "Ovo polje mora biti jednako sa poljem '%s'." 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 @@ msgstr "Unesite ispravan decimalni broj." #: 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 @@ msgstr[2] "Unesite ispravan decimalni broj sa %s cifara." #: 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 @@ msgstr "Ništa nije moglo da se skine sa URL-a %s." #: 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 @@ msgstr "%(object)s sa ovim tipom %(type)s već postoji za polje %(field)s." 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 @@ msgid "Please enter a valid %s." 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 @@ msgstr[2] "Tekst mora imati manje od %s slova." 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 @@ msgstr "da,ne,možda" #~ 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 @@ msgstr "da,ne,možda" #, fuzzy #~ msgid "count" #~ msgstr "sadržaj" + diff --git a/django/conf/locale/sr/LC_MESSAGES/djangojs.mo b/django/conf/locale/sr/LC_MESSAGES/djangojs.mo index 4ae94424df..d4036a893e 100644 Binary files a/django/conf/locale/sr/LC_MESSAGES/djangojs.mo and b/django/conf/locale/sr/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/sr/LC_MESSAGES/djangojs.po b/django/conf/locale/sr/LC_MESSAGES/djangojs.po index ce23be3ee4..a70d878ea4 100644 --- a/django/conf/locale/sr/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/sr/LC_MESSAGES/djangojs.po @@ -8,13 +8,12 @@ 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-15 11:24+0100\n" -"Last-Translator: Nebojša Đorđević \n" +"PO-Revision-Date: 2007-02-20 18:51+0100\n" +"Last-Translator: Petar Marić \n" "Language-Team: Nesh & Petar \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 @@ msgstr "Dostupno %s" #: 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 @@ msgstr "Sat" #: 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" diff --git a/django/conf/locale/sv/LC_MESSAGES/django.mo b/django/conf/locale/sv/LC_MESSAGES/django.mo index 90035f7c87..cd91c18cb7 100644 Binary files a/django/conf/locale/sv/LC_MESSAGES/django.mo and b/django/conf/locale/sv/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/sv/LC_MESSAGES/django.po b/django/conf/locale/sv/LC_MESSAGES/django.po index 8fc67d4047..befde10e77 100644 --- a/django/conf/locale/sv/LC_MESSAGES/django.po +++ b/django/conf/locale/sv/LC_MESSAGES/django.po @@ -1,1081 +1,854 @@ # Swedish translation of Django # Copyright (C) 2005 # This file is distributed under the same license as the Django package. -# Robin Sonefors , 2005. # +# +# Robin Sonefors , 2005. +# Ludvig Ericson , 2007. +# Mikko Hellsing , 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 \n" -"Language-Team: Django translators \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 \n" +"Language-Team: Django I18N \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" -#: contrib/comments/models.py:67 contrib/comments/models.py:166 -msgid "object ID" -msgstr "objektets id" +#: 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." -#: contrib/comments/models.py:68 -msgid "headline" -msgstr "rubrik" +#: 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." -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "kommentar" +#: oldforms/__init__.py:392 +msgid "Line breaks are not allowed here." +msgstr "Radbrytningar är inte tillåtna här." -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "betyg #1" +#: 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." -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "betyg #2" +#: oldforms/__init__.py:572 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "Okänt" -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "betyg #3" +#: oldforms/__init__.py:572 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "Ja" -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "betyg #4" +#: oldforms/__init__.py:572 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "Nej" -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "betyg #5" +#: 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." -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "betyg #6" +#: oldforms/__init__.py:669 +msgid "The submitted file is empty." +msgstr "Den insända filen är tom." -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "betyg #7" +#: oldforms/__init__.py:725 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Fyll i ett heltal mellan -32768 och 32767." -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "betyg #8" +#: oldforms/__init__.py:735 +msgid "Enter a positive number." +msgstr "Fyll i ett positivt heltal." -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "är ett giltigt betyg" +#: oldforms/__init__.py:745 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Fyll i ett heltal mellan 0 och 32767." -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "datum/tid postat" +#: 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." -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -msgid "is public" -msgstr "är offentligt" +#: 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" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -msgid "IP address" -msgstr "IP-adress" +#: 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." -#: contrib/comments/models.py:86 -msgid "is removed" -msgstr "är borttaget" +#: db/models/fields/__init__.py:366 +msgid "This value must be an integer." +msgstr "Det här värdet måste vara ett heltal." -#: 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 "" -"Bocka för den här rutan om kommentaren är olämplig. Ett \"Den här " -"kommentaren har tagits bort\"-meddelande kommer visas istället" +#: 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" -#: contrib/comments/models.py:91 -#, fuzzy -msgid "comments" -msgstr "kommentar" +#: db/models/fields/__init__.py:422 +msgid "This field cannot be null." +msgstr "Det här fältet får inte vara null." -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "innehållsobjekt" +#: 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." -#: contrib/comments/models.py:159 +#: 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 "" -"Posted by %(user)s at %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" -msgstr "" -"Postat av %(user)s %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" +msgid "Please enter a valid %s." +msgstr "Var god fyll i giltigt %s." -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "personens namn" +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "Separera flera ID:n med kommatecken." -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "IP-adress" +#: 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." -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "godkänd av personal" +#: 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." -#: contrib/comments/models.py:176 -#, fuzzy -msgid "free comment" -msgstr "Fri kommentar" +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "Arabiska" -#: contrib/comments/models.py:177 -#, fuzzy -msgid "free comments" -msgstr "Fria kommentarer" +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "Bengaliska" -#: contrib/comments/models.py:233 -msgid "score" -msgstr "poäng" +#: conf/global_settings.py:41 +msgid "Catalan" +msgstr "Katalanska" -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "poängens datum" +#: conf/global_settings.py:42 +msgid "Czech" +msgstr "Tjeckiska" -#: contrib/comments/models.py:237 -#, fuzzy -msgid "karma score" -msgstr "Karmapoäng" +#: conf/global_settings.py:43 +msgid "Welsh" +msgstr "Walesiska" -#: contrib/comments/models.py:238 -#, fuzzy -msgid "karma scores" -msgstr "Karmapoäng" +#: conf/global_settings.py:44 +msgid "Danish" +msgstr "Danska" -#: contrib/comments/models.py:242 -#, python-format -msgid "%(score)d rating by %(user)s" -msgstr "Betyget %(score)d av %(user)s" +#: conf/global_settings.py:45 +msgid "German" +msgstr "Tyska" -#: contrib/comments/models.py:258 -#, python-format -msgid "" -"This comment was flagged by %(user)s:\n" -"\n" -"%(text)s" -msgstr "" -"Den här kommentaren flaggades av %(user)s:\n" -"\n" -"%(text)s" +#: conf/global_settings.py:46 +msgid "Greek" +msgstr "Grekiska" -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "flaggdatum" +#: conf/global_settings.py:47 +msgid "English" +msgstr "Engelska" -#: contrib/comments/models.py:268 -#, fuzzy -msgid "user flag" -msgstr "Användarflagga" +#: conf/global_settings.py:48 +msgid "Spanish" +msgstr "Spanska" -#: contrib/comments/models.py:269 -#, fuzzy -msgid "user flags" -msgstr "Användarflaggor" +#: conf/global_settings.py:49 +msgid "Argentinean Spanish" +msgstr "Argentisk Spanska" -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "Flaggad av %r" +#: conf/global_settings.py:50 +msgid "Finnish" +msgstr "Finska" -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "borttagningsdatum" +#: conf/global_settings.py:51 +msgid "French" +msgstr "Franska" -#: contrib/comments/models.py:280 -#, fuzzy -msgid "moderator deletion" -msgstr "Moderatorborttagning" +#: conf/global_settings.py:52 +msgid "Galician" +msgstr "Galisiska" -#: contrib/comments/models.py:281 -#, fuzzy -msgid "moderator deletions" -msgstr "Moderatorborttagningar" +#: conf/global_settings.py:53 +msgid "Hungarian" +msgstr "Ungerska" -#: contrib/comments/models.py:285 -#, python-format -msgid "Moderator deletion by %r" -msgstr "Moderatorborttagning av %r" +#: conf/global_settings.py:54 +msgid "Hebrew" +msgstr "Hebreiska" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Anonyma användare kan inte rösta" +#: conf/global_settings.py:55 +msgid "Icelandic" +msgstr "Isländska" -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "Kommentaren har ett ogiltigt ID" +#: conf/global_settings.py:56 +msgid "Italian" +msgstr "Italienska" -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "Du får inte rösta på dig själv" +#: conf/global_settings.py:57 +msgid "Japanese" +msgstr "Japanska" -#: contrib/comments/views/comments.py:28 -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." +#: conf/global_settings.py:58 +msgid "Kannada" +msgstr "Kannada" -#: 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] "" -"Den här kommentaren postades av en användare som har postat färre ä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" -"\n" -"%(text)s" +#: conf/global_settings.py:59 +msgid "Latvian" +msgstr "Lettiska" -#: contrib/comments/views/comments.py:117 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" -msgstr "" -"Den här kommentaren postades av en oseriös användare:\n" -"\n" -"%(text)s" +#: conf/global_settings.py:60 +msgid "Macedonian" +msgstr "Makedonska" -#: contrib/comments/views/comments.py:189 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "Endast POSTningar är tillåtna" +#: conf/global_settings.py:61 +msgid "Dutch" +msgstr "Holländska" -#: contrib/comments/views/comments.py:193 -#: 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" +#: conf/global_settings.py:62 +msgid "Norwegian" +msgstr "Norska" -#: contrib/comments/views/comments.py:197 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" -msgstr "Någon fifflade med kommenteringsformuläret (säkerhetsbrott)" +#: conf/global_settings.py:63 +msgid "Polish" +msgstr "Polska" -#: 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 "" -"Kommenteringsformuläret har en ogiltig 'target'-parameter -- objektets ID är " -"ogiltigt" +#: conf/global_settings.py:64 +msgid "Brazilian" +msgstr "Brasilianska" -#: 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'" +#: conf/global_settings.py:65 +msgid "Romanian" +msgstr "Rumänska" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" -msgstr "Användarnamn:" +#: conf/global_settings.py:66 +msgid "Russian" +msgstr "Ryska" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Lösenord:" +#: conf/global_settings.py:67 +msgid "Slovak" +msgstr "Slovakiska" -#: contrib/comments/templates/comments/form.html:6 -#, fuzzy -msgid "Forgotten your password?" -msgstr "Ändra mitt lösenord" +#: conf/global_settings.py:68 +msgid "Slovenian" +msgstr "Slovenska" -#: 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 "Logga ut" +#: conf/global_settings.py:69 +msgid "Serbian" +msgstr "Serbiska" -#: contrib/comments/templates/comments/form.html:12 -#, fuzzy -msgid "Ratings" -msgstr "betyg #1" +#: conf/global_settings.py:70 +msgid "Swedish" +msgstr "Svenska" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "" +#: conf/global_settings.py:71 +msgid "Tamil" +msgstr "Tamil" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "" +#: conf/global_settings.py:72 +msgid "Turkish" +msgstr "Turkiska" -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "" +#: conf/global_settings.py:73 +msgid "Ukrainian" +msgstr "Ukrainska" -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -#, fuzzy -msgid "Comment:" -msgstr "Kommentar" +#: conf/global_settings.py:74 +msgid "Simplified Chinese" +msgstr "Förenklad Kinesiska" -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -#, fuzzy -msgid "Preview comment" -msgstr "Fri kommentar" +#: conf/global_settings.py:75 +msgid "Traditional Chinese" +msgstr "Traditionell Kinesiska" -#: contrib/comments/templates/comments/freeform.html:4 -#, fuzzy -msgid "Your name:" -msgstr "användarnamn" +#: 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." -#: contrib/admin/filterspecs.py:40 -#, python-format +#: core/validators.py:68 msgid "" -"

                                                                  By %s:

                                                                  \n" -"
                                                                    \n" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." msgstr "" -"

                                                                    Av %s:

                                                                    \n" -"
                                                                      \n" - -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -msgid "All" -msgstr "Alla" - -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Alla datum" +"Det här värdet får bara innehålla bokstäver, siffror, understräck, sträck " +"och snedsträck" -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "Idag" +#: 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 ." -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "Senaste 7 dagarna" +#: core/validators.py:76 +msgid "Uppercase letters are not allowed here." +msgstr "Stora bokstäver är inte tillåtna här." -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Den här månaden" +#: core/validators.py:80 +msgid "Lowercase letters are not allowed here." +msgstr "Små bokstäver är inte tillåtna här." -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Det här året" +#: core/validators.py:87 +msgid "Enter only digits separated by commas." +msgstr "Fyll enbart i siffror avskilda med kommatecken." -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Ja" +#: core/validators.py:99 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Fyll i giltiga e-mailadresser avskilda med kommatecken." -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "Nej" +#: core/validators.py:103 +msgid "Please enter a valid IP address." +msgstr "Var god fyll i en giltigt IP-adress." -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Okänt" +#: core/validators.py:107 +msgid "Empty values are not allowed here." +msgstr "Tomma värden är inte tillåtna här." -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "tid för händelse" +#: core/validators.py:111 +msgid "Non-numeric characters aren't allowed here." +msgstr "Icke-numeriska tecken är inte tillåtna här." -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "objektets id" +#: 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." -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "objektets beskrivning" +#: core/validators.py:120 newforms/fields.py:126 +msgid "Enter a whole number." +msgstr "Fyll i ett heltal." -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "händelseflagga" +#: core/validators.py:124 +msgid "Only alphabetical characters are allowed here." +msgstr "Endast bokstäver är tillåtna här." -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "ändra meddelande" +#: core/validators.py:139 +msgid "Year must be 1900 or later." +msgstr "Årtal måste vara 1900 eller senare." -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "loggpost" +#: core/validators.py:143 +#, python-format +msgid "Invalid date: %s." +msgstr "Felaktigt datum: %s" -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "loggposter" +#: core/validators.py:152 +msgid "Enter a valid time in HH:MM format." +msgstr "Fyll i en giltig tid i formatet HH:MM" -#: contrib/admin/templatetags/admin_list.py:228 -msgid "All dates" -msgstr "Alla datum" +#: core/validators.py:161 newforms/fields.py:269 +msgid "Enter a valid e-mail address." +msgstr "Fyll i en giltig e-mailadress." -#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 -#: contrib/auth/forms.py:41 +#: core/validators.py:177 msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." +"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." -#: contrib/admin/views/decorators.py:23 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Logga in" - -#: 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 "" -"Du måste logga in igen, eftersom din session har tagit slut. Oroa dig inte: " -"ditt bidrag har sparats." +#: 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." -#: 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." +#: core/validators.py:188 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." 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." - -#: contrib/admin/views/decorators.py:82 -msgid "Usernames cannot contain the '@' character." -msgstr "Användarnamn kan inte innehålla tecknet '@'." +"Telefonnummer måste vara i det amerikanska formatet XXX-XXX-XXXX. \"%s\" är " +"ogiltigt." -#: contrib/admin/views/decorators.py:84 +#: core/validators.py:196 #, 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." +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "URL:en %s pekar inte på en giltig QuickTime-video." -#: contrib/admin/views/main.py:226 -msgid "Site administration" -msgstr "Hemsideadministration" +#: core/validators.py:200 +msgid "A valid URL is required." +msgstr "En giltig URL krävs." -#: contrib/admin/views/main.py:260 +#: core/validators.py:214 #, 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 -msgid "You may edit it again below." -msgstr "Du kan ändra det igen här under." +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Giltig HTML krävs. Specifika fel är:\n" +"%s" -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#: core/validators.py:221 #, python-format -msgid "You may add another %s below." -msgstr "Du kan lägga till en till %s här under" +msgid "Badly formed XML: %s" +msgstr "Missformad XML: %s" -#: contrib/admin/views/main.py:290 +#: core/validators.py:238 #, python-format -msgid "Add %s" -msgstr "Lägg till %s" +msgid "Invalid URL: %s" +msgstr "Felaktig URL: %s" -#: contrib/admin/views/main.py:336 +#: core/validators.py:243 core/validators.py:245 #, python-format -msgid "Added %s." -msgstr "Lade till %s." +msgid "The URL %s is a broken link." +msgstr "URL:en %s är en trasig länk." -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "och" +#: core/validators.py:251 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Fyll i en giltig förkortning för en amerikansk delstat" -#: contrib/admin/views/main.py:338 +#: core/validators.py:265 #, python-format -msgid "Changed %s." -msgstr "Ändrade %s." +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." -#: contrib/admin/views/main.py:340 +#: core/validators.py:272 #, python-format -msgid "Deleted %s." -msgstr "Tog bort %s." +msgid "This field must match the '%s' field." +msgstr "Det här fältet måste matcha fältet '%s'." -#: contrib/admin/views/main.py:343 -msgid "No fields changed." -msgstr "Inga fält ändrade." +#: core/validators.py:291 +msgid "Please enter something for at least one field." +msgstr "Fyll i något i minst ett fält." -#: contrib/admin/views/main.py:346 -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "%(name)set \"%(obj)s\" ändrades." +#: 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" -#: contrib/admin/views/main.py:354 +#: core/validators.py:319 #, python-format -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." +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" -#: contrib/admin/views/main.py:392 +#: core/validators.py:332 #, python-format -msgid "Change %s" -msgstr "Ändra %s" +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" -#: contrib/admin/views/main.py:470 -#, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Ett eller flera %(fieldname)s i %(name)s: %(obj)s" +#: core/validators.py:351 +msgid "Duplicate values are not allowed." +msgstr "Upprepade värden är inte tillåtna." -#: contrib/admin/views/main.py:475 +#: core/validators.py:366 #, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Ett eller flera %(fieldname)s i %(name)s:" +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." -#: contrib/admin/views/main.py:508 +#: core/validators.py:368 #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "%(name)set \"%(obj)s\" togs bort." +msgid "This value must be at least %s." +msgstr "Det här värdet måste minsta vara %s." -#: contrib/admin/views/main.py:511 -msgid "Are you sure?" -msgstr "Är du säker?" - -#: contrib/admin/views/main.py:533 +#: core/validators.py:370 #, python-format -msgid "Change history: %s" -msgstr "Ändra historien: %s" +msgid "This value must be no more than %s." +msgstr "Det här värdet får inte vara mer än %s." -#: contrib/admin/views/main.py:565 +#: core/validators.py:406 #, python-format -msgid "Select %s" -msgstr "Välj %s" +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." -#: contrib/admin/views/main.py:565 +#: core/validators.py:421 #, python-format -msgid "Select %s to change" -msgstr "Välj vilken %s du vill ändra" +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." -#: 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 "Heltal" +#: 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." -#: contrib/admin/views/doc.py:278 -msgid "Boolean (Either True or False)" -msgstr "Boolesk (antingen Sann eller Falsk)" +#: 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." -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 +#: core/validators.py:437 #, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Sträng (upp till %(maxlength)s)" +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." -#: contrib/admin/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "Komma-separerade heltal" +#: 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." -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "Datum (utan tid)" +#: core/validators.py:455 +msgid "The format for this field is wrong." +msgstr "Formatet på det här fältet är fel." -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "Datum (med tid)" +#: core/validators.py:470 +msgid "This field is invalid." +msgstr "Det här fältet är ogiltigt." -#: contrib/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "E-postadress:" +#: core/validators.py:506 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "Kunde inte hämta något från %s." -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "Sökväg" +#: 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'" -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "decemaltal" +#: 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\".)" -#: contrib/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "Boolesk (antingen Sann, Falsk eller Inget)" +#: 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\".)" -#: contrib/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "Relation till förälder" +#: 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\".)" -#: contrib/admin/views/doc.py:293 -msgid "Phone number" -msgstr "Telefonnummer" +#: 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\".)" -#: contrib/admin/views/doc.py:298 -msgid "Text" -msgstr "Text" +#: 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\".)" -#: contrib/admin/views/doc.py:299 -msgid "Time" -msgstr "Tid" +#: 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\".)" -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "%(verbose_name)s skapades framgångsrikt." -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "Stat i USA (två stora bokstäver)" +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr " %(verbose_name)s uppdaterades framgångsrikt." -#: contrib/admin/views/doc.py:302 -msgid "XML text" -msgstr "XML-text" +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "%(verbose_name)s togs bort." -#: 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" +#: 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." -#: 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 "Ändra lösenord" +#: 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." -#: 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 "Hem" +#: 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." -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "Historik" +#: 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." -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Datum/tid" +#: 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." -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Användare" +#: 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." -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Händelse" +#: 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." -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "D j F Y, H:i:s" +#: newforms/fields.py:163 +msgid "Enter a valid date." +msgstr "Fyll i ett giltigt datum." -#: 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 "" -"Det här objektet har ingen ändringshistorik. Det lades antagligen inte till " -"i den här admin-sidan" +#: newforms/fields.py:190 +msgid "Enter a valid time." +msgstr "Fyll i en giltig tid." -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Djangos sidadministration" +#: newforms/fields.py:226 +msgid "Enter a valid date/time." +msgstr "Fyll i ett giltigt datum/tid." -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administration för Django" +#: newforms/fields.py:240 +msgid "Enter a valid value." +msgstr "Fyll i ett giltigt värde." -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Serverfel" +#: newforms/fields.py:287 newforms/fields.py:309 +msgid "Enter a valid URL." +msgstr "Fyll i ett giltigt URL." -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Serverfel (500)" +#: newforms/fields.py:311 +msgid "This URL appears to be a broken link." +msgstr "Detta URL verkar vara en trasig länk." -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Serverfel (500)" +#: contrib/contenttypes/models.py:26 +msgid "python model class name" +msgstr "python modell klass namn" -#: 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 "" -"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." +#: contrib/contenttypes/models.py:29 +msgid "content type" +msgstr "innehållstyp" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Sidan kunde inte hittas" +#: contrib/contenttypes/models.py:30 +msgid "content types" +msgstr "innehållstyper" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Vi är ledsna, men den efterfrågade sidan kunde inte hittas." +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "Utloggad" -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "" +#: contrib/auth/models.py:38 contrib/auth/models.py:57 +msgid "name" +msgstr "namn" -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Lägg till" +#: contrib/auth/models.py:40 +msgid "codename" +msgstr "kodnamn" -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Ändra" +#: contrib/auth/models.py:42 +msgid "permission" +msgstr "rättighet" -#: 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." +#: contrib/auth/models.py:43 contrib/auth/models.py:58 +msgid "permissions" +msgstr "rättigheter" -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Senaste händelserna" +#: contrib/auth/models.py:60 +msgid "group" +msgstr "grupp" -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "Mina händelser" +#: contrib/auth/models.py:61 contrib/auth/models.py:100 +msgid "groups" +msgstr "grupper" -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Inga tillgängliga" +#: contrib/auth/models.py:90 +msgid "username" +msgstr "användarnamn" -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "Lägg till %(name)s" +#: 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/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Har du glömt ditt lösenord?" +#: contrib/auth/models.py:91 +msgid "first name" +msgstr "förnamn" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Välkommen," +#: contrib/auth/models.py:92 +msgid "last name" +msgstr "efternamn" -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Ta bort" +#: contrib/auth/models.py:93 +msgid "e-mail address" +msgstr "e-mailadress" -#: 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 "" -"Att ta bort %(object_name)s '%(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/auth/models.py:94 +msgid "password" +msgstr "lösenord" -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, python-format +#: contrib/auth/models.py:94 msgid "" -"Are you sure you want to delete the %(object_name)s \"%(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:" - -#: 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" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Spara och lägg till ytterligare en" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Spara och fortsätt redigera" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Spara" - -#: 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 "Ändra lösenord" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "Använd '[algo]$[salt]$[hexdigest]' eller använd Ändra lösenord." -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "Lösenordet ändrades" +#: contrib/auth/models.py:95 +msgid "staff status" +msgstr "personalstatus" -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "Ditt lösenord har ändrats." +#: 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/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 "Nollställ lösenordet" +#: contrib/auth/models.py:96 +msgid "active" +msgstr "aktiv" -#: contrib/admin/templates/registration/password_reset_form.html:12 +#: contrib/auth/models.py:96 msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." msgstr "" -"Har du glömt ditt lösenord? Fyll i din e-postadress nedan, så nollställer vi " -"ditt lösenord och mailar det nya till dig." - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "E-postadress:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Nollställ mitt lösenord" - -#: 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." - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Logga in igen" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "Nollställning av lösenordet lyckades" +"Avgör om användaren kan logga in till Django admin. Av-markera denna " +"istället för att ta bort konton." -#: 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 "" -"Vi har skickat ett nytt lösenord till e-postadressen du fyllde i. Det bör " -"anlända snarast." +#: contrib/auth/models.py:97 +msgid "superuser status" +msgstr "superanvändare" -#: contrib/admin/templates/registration/password_change_form.html:12 +#: contrib/auth/models.py:97 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." +"Designates that this user has all permissions without explicitly assigning " +"them." msgstr "" -"Var god fyll i ditt gamla lösenord, för säkerhets skull, och skriv sedan in " -"det nya lösenordet två gånger så vi kan kontrollera att du skrev det rätt." +"Bestämmer att användaren har alla rättigheter utan att uttryckligen tilldela " +"dem" -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Gamla lösenordet:" +#: contrib/auth/models.py:98 +msgid "last login" +msgstr "senaste inloggning" -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Nytt lösenord:" +#: contrib/auth/models.py:99 +msgid "date joined" +msgstr "registreringsdatum" -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Bekräfta lösenord:" +#: 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/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Ändra mitt lösenord" +#: contrib/auth/models.py:102 +msgid "user permissions" +msgstr "användarättigheter" -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "Du får det här mailet eftersom du bad om att få lösenordet nollställt" +#: contrib/auth/models.py:105 +msgid "user" +msgstr "användare" -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "för ditt användarkonto på %(site_name)s" +#: contrib/auth/models.py:106 +msgid "users" +msgstr "användare" -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "Ditt nya lösenord är: %(new_password)s" +#: contrib/auth/models.py:111 +msgid "Personal info" +msgstr "Personlig information" -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "" -"Känn dig välkommen att ändra det här lösenordet genom att gå till den här " -"sidan:" +#: contrib/auth/models.py:112 +msgid "Permissions" +msgstr "Rättigheter" -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "Ditt användarnamn, om du har glömt:" +#: contrib/auth/models.py:113 +msgid "Important dates" +msgstr "Viktiga datum" -#: 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!" +#: contrib/auth/models.py:114 +msgid "Groups" +msgstr "Grupper" -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "%(site_name)s-laget" +#: contrib/auth/models.py:258 +msgid "message" +msgstr "meddelande" -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Smarta bokmärken" +#: 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/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Smarta bokmärken för dokumentation" +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "En användare med det användarnamnet finns redan." -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +#: contrib/auth/forms.py:53 msgid "" -"\n" -"

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

                                                                      \n" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." msgstr "" -"\n" -"

                                                                      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\")

                                                                      \n" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Dokumentation för den här sidan" +"Din webläsare verkar inte stödja cookies. Cookie behövs för att kunna logga " +"in." -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." msgstr "" -"Förflyttar dig från valfri sida till dokumentationen för vyn som genererar " -"den sidan." +"V.G. ange ett korrekt användarnamn och lösenord. Observera att båda fälten gör " +"skillnad på versaler och gemener." -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Visa objektets id" +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Detta konto är inaktivt." -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +#: contrib/auth/forms.py:85 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." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Redigera det här objektet (nuvarande fönster)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" msgstr "" -"Hoppar till administrationssidan för sidor som representerar ett enskillt " -"objekt." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Redigera det här objektet (nytt fönster)" - -#: 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." - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Datum:" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Tid:" +"Den e-mailadressen har inte något konto associerat med sig. Är du säker på " +"att du har registrerat dig?" -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "" +#: 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/admin/templates/widget/file.html:3 -#, fuzzy -msgid "Change:" -msgstr "Ändra" +#: 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 "vidarebefodra från" +msgstr "omdirigera från" #: contrib/redirects/models.py:8 msgid "" @@ -1087,31 +860,363 @@ msgstr "" #: contrib/redirects/models.py:9 msgid "redirect to" -msgstr "vidarebefodra till" +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 "" -"Det här kan vara antingen en absolut sökväg (som ovan), eller en komplett " -"adress som börjar med 'http://'." +"Detta kan vara antingen en absolut sökväg (som ovan), eller en komplett " +"URL som börjar med 'http://'." -#: contrib/redirects/models.py:12 +#: contrib/redirects/models.py:13 msgid "redirect" -msgstr "vidarebefodra" +msgstr "omdirigera" -#: contrib/redirects/models.py:13 +#: contrib/redirects/models.py:14 msgid "redirects" -msgstr "vidarebefodringar" +msgstr "omdirigeringar" -#: 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/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "objektets ID" -#: contrib/flatpages/models.py:9 +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "rubrik" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "kommentar" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "betyg #1" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "betyg #2" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "betyg #3" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "betyg #4" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "betyg #5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "betyg #6" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "betyg #7" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "betyg #8" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "är ett giltigt betyg" + +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "datum/tid postat" + +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "är offentligt" + +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 +msgid "IP address" +msgstr "IP-adress" + +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "är borttaget" + +#: 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 "" +"Bocka för den här rutan om kommentaren är olämplig. Ett \"Den här " +"kommentaren har tagits bort\"-meddelande kommer visas istället" + +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "kommentarer" + +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "Innehållsobjekt" + +#: 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 "" +"Postat av %(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 "personens namn" + +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "IP-adress" + +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "godkänd av personal" + +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "fri kommentar" + +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "fria kommentarer" + +#: contrib/comments/models.py:233 +msgid "score" +msgstr "poäng" + +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "poängdatum" + +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "karmapoäng" + +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "karmapoäng" + +#: contrib/comments/models.py:242 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "Betyget %(score)d av %(user)s" + +#: contrib/comments/models.py:258 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" +"Den här kommentaren flaggades av %(user)s:\n" +"\n" +"%(text)s" + +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "flaggdatum" + +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "användares flagga" + +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "användares flaggor" + +#: contrib/comments/models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "Flaggad av %r" + +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "borttagnings-datum" + +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "moderator-borttagning" + +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "moderator-borttagningar" + +#: contrib/comments/models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "Moderator-borttagning av %r" + +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Anonyma användare kan inte rösta" + +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment 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: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: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] "" +"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 mindre än " +"%(count)s kommentarer:\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 "" +"Den här kommentaren postades av en oseriös användare:\n" +"\n" +"%(text)s" + +#: contrib/comments/views/comments.py:188 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "Endast POST tillåtet" + +#: 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 flera av de obligatoriska fälten var inte ifyllda" + +#: 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 kommentarformuläret (säkerhetsbrott)" + +#: 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 "" +"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 "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 +msgid "Username:" +msgstr "Användarnamn:" + +#: 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/change_form.html:10 +#: 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 +#: 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 "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 +msgid "Ratings" +msgstr "Betyg" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Obligatorisk" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +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" @@ -1127,902 +1232,1113 @@ msgstr "aktivera kommentarer" msgid "template name" msgstr "mallnamn" -#: contrib/flatpages/models.py:13 +#: 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/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/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 "" +"

                                                                      By %s:

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

                                                                        Av %s:

                                                                        \n" +"
                                                                          \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Alla" + +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Alla datum" + +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Idag" + +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "Senaste 7 dagarna" + +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Den här månaden" + +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Det här året" + +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "händelsetid" + +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "objektets id" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "objektets beskrivning" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "händelseflagga" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "ändra meddelande" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "loggpost" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "loggposter" + +#: contrib/admin/templatetags/admin_list.py:247 +msgid "All dates" +msgstr "Alla datum" + +#: contrib/admin/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Logga in" + +#: 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 "" +"V.G. logga in igen, eftersom din session har tagit slut. Oroa dig inte: ditt " +"bidrag har sparats." + +#: contrib/admin/views/decorators.py:69 msgid "" -"Example: 'flatpages/contact_page'. If this isn't provided, the system will " -"use 'flatpages/default'." +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." msgstr "" -"Exempel: 'flatpages/kontaktsida'. Om det här inte fylls i kommer systemet " -"att använda 'flatpages/default'." +"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/flatpages/models.py:14 -msgid "registration required" -msgstr "registrering krävs" +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Användarnamn kan inte innehålla tecknet '@'." -#: 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/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "Din e-mailadress är inte ditt användarnamn. Försök med '%s' istället." -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "flatsida" +#: 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/flatpages/models.py:19 -msgid "flat pages" -msgstr "flatsidor" +#: 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/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "namn" +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "Lägg till användare" -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "kodnamn" +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "Lösenordet ändrades framgångsrikt." -#: contrib/auth/models.py:17 -#, fuzzy -msgid "permission" -msgstr "Rättighet" +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Ändra lösenord: %s" -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -#, fuzzy -msgid "permissions" -msgstr "Rättigheter" +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Administration" -#: contrib/auth/models.py:29 -#, fuzzy -msgid "group" -msgstr "Grupp" +#: 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." -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -#, fuzzy -msgid "groups" -msgstr "Grupper" +#: contrib/admin/views/main.py:289 +#, python-format +msgid "Add %s" +msgstr "Lägg till %s" -#: contrib/auth/models.py:55 -msgid "username" -msgstr "användarnamn" +#: contrib/admin/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "Lade till %s." -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "förnamn" +#: contrib/admin/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "Ändrade %s." -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "efternamn" +#: contrib/admin/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "Tog bort %s." -#: contrib/auth/models.py:58 -msgid "e-mail address" -msgstr "e-postadress" +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "Inga fält ändrade." -#: contrib/auth/models.py:59 -msgid "password" -msgstr "lösenord" +#: contrib/admin/views/main.py:345 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)set \"%(obj)s\" ändrades." -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Använd '[algo]$[salt]$[hexdigest]'" +#: 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)set \"%(obj)s\" lades till. Du kan ändra det igen här under." -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "personalstatus" +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "Ändra %s" -#: 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/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/auth/models.py:61 -msgid "active" -msgstr "aktiv" +#: 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/auth/models.py:62 -msgid "superuser status" -msgstr "superanvändare" +#: 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/auth/models.py:63 -msgid "last login" -msgstr "senaste inloggning" +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "Är du säker?" -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "registreringsdatum" +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "Ändra historien: %s" -#: 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/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "Välj %s" -#: contrib/auth/models.py:67 -#, fuzzy -msgid "user permissions" -msgstr "Rättigheter" +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "Välj %s att ändra" -#: contrib/auth/models.py:70 -#, fuzzy -msgid "user" -msgstr "Användare" +#: contrib/admin/views/main.py:768 +msgid "Database error" +msgstr "Databas fel" -#: contrib/auth/models.py:71 -#, fuzzy -msgid "users" -msgstr "Användare" +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "tagg:" -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "Personlig information" +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "filter:" -#: contrib/auth/models.py:77 -msgid "Permissions" -msgstr "Rättigheter" +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "Vy:" -#: contrib/auth/models.py:78 -msgid "Important dates" -msgstr "Viktiga datum" +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Applikation %r hittades inte" -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "Grupper" +#: 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/auth/models.py:219 -#, fuzzy -msgid "message" -msgstr "Meddelande" +#: 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/auth/forms.py:30 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -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 "modell:" -#: contrib/contenttypes/models.py:25 -#, fuzzy -msgid "python model class name" -msgstr "pythonmodulnamn" +#: 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/contenttypes/models.py:28 -msgid "content type" -msgstr "innehållstyp" +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "alla %s" -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "innehållstyper" +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "antal %s" -#: contrib/sessions/models.py:35 -msgid "session key" -msgstr "sessionsnyckel" +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Fält på %s objekt" -#: contrib/sessions/models.py:36 -msgid "session data" -msgstr "sessionsdata" +#: 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/sessions/models.py:37 -msgid "expire date" -msgstr "utgångsdatum" +#: contrib/admin/views/doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "Boolesk (antingen Sann eller Falsk)" -#: contrib/sessions/models.py:41 -msgid "session" -msgstr "session" +#: 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/sessions/models.py:42 -msgid "sessions" -msgstr "sessioner" +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "Komma-separerade heltal" -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "domännamn" +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "Datum (utan tid)" -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "visat namn" +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "Datum (med tid)" -#: contrib/sites/models.py:15 -msgid "site" -msgstr "hemsida" +#: contrib/admin/views/doc.py:297 +msgid "E-mail address" +msgstr "E-postadress:" -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "hemsidor" +#: 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" -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "Y-m-d" +#: contrib/admin/views/doc.py:300 +msgid "Decimal number" +msgstr "Decimaltal" -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "Y-m-d, H:i" +#: contrib/admin/views/doc.py:306 +msgid "Boolean (Either True, False or None)" +msgstr "Boolesk (antingen True, False eller None)" -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "H:i:s" +#: contrib/admin/views/doc.py:307 +msgid "Relation to parent model" +msgstr "Relation till förälder-modell" -#: utils/dates.py:6 -msgid "Monday" -msgstr "måndag" +#: contrib/admin/views/doc.py:308 +msgid "Phone number" +msgstr "Telefonnummer" -#: utils/dates.py:6 -msgid "Tuesday" -msgstr "tisdag" +#: contrib/admin/views/doc.py:313 +msgid "Text" +msgstr "Text" -#: utils/dates.py:6 -msgid "Wednesday" -msgstr "onsdag" +#: contrib/admin/views/doc.py:314 +msgid "Time" +msgstr "Tid" -#: utils/dates.py:6 -msgid "Thursday" -msgstr "torsdag" +#: contrib/admin/views/doc.py:316 +msgid "U.S. state (two uppercase letters)" +msgstr "Stat i USA (två versaler)" -#: utils/dates.py:6 -msgid "Friday" -msgstr "fredag" +#: contrib/admin/views/doc.py:317 +msgid "XML text" +msgstr "XML-text" -#: utils/dates.py:7 -msgid "Saturday" -msgstr "lördag" +#: 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" -#: utils/dates.py:7 -msgid "Sunday" -msgstr "söndag" +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Nuvarande:" -#: utils/dates.py:14 -msgid "January" -msgstr "januari" +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Ändra:" -#: utils/dates.py:14 -msgid "February" -msgstr "februari" +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Datum:" -#: utils/dates.py:14 utils/dates.py:27 -msgid "March" -msgstr "mars" +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Tid:" -#: utils/dates.py:14 utils/dates.py:27 -msgid "April" -msgstr "april" +#: 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: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 +msgid "Documentation" +msgstr "Dokumentation" -#: utils/dates.py:14 utils/dates.py:27 -msgid "May" -msgstr "maj" +#: 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: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 +#: 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 "Ändra lösenord" -#: utils/dates.py:14 utils/dates.py:27 -msgid "June" -msgstr "juni" +#: 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/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/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 "Hem" -#: utils/dates.py:15 utils/dates.py:27 -msgid "July" -msgstr "juli" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:21 +msgid "History" +msgstr "Historik" -#: utils/dates.py:15 -msgid "August" -msgstr "augusti" +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Datum/tid" -#: utils/dates.py:15 -msgid "September" -msgstr "september" +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Användare" -#: utils/dates.py:15 -msgid "October" -msgstr "oktober" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Händelse" -#: utils/dates.py:15 -msgid "November" -msgstr "november" +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "D j F Y, H:i:s" -#: utils/dates.py:16 -msgid "December" -msgstr "december" +#: 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 "" +"Det här objektet har ingen ändringshistorik. Det lades antagligen inte till " +"i den här admin-siten" -#: utils/dates.py:19 -#, fuzzy -msgid "jan" -msgstr "och" +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Lägg till %(name)s" -#: utils/dates.py:19 -msgid "feb" -msgstr "" +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Av %(filter_title)s " -#: utils/dates.py:19 -msgid "mar" -msgstr "" +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Serverfel" -#: utils/dates.py:19 -msgid "apr" -msgstr "" +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Serverfel (500)" -#: utils/dates.py:19 -#, fuzzy -msgid "may" -msgstr "dag" +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Serverfel (500)" -#: utils/dates.py:19 -msgid "jun" +#: 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 "" +"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." -#: utils/dates.py:20 -msgid "jul" +#: 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." -#: utils/dates.py:20 -msgid "aug" -msgstr "" +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Utför" -#: utils/dates.py:20 -msgid "sep" -msgstr "" +#: 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" -#: utils/dates.py:20 -msgid "oct" -msgstr "" +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s totalt" -#: utils/dates.py:20 -msgid "nov" -msgstr "" +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Visa alla" -#: utils/dates.py:20 -msgid "dec" -msgstr "" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django site-administration" -#: utils/dates.py:27 -msgid "Jan." -msgstr "jan" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Django administration" -#: utils/dates.py:27 -msgid "Feb." -msgstr "feb" +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filter" -#: utils/dates.py:28 -msgid "Aug." -msgstr "aug" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Sidan kunde inte hittas" -#: utils/dates.py:28 -msgid "Sept." -msgstr "sept" +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Vi är ledsna, men den efterfrågade sidan kunde inte hittas." -#: utils/dates.py:28 -msgid "Oct." -msgstr "okt" +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "Modeller tillgängliga i %(name)s applikationen." -#: utils/dates.py:28 -msgid "Nov." -msgstr "nov" +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" -#: utils/dates.py:28 -msgid "Dec." -msgstr "dec" +#: contrib/admin/templates/admin/index.html:28 +#: contrib/admin/templates/admin/change_form.html:15 +msgid "Add" +msgstr "Lägg till" -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "år" -msgstr[1] "år" +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Ändra" -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "månad" -msgstr[1] "månader" +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Du har inte rättigheter att ändra något." -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Senaste Händelserna" -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "dag" -msgstr[1] "dagar" +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Mina Händelser" -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "timme" -msgstr[1] "timmar" +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Inga tillgängliga" -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minut" -msgstr[1] "minuter" +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Visa på siten" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "Bengaliska" +#: 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." -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "Tjeckiska" +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Sortering" -#: conf/global_settings.py:39 -msgid "Welsh" -msgstr "Walesiska" +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Sortera:" -#: conf/global_settings.py:40 -msgid "Danish" -msgstr "Danska" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Välkommen," -#: conf/global_settings.py:41 -msgid "German" -msgstr "Tyska" +#: contrib/admin/templates/admin/delete_confirmation.html:9 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Ta bort" -#: conf/global_settings.py:42 -msgid "Greek" +#: 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 "" +"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:" -#: conf/global_settings.py:43 -msgid "English" -msgstr "Engelska" +#: 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 "" +"Ä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:" -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "Spanska" +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "Ja, jag är säker" -#: conf/global_settings.py:45 -msgid "French" -msgstr "Franska" +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Spara som ny" -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "Galisiska" +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Spara och lägg till ytterligare en" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Spara och fortsätt redigera" -#: conf/global_settings.py:47 -msgid "Hungarian" -msgstr "" +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Spara" -#: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "" +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Ange nytt lösenord för användaren %(username)s." -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "Isländska" +#: 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" -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "Italienska" +#: 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)" -#: conf/global_settings.py:51 -msgid "Japanese" -msgstr "" +#: 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." -#: conf/global_settings.py:52 -msgid "Dutch" +#: 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." -#: conf/global_settings.py:53 -msgid "Norwegian" -msgstr "Norska" - -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "Brasilianska" +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Användarnamn" -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "Rumänska" +#: 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 "Ändra lösenord" -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "Ryska" +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "Lösenordet ändrades" -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "Slovakiska" +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "Ditt lösenord har ändrats." -#: conf/global_settings.py:58 -#, fuzzy -msgid "Slovenian" -msgstr "Slovakiska" +#: 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 "Nollställ lösenordet" -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "Serbiska" +#: 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 "" +"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." -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "Svenska" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "E-postadress:" -#: conf/global_settings.py:61 -#, fuzzy -msgid "Ukrainian" -msgstr "Brasilianska" +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Nollställ mitt lösenord" -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "Förenklad kinesiska" +#: 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 web-siten idag." -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "" +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Logga in igen" -#: 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." +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Nollställning av lösenordet lyckades" -#: core/validators.py:64 -#, fuzzy +#: contrib/admin/templates/registration/password_reset_done.html:12 msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." msgstr "" -"Det här värdet får bara innehålla bokstäver, tal, understräck och snedsträck" +"Vi har skickat ett nytt lösenord till e-mailadressen du fyllde i. Det bör " +"anlända snarast." -#: core/validators.py:72 -msgid "Uppercase letters are not allowed here." -msgstr "Stora bokstäver är inte tillåtna hä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 "" +"Var god fyll i ditt gamla lösenord, för säkerhets skull, och skriv sedan in " +"det nya lösenordet två gånger så vi kan kontrollera att du skrev det rätt." -#: core/validators.py:76 -msgid "Lowercase letters are not allowed here." -msgstr "Små bokstäver är inte tillåtna här." +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Gamla lösenordet:" -#: core/validators.py:83 -msgid "Enter only digits separated by commas." -msgstr "Fyll enbart i siffror avskillda med kommatecken." +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Nytt lösenord:" -#: core/validators.py:95 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Fyll i giltiga e-postadresser avskillda med kommatecken." +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Bekräfta lösenord:" -#: core/validators.py:99 -msgid "Please enter a valid IP address." -msgstr "Var god fyll i ett giltigt IP-nummer." +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Ändra mitt lösenord" -#: core/validators.py:103 -msgid "Empty values are not allowed here." -msgstr "Tomma värden är inte tillåtna här." +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "Du får det här mailet eftersom du bad om att få lösenordet nollställt" -#: core/validators.py:107 -msgid "Non-numeric characters aren't allowed here." -msgstr "Icke-numeriska tecken är inte tillåtna här." +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "för ditt användarkonto på %(site_name)s" -#: 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." +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Ditt nya lösenord är: %(new_password)s" -#: core/validators.py:116 -msgid "Enter a whole number." -msgstr "Fyll i ett heltal." +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "" +"Känn dig välkommen att ändra det här lösenordet genom att gå till den här " +"sidan:" -#: core/validators.py:120 -msgid "Only alphabetical characters are allowed here." -msgstr "Endast alfabetiska bokstäver är tillåtna här." +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "Ditt användarnamn, om du har glömt:" -#: core/validators.py:124 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Fyll i ett giltigt datum i formatet ÅÅÅÅ-MM-DD." +#: 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 site!" -#: core/validators.py:128 -msgid "Enter a valid time in HH:MM format." -msgstr "Fyll i en giltig tid i formatet TT:MM" +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s-laget" -#: 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" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Smarta bokmärken" -#: core/validators.py:136 -msgid "Enter a valid e-mail address." -msgstr "Fyll i en giltig e-postadress." +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Smarta bokmärken för dokumentation" -#: core/validators.py:148 +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." +"\n" +"

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

                                                                          \n" msgstr "" -"Ladda upp en giltig bild. Filen du laddade upp var antingen inte en bild, " -"eller så var det en korrupt bild." +"\n" +"

                                                                          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å 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\").

                                                                          \n" -#: 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." +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Dokumentation för den här sidan" -#: core/validators.py:159 -#, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +#: 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 "" -"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." +"Förflyttar dig från valfri sida till dokumentationen för vyn som genererar " +"den sidan." -#: core/validators.py:171 -msgid "A valid URL is required." -msgstr "En giltig adress krävs." +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Visa objektets ID" -#: core/validators.py:185 -#, python-format +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" +"Shows the content-type and unique ID for pages that represent a single " +"object." msgstr "" -"Giltig HTML krävs. Specifika fel är:\n" -"%s" +"Visa innehållstypen och det unika ID:t för sidor som representerar ett " +"enskilt objekt." -#: core/validators.py:192 -#, python-format -msgid "Badly formed XML: %s" -msgstr "Missformad XML: %s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Redigera det här objektet (nuvarande fönster)" -#: core/validators.py:202 -#, python-format -msgid "Invalid URL: %s" -msgstr "Felaktig URL: %s" +#: 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 enskilt " +"objekt." -#: 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." +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Redigera det här objektet (nytt fönster)" -#: core/validators.py:214 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Fyll i en giltig förkortning för en amerikansk delstat" +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "Som ovan, men öppnar administrationssidan i ett nytt fönster." + +#: 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/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." + +#: utils/dates.py:6 +msgid "Monday" +msgstr "Måndag" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "Tisdag" -#: 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." +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "Onsdag" -#: 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'." +#: utils/dates.py:6 +msgid "Thursday" +msgstr "Torsdag" -#: core/validators.py:255 -msgid "Please enter something for at least one field." -msgstr "Fyll i något i minst ett fält." +#: utils/dates.py:6 +msgid "Friday" +msgstr "Fredag" -#: 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" +#: utils/dates.py:7 +msgid "Saturday" +msgstr "Lördag" -#: 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" +#: utils/dates.py:7 +msgid "Sunday" +msgstr "Söndag" -#: 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" +#: utils/dates.py:14 +msgid "January" +msgstr "Januari" -#: core/validators.py:313 -msgid "Duplicate values are not allowed." -msgstr "Upprepade värden är inte tillåtna." +#: utils/dates.py:14 +msgid "February" +msgstr "Februari" -#: 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." +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "Mars" -#: core/validators.py:347 -msgid "Please enter a valid decimal number." -msgstr "Fyll i ett giltigt decimaltal." +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "April" -#: 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." +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "Maj" -#: 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." +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "Juni" -#: 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." +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "Juli" -#: 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." +#: utils/dates.py:15 +msgid "August" +msgstr "Augusti" -#: core/validators.py:376 -msgid "The format for this field is wrong." -msgstr "Formatet på det här fältet är fel." +#: utils/dates.py:15 +msgid "September" +msgstr "September" -#: core/validators.py:391 -msgid "This field is invalid." -msgstr "Det här fältet är ogiltigt." +#: utils/dates.py:15 +msgid "October" +msgstr "Oktober" -#: core/validators.py:426 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "Kunde inte hämta något från %s." +#: utils/dates.py:15 +msgid "November" +msgstr "November" -#: 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'" +#: utils/dates.py:16 +msgid "December" +msgstr "december" -#: 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\".)" +#: utils/dates.py:19 +msgid "jan" +msgstr "jan" -#: 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\".)" +#: utils/dates.py:19 +msgid "feb" +msgstr "feb" -#: 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\".)" +#: utils/dates.py:19 +msgid "mar" +msgstr "mars" -#: 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\".)" +#: utils/dates.py:19 +msgid "apr" +msgstr "apr" -#: 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\".)" +#: utils/dates.py:19 +msgid "may" +msgstr "maj" -#: 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\".)" +#: utils/dates.py:19 +msgid "jun" +msgstr "juni" -#: 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." +#: utils/dates.py:20 +msgid "jul" +msgstr "juli" -#: 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." +#: utils/dates.py:20 +msgid "aug" +msgstr "aug" -#: 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." +#: utils/dates.py:20 +msgid "sep" +msgstr "sept" -#: 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." +#: utils/dates.py:20 +msgid "oct" +msgstr "okt" -#: 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." +#: utils/dates.py:20 +msgid "nov" +msgstr "nov" -#: db/models/fields/__init__.py:385 -#, fuzzy -msgid "This field cannot be null." -msgstr "Det här fältet är ogiltigt." +#: utils/dates.py:20 +msgid "dec" +msgstr "dec" -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "Fyll i ett giltigt filnamn." +#: utils/dates.py:27 +msgid "Jan." +msgstr "jan" -#: db/models/fields/related.py:43 -#, python-format -msgid "Please enter a valid %s." -msgstr "Var god fyll i ett giltigt %s." +#: utils/dates.py:27 +msgid "Feb." +msgstr "feb" -#: db/models/fields/related.py:579 -#, fuzzy -msgid "Separate multiple IDs with commas." -msgstr " Separera flera ID:n med kommatecken." +#: utils/dates.py:28 +msgid "Aug." +msgstr "aug" -#: 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." +#: utils/dates.py:28 +msgid "Sept." +msgstr "sept" -#: 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." +#: utils/dates.py:28 +msgid "Oct." +msgstr "okt" -#: 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." +#: utils/dates.py:28 +msgid "Nov." +msgstr "nov" -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "Radbrytningar är inte tillåtna här." +#: utils/dates.py:28 +msgid "Dec." +msgstr "dec" -#: 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" +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "år" +msgstr[1] "år" -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "Den insända filen är tom." +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "månad" +msgstr[1] "månader" -#: 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." +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "vecka" +msgstr[1] "veckor" -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "Fyll i ett positivt heltal." +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "dag" +msgstr[1] "dagar" -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Fyll i ett heltal mellan 0 och 32 767." +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "timme" +msgstr[1] "timmar" -#: template/defaultfilters.py:379 -msgid "yes,no,maybe" -msgstr "ja,nej,kanske" +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minut" +msgstr[1] "minuter" -#~ msgid "Comment" -#~ msgstr "Kommentar" +#: utils/translation/trans_real.py:362 +msgid "DATE_FORMAT" +msgstr "" -#~ msgid "Comments" -#~ msgstr "Kommentarer" +#: utils/translation/trans_real.py:363 +msgid "DATETIME_FORMAT" +msgstr "" -#~ msgid "String (up to 50)" -#~ msgstr "Sträng (upp till 50)" +#: utils/translation/trans_real.py:364 +msgid "TIME_FORMAT" +msgstr "" -#~ msgid "label" -#~ msgstr "etikett" +#: utils/translation/trans_real.py:380 +msgid "YEAR_MONTH_FORMAT" +msgstr "" -#~ msgid "package" -#~ msgstr "paket" +#: utils/translation/trans_real.py:381 +msgid "MONTH_DAY_FORMAT" +msgstr "" -#~ msgid "packages" -#~ msgstr "paket" +#: template/defaultfilters.py:490 +msgid "yes,no,maybe" +msgstr "ja,nej,kanske" -#, fuzzy -#~ msgid "count" -#~ msgstr "innehåll" diff --git a/django/conf/locale/sv/LC_MESSAGES/djangojs.mo b/django/conf/locale/sv/LC_MESSAGES/djangojs.mo index c73aa30560..5daac63424 100644 Binary files a/django/conf/locale/sv/LC_MESSAGES/djangojs.mo and b/django/conf/locale/sv/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/sv/LC_MESSAGES/djangojs.po b/django/conf/locale/sv/LC_MESSAGES/djangojs.po index 4d0c1e9034..5abc8780d5 100644 --- a/django/conf/locale/sv/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/sv/LC_MESSAGES/djangojs.po @@ -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 , YEAR. +# Swedish translation of Django +# Copyright (C) 2005 +# This file is distributed under the same license as the Django package. # +# +# Robin Sonefors , 2005. +# Mikko Hellsing , 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 \n" -"Language-Team: Django Translators \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 \n" +"Language-Team: Django I18N \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/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: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 "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" + diff --git a/django/conf/locale/te/LC_MESSAGES/django.mo b/django/conf/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..29360bb660 Binary files /dev/null and b/django/conf/locale/te/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/te/LC_MESSAGES/django.po b/django/conf/locale/te/LC_MESSAGES/django.po new file mode 100644 index 0000000000..0057bf97de --- /dev/null +++ b/django/conf/locale/te/LC_MESSAGES/django.po @@ -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 , 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 \n" +"Language-Team: Telugu \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 "" +"

                                                                          By %s:

                                                                          \n" +"
                                                                            \n" +msgstr "

                                                                            %s తో:

                                                                            \n" +"
                                                                              \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "అన్నీ" + +#: 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 (500)" +msgstr "సర్వర్ తప్పు (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "తప్పు ఙరిగిండి . దానిని నిర్వాహనాధికారులు కి ఈ మెయిల్ చేయబడ్డడి,మీ ఓపిక కి ధన్యవాదములు" + +#: 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 forgotten your password?" +msgstr "మీరుపాస్ వర్డ మర్చిపోయారా? " + +#: 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" +"

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

                                                                              \n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "వస్తువు ఇడి చూడండి" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "వస్తువు" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "వస్తువు" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "వస్తువు" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "వస్తువు" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + +#: contrib/admin/templates/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 "అవును, కాదు , ఏమొ" + diff --git a/django/conf/locale/te/LC_MESSAGES/djangojs.mo b/django/conf/locale/te/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..c7c56427cb Binary files /dev/null and b/django/conf/locale/te/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/te/LC_MESSAGES/djangojs.po b/django/conf/locale/te/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..7f392fde25 --- /dev/null +++ b/django/conf/locale/te/LC_MESSAGES/djangojs.po @@ -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 , 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 \n" +"Language-Team: Telugu \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 "రేపు" + diff --git a/django/conf/locale/tr/LC_MESSAGES/django.mo b/django/conf/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..2415d26ee9 Binary files /dev/null and b/django/conf/locale/tr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/tr/LC_MESSAGES/django.po b/django/conf/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..daa299ca66 --- /dev/null +++ b/django/conf/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,2209 @@ +# 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. +# +# Bahadır Kandemir , 2006. +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-10-01 21:09+0300\n" +"PO-Revision-Date: 2006-10-01 21:19+0300\n" +"Last-Translator: Bahadır Kandemir \n" +"Language-Team: Turkish \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" + +#: db/models/manipulators.py:305 +#, 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:332 +#, python-format +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ış." + +#: db/models/fields/__init__.py:41 +#, 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:115 db/models/fields/__init__.py:266 +#: db/models/fields/__init__.py:560 db/models/fields/__init__.py:571 +#: forms/__init__.py:347 +msgid "This field is required." +msgstr "Bu alan gerekli." + +#: db/models/fields/__init__.py:349 +msgid "This value must be an integer." +msgstr "Bu değer tamsayı olmalı." + +#: db/models/fields/__init__.py:381 +msgid "This value must be either True or False." +msgstr "Bu değer True ya da False olabilir." + +#: db/models/fields/__init__.py:397 +msgid "This field cannot be null." +msgstr "Bu alan boş bırakılamaz." + +#: db/models/fields/__init__.py:424 core/validators.py:146 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "YYYY-AA-GG formatında tarih girin." + +#: db/models/fields/__init__.py:486 core/validators.py:155 +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:580 +msgid "Enter a valid filename." +msgstr "Geçerli bir dosya adı girin." + +#: db/models/fields/related.py:51 +#, python-format +msgid "Please enter a valid %s." +msgstr "Lütfen geçerli bir %s girin." + +#: db/models/fields/related.py:618 +msgid "Separate multiple IDs with commas." +msgstr "Birden fazla numarayı virgül ile ayırın." + +#: db/models/fields/related.py:620 +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: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] "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 "Czech" +msgstr "Çekçe" + +#: conf/global_settings.py:42 +msgid "Welsh" +msgstr "Galce" + +#: conf/global_settings.py:43 +msgid "Danish" +msgstr "Danca" + +#: conf/global_settings.py:44 +msgid "German" +msgstr "Almanca" + +#: conf/global_settings.py:45 +msgid "Greek" +msgstr "Yunanca" + +#: conf/global_settings.py:46 +msgid "English" +msgstr "İngilizce" + +#: conf/global_settings.py:47 +msgid "Spanish" +msgstr "İspanyolca" + +#: conf/global_settings.py:48 +msgid "Argentinean Spanish" +msgstr "Arjantin İspanyolcası" + +#: conf/global_settings.py:49 +msgid "Finnish" +msgstr "Fince" + +#: conf/global_settings.py:50 +msgid "French" +msgstr "Fransızca" + +#: conf/global_settings.py:51 +msgid "Galician" +msgstr "Galler Dili" + +#: conf/global_settings.py:52 +msgid "Hungarian" +msgstr "Macarca" + +#: conf/global_settings.py:53 +msgid "Hebrew" +msgstr "İbranice" + +#: conf/global_settings.py:54 +msgid "Icelandic" +msgstr "İzlanda dili" + +#: conf/global_settings.py:55 +msgid "Italian" +msgstr "İtalyanca" + +#: conf/global_settings.py:56 +msgid "Japanese" +msgstr "Japonca" + +#: conf/global_settings.py:57 +msgid "Dutch" +msgstr "Flamanca" + +#: conf/global_settings.py:58 +msgid "Norwegian" +msgstr "Norveç Dili" + +#: conf/global_settings.py:59 +msgid "Brazilian" +msgstr "Brezilya Dili" + +#: conf/global_settings.py:60 +msgid "Romanian" +msgstr "Romence" + +#: conf/global_settings.py:61 +msgid "Russian" +msgstr "Rusça" + +#: conf/global_settings.py:62 +msgid "Slovak" +msgstr "Slovakça" + +#: conf/global_settings.py:63 +msgid "Slovenian" +msgstr "Slovence" + +#: conf/global_settings.py:64 +msgid "Serbian" +msgstr "Sırpça" + +#: conf/global_settings.py:65 +msgid "Swedish" +msgstr "İsveççe" + +#: conf/global_settings.py:66 +msgid "Tamil" +msgstr "Tamilce" + +#: conf/global_settings.py:67 +msgid "Turkish" +msgstr "Türkçe" + +#: conf/global_settings.py:68 +msgid "Ukrainian" +msgstr "Ukraynaca" + +#: conf/global_settings.py:69 +msgid "Simplified Chinese" +msgstr "Basiteştirilmiş Çince" + +#: conf/global_settings.py:70 +msgid "Traditional Chinese" +msgstr "Gelenelsek Çince" + +#: forms/__init__.py:382 +#, python-format +msgid "Ensure your text is less than %s character." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Metnin %s karakterden az olmasına dikkat edin." +msgstr[1] "Metnin %s karakterden az olmasına dikkat edin." + +#: forms/__init__.py:387 +msgid "Line breaks are not allowed here." +msgstr "Burada birden fazla satır olamaz." + +#: forms/__init__.py:488 forms/__init__.py:561 forms/__init__.py:600 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Geçerli bir seçimde bulunun; %(choices)s değerleri içinde '%(data)s' yok." + +#: forms/__init__.py:662 core/validators.py:172 core/validators.py:401 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Dosya gönderilmedi. Formdaki kodlama türünü kontrol edin." + +#: forms/__init__.py:664 +msgid "The submitted file is empty." +msgstr "Gönderilen dosya boş." + +#: forms/__init__.py:720 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "-32,768 ve 32,767 arası bir sayı girin." + +#: forms/__init__.py:730 +msgid "Enter a positive number." +msgstr "Pozitif tamsayı girin." + +#: forms/__init__.py:740 +msgid "Enter a whole number between 0 and 32,767." +msgstr "0 ve 32,767 arası bir sayı girin." + +#: core/validators.py:63 +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:67 +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:71 +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:75 +msgid "Uppercase letters are not allowed here." +msgstr "Burada büyük harf kullanılamaz." + +#: core/validators.py:79 +msgid "Lowercase letters are not allowed here." +msgstr "Burada küçük harf kullanılamaz." + +#: core/validators.py:86 +msgid "Enter only digits separated by commas." +msgstr "Sadece virgülle ayrılmış sayılar girin." + +#: core/validators.py:98 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Virgülle ayrılmış geçerli e-posta adresleri girin." + +#: core/validators.py:102 +msgid "Please enter a valid IP address." +msgstr "Lütfen geçerli bir IP adresi girin." + +#: core/validators.py:106 +msgid "Empty values are not allowed here." +msgstr "Burada boş değer kullanılamaz." + +#: core/validators.py:110 +msgid "Non-numeric characters aren't allowed here." +msgstr "Burada numerik olmayan karakterler kullanılamaz." + +#: core/validators.py:114 +msgid "This value can't be comprised solely of digits." +msgstr "Bu alanda sadece rakam kullanılamaz." + +#: core/validators.py:119 +msgid "Enter a whole number." +msgstr "Sayı girin." + +#: core/validators.py:123 +msgid "Only alphabetical characters are allowed here." +msgstr "Burada sadece alfabetik karakterler kullanılabilir." + +#: core/validators.py:138 +msgid "Year must be 1900 or later." +msgstr "Yıl 1900 ya da sonrası olabilir." + +#: core/validators.py:142 +#, python-format +msgid "Invalid date: %s." +msgstr "Geçersiz tarih: %s" + +#: core/validators.py:151 +msgid "Enter a valid time in HH:MM format." +msgstr "SS:DD formatında geçerli bir saat girin." + +#: core/validators.py:160 +msgid "Enter a valid e-mail address." +msgstr "Geçerli bir e-posta adresi girin." + +#: core/validators.py:176 +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:183 +#, 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:187 +#, 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:195 +#, 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:199 +msgid "A valid URL is required." +msgstr "Geçerli bir URL gerekli." + +#: core/validators.py:213 +#, 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:220 +#, python-format +msgid "Badly formed XML: %s" +msgstr "Geçersiz XML kodu: %s" + +#: core/validators.py:230 +#, python-format +msgid "Invalid URL: %s" +msgstr "Geçersiz adres: %s" + +#: core/validators.py:234 core/validators.py:236 +#, python-format +msgid "The URL %s is a broken link." +msgstr "%s kırık bir link." + +#: core/validators.py:242 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Geçerli bir şehir kodu girin." + +#: 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] "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:263 +#, python-format +msgid "This field must match the '%s' field." +msgstr "Bu alan '%s' ile alanı ile uyuşmalı." + +#: core/validators.py:282 +msgid "Please enter something for at least one field." +msgstr "Lütfen en az bir alana giriş yapın." + +#: core/validators.py:291 core/validators.py:302 +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:309 +#, 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:321 +#, 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:340 +msgid "Duplicate values are not allowed." +msgstr "Tekrarlanan değerler kabul edilmez." + +#: core/validators.py:363 +#, python-format +msgid "This value must be a power of %s." +msgstr "Bu değer %s ya da kuvvetleri olabilir." + +#: core/validators.py:374 +msgid "Please enter a valid decimal number." +msgstr "Lütfen geçerli bir ondalık sayı girin." + +#: 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] "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: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] "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: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] "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:394 +#, 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:395 +#, 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:412 +msgid "The format for this field is wrong." +msgstr "Bu alandaki veri formatı hatalı." + +#: core/validators.py:427 +msgid "This field is invalid." +msgstr "Alan geçersiz." + +#: core/validators.py:463 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "%s içinden hiçbirşey aktarılamıyor." + +#: core/validators.py:466 +#, 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:499 +#, 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: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. satırda başlayan bazı kelimeler içerik olarak kabul edilmiyor. " +"(Satır, \"%(start)s\" ile başlıyor.)" + +#: 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. satırdaki \"%(attr)s\" özelliği geçersiz. (Satır, \"%(start)s\" " +"ile başlıyor.)" + +#: 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. satırdaki \"<%(tag)s>\" etiketi geçersiz. (Satır, \"%(start)s\" " +"ile başlıyor.)" + +#: 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. satırdaki bir etiket eksik ya da eklenmesi gereken özellikleri " +"var. (Satır, \"%(start)s\" ile başlıyor.)" + +#: 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. 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." + +#: 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/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" + +#: contrib/contenttypes/models.py:20 +msgid "python model class name" +msgstr "python model sınıfı" + +#: contrib/contenttypes/models.py:23 +msgid "content type" +msgstr "içerik türü" + +#: contrib/contenttypes/models.py:24 +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]'" +msgstr "'[algo]$[salt]$[hexdigest]' formatında" + +#: 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:16 +msgid "The two password fields didn't match." +msgstr "İki parola alanı uyuşmuyor." + +#: contrib/auth/forms.py:24 +msgid "A user with that username already exists." +msgstr "Bu isimde bir kullanıcı zaten var." + +#: contrib/auth/forms.py:52 +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:59 contrib/admin/views/decorators.py:10 +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/auth/forms.py:61 +msgid "This account is inactive." +msgstr "Bu hesap aktif değil." + +#: contrib/auth/forms.py:84 +msgid "" +"That e-mail address doesn't have an associated user acount. 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:116 +msgid "The two 'new password' fields didn't match." +msgstr "İki parola alanı uyuşmuyor." + +#: contrib/auth/forms.py:123 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Eski parolanız hatalı. Lütfen tekrar girin." + +#: 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/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/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 "" +"Ö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" + +#: 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/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 "" +"

                                                                              By %s:

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

                                                                                %s nesnesine göre:

                                                                                \n" +"
                                                                                  \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "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/filterspecs.py:143 +msgid "Yes" +msgstr "Evet" + +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "Hayır" + +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "Bilinmiyor" + +#: 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:230 +msgid "All dates" +msgstr "Tüm tarihler" + +#: contrib/admin/views/auth.py:17 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:22 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:28 +msgid "Add user" +msgstr "Kullanıcı ekle" + +#: 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:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 +msgid "and" +msgstr "ve" + +#: 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:473 +#, 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:478 +#, 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:511 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "\"%(obj)s\" isimli %(name)s silindi." + +#: contrib/admin/views/main.py:514 +msgid "Are you sure?" +msgstr "Emin misiniz?" + +#: contrib/admin/views/main.py:536 +#, python-format +msgid "Change history: %s" +msgstr "%s için değişiklik geçmişi:" + +#: contrib/admin/views/main.py:570 +#, python-format +msgid "Select %s" +msgstr "%s seç" + +#: contrib/admin/views/main.py:570 +#, python-format +msgid "Select %s to change" +msgstr "Değiştirilecek %s nesnesini seçin" + +#: contrib/admin/views/main.py:758 +msgid "Database error" +msgstr "Veritabanı hatası" + +#: 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 %r not found in app %r" +msgstr "%r modeli %r uygulamasında bulunamadı" + +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%s.%s` object" +msgstr "ilgili `%s.%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 `%s.%s` objects" +msgstr "ilgili `%s.%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: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/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 "Dökü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/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/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:11 +#, 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:20 +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 (500)" +msgstr "Sunucu Hatası (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"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:21 +msgid "View on site" +msgstr "Sitede görüntüle" + +#: contrib/admin/templates/admin/change_form.html:30 +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:48 +msgid "Ordering" +msgstr "Sıralama:" + +#: contrib/admin/templates/admin/change_form.html:51 +msgid "Order:" +msgstr "Sıra:" + +#: contrib/admin/templates/admin/login.html:22 +msgid "Have you forgotten your password?" +msgstr "Şifrenizi mi unuttunuz?" + +#: 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/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/admin/auth/user/add_form.html:18 +msgid "Password" +msgstr "Parola" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +msgid "Password (again)" +msgstr "Parola (tekrar)" + +#: 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/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 "Döküman kısayolları" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

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

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

                                                                                  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.

                                                                                  \n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Bu sayfa için dökü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 dökü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." + +#: template/defaultfilters.py:401 +msgid "yes,no,maybe" +msgstr "evet,hayır,olabilir" + diff --git a/django/conf/locale/tr/LC_MESSAGES/djangojs.mo b/django/conf/locale/tr/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..1119203925 Binary files /dev/null and b/django/conf/locale/tr/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/tr/LC_MESSAGES/djangojs.po b/django/conf/locale/tr/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..35928b9c03 --- /dev/null +++ b/django/conf/locale/tr/LC_MESSAGES/djangojs.po @@ -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 , 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 \n" +"Language-Team: Bahadır Kandemir \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" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo index 9fc04b9395..0d6bf90c0e 100644 Binary files a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo and b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/django/conf/locale/zh_CN/LC_MESSAGES/django.po index 7718514299..2552b677bd 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "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 \n" "Language-Team: Simplified Chinese \n" "MIME-Version: 1.0\n" @@ -1167,7 +1167,7 @@ msgstr "个人信息" #: contrib/auth/models.py:77 msgid "Permissions" -msgstr "许可" +msgstr "权限" #: contrib/auth/models.py:78 msgid "Important dates" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo index 983a8a7154..ec7580a862 100644 Binary files a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo and b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po index 1e9e7dbeb7..610e61d17a 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/djangojs.po @@ -3,22 +3,21 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , 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 \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2006-09-25 08:35+0800\n" +"Last-Translator: limodou \n" +"Language-Team: limodou \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 @@ msgstr "增加" #: 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 @@ msgstr "昨天" #: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 msgid "Tomorrow" msgstr "明天" + diff --git a/django/conf/project_template/settings.py b/django/conf/project_template/settings.py index d6f34a28db..cadb5146b7 100644 --- a/django/conf/project_template/settings.py +++ b/django/conf/project_template/settings.py @@ -9,15 +9,18 @@ ADMINS = ( 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: diff --git a/django/conf/project_template/urls.py b/django/conf/project_template/urls.py index 4483014173..402dd6536b 100644 --- a/django/conf/project_template/urls.py +++ b/django/conf/project_template/urls.py @@ -2,7 +2,7 @@ from django.conf.urls.defaults import * 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')), diff --git a/django/conf/urls/admin_password_reset.py b/django/conf/urls/admin_password_reset.py deleted file mode 100644 index afa078205a..0000000000 --- a/django/conf/urls/admin_password_reset.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.conf.urls.defaults import * - -urlpatterns = patterns('django.views', - (r'^$', 'registration.passwords.password_reset', {'is_admin_site' : True}), - (r'^done/$', 'registration.passwords.password_reset_done'), -) diff --git a/django/conf/urls/registration.py b/django/conf/urls/registration.py deleted file mode 100644 index 9b41e434f9..0000000000 --- a/django/conf/urls/registration.py +++ /dev/null @@ -1,19 +0,0 @@ -from django.conf.urls.defaults import * - -urlpatterns = patterns('', - (r'^login/$', 'django.contrib.auth.views.login'), - (r'^logout/$', 'django.contrib.auth.views.logout'), - (r'^login_another/$', 'django.contrib.auth.views.logout_then_login'), - - (r'^register/$', 'ellington.registration.views.registration.signup'), - (r'^register/(?P\w{32})/$', 'ellington.registration.views.registration.register_form'), - - (r'^profile/$', 'ellington.registration.views.profile.profile'), - (r'^profile/welcome/$', 'ellington.registration.views.profile.profile_welcome'), - (r'^profile/edit/$', 'ellington.registration.views.profile.edit_profile'), - - (r'^password_reset/$', 'django.contrib.auth.views.password_reset'), - (r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done'), - (r'^password_change/$', 'django.contrib.auth.views.password_change'), - (r'^password_change/done/$', 'django.contrib.auth.views.password_change_done'), -) diff --git a/django/contrib/admin/media/css/forms.css b/django/contrib/admin/media/css/forms.css index 468e06a8a2..0cfe2ff28e 100644 --- a/django/contrib/admin/media/css/forms.css +++ b/django/contrib/admin/media/css/forms.css @@ -57,4 +57,4 @@ fieldset.monospace textarea { font-family:"Bitstream Vera Sans Mono",Monaco,"Cou .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; } diff --git a/django/contrib/admin/media/css/global.css b/django/contrib/admin/media/css/global.css index 16c582d578..d50601bde7 100644 --- a/django/contrib/admin/media/css/global.css +++ b/django/contrib/admin/media/css/global.css @@ -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; } diff --git a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js index 3f6fb67bc7..b1504fc819 100644 --- a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js +++ b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js @@ -44,7 +44,7 @@ var DateTimeShortcuts = { var shortcuts_span = document.createElement('span'); inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); var now_link = document.createElement('a'); - now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());"); + now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());"); now_link.appendChild(document.createTextNode(gettext('Now'))); var clock_link = document.createElement('a'); clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');'); @@ -80,10 +80,10 @@ var DateTimeShortcuts = { quickElement('h2', clock_box, gettext('Choose a time')); time_list = quickElement('ul', clock_box, ''); time_list.className = 'timelist'; - quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());") - quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00');") - quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00');") - quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00');") + quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());") + quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00:00');") + quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00:00');") + quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00:00');") cancel_p = quickElement('p', clock_box, ''); cancel_p.className = 'calendar-cancel'; @@ -171,7 +171,6 @@ var DateTimeShortcuts = { 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); diff --git a/django/contrib/admin/media/js/core.js b/django/contrib/admin/media/js/core.js index d35bd29c1c..a17ac8a4d2 100644 --- a/django/contrib/admin/media/js/core.js +++ b/django/contrib/admin/media/js/core.js @@ -119,6 +119,10 @@ Date.prototype.getTwoDigitMinute = function() { return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); } +Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); +} + Date.prototype.getISODate = function() { return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate(); } @@ -127,6 +131,10 @@ Date.prototype.getHourMinute = function() { return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); } +Date.prototype.getHourMinuteSecond = function() { + return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); +} + // ---------------------------------------------------------------------------- // String object extensions // ---------------------------------------------------------------------------- diff --git a/django/contrib/admin/media/js/dateparse.js b/django/contrib/admin/media/js/dateparse.js index 51821c78e5..e1c870e146 100644 --- a/django/contrib/admin/media/js/dateparse.js +++ b/django/contrib/admin/media/js/dateparse.js @@ -169,8 +169,8 @@ var dateParsePatterns = [ handler: function(bits) { var d = new Date(); d.setYear(parseInt(bits[1])); - d.setDate(parseInt(bits[3], 10)); d.setMonth(parseInt(bits[2], 10) - 1); + d.setDate(parseInt(bits[3], 10)); return d; } }, diff --git a/django/contrib/admin/media/js/urlify.js b/django/contrib/admin/media/js/urlify.js index 90d11c435a..9b87113628 100644 --- a/django/contrib/admin/media/js/urlify.js +++ b/django/contrib/admin/media/js/urlify.js @@ -7,7 +7,7 @@ function URLify(s, num_chars) { "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 diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html new file mode 100644 index 0000000000..3d359ecf8f --- /dev/null +++ b/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -0,0 +1,52 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_modify adminmedia %} +{% block extrahead %}{{ block.super }} + +{% 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 %}{% trans 'Documentation' %} / {% trans 'Change password' %} / {% trans 'Log out' %}{% endblock %} +{% block breadcrumbs %}{% if not is_popup %} + +{% endif %}{% endblock %} +{% block content %}
                                                                                  +
                                                                                  {% block form_top %}{% endblock %} +
                                                                                  +{% if is_popup %}{% endif %} +{% if form.error_dict %} +

                                                                                  + {% blocktrans count form.error_dict.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} +

                                                                                  +{% endif %} + +

                                                                                  {% blocktrans with original.username|escape as username %}Enter a new password for the user {{ username }}.{% endblocktrans %}

                                                                                  + +
                                                                                  + +
                                                                                  + {{ form.password1.html_error_list }} + {{ form.password1 }} +
                                                                                  + +
                                                                                  + {{ form.password2.html_error_list }} + {{ form.password2 }} +

                                                                                  {% trans 'Enter the same password as above, for verification.' %}

                                                                                  +
                                                                                  + +
                                                                                  + +
                                                                                  + +
                                                                                  + + +
                                                                                  +
                                                                                  +{% endblock %} diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index b63604b268..d3e8c96b91 100644 --- a/django/contrib/admin/templates/admin/base.html +++ b/django/contrib/admin/templates/admin/base.html @@ -38,7 +38,10 @@
                                                                                  {% block pretitle %}{% endblock %} {% block content_title %}{% if title %}

                                                                                  {{ title|escape }}

                                                                                  {% endif %}{% endblock %} - {% block content %}{{ content }}{% endblock %} + {% block content %} + {% block object-tools %}{% endblock %} + {{ content }} + {% endblock %} {% block sidebar %}{% endblock %}
                                                                                  diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index b1fdc5ebdb..7e7b639139 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -16,11 +16,13 @@ {% endif %}{% endblock %} {% block content %}
                                                                                  +{% block object-tools %} {% if change %}{% if not is_popup %} {% endif %}{% endif %} +{% endblock %}
                                                                                  {% block form_top %}{% endblock %}
                                                                                  {% if is_popup %}{% endif %} diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index bd2304bd52..f50a73c934 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -7,9 +7,11 @@ {% block coltype %}flex{% endblock %} {% block content %}
                                                                                  +{% block object-tools %} {% if has_add_permission %} {% endif %} +{% endblock %}
                                                                                  {% block search %}{% search_form cl %}{% endblock %} {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %} diff --git a/django/contrib/admin/templates/admin/login.html b/django/contrib/admin/templates/admin/login.html index e5bda0f0e6..0773132cec 100644 --- a/django/contrib/admin/templates/admin/login.html +++ b/django/contrib/admin/templates/admin/login.html @@ -19,7 +19,7 @@
                                                                                  - {% comment %}{% trans 'Have you forgotten your password?' %}{% endcomment %} + {#{% trans 'Have you forgotten your password?' %}#}
                                                                                  diff --git a/django/contrib/admin/templates/admin/search_form.html b/django/contrib/admin/templates/admin/search_form.html index d9126c3ec5..445cca3089 100644 --- a/django/contrib/admin/templates/admin/search_form.html +++ b/django/contrib/admin/templates/admin/search_form.html @@ -7,7 +7,7 @@ {% if show_result_count %} - {% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} ({% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}) + {% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} ({% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}) {% endif %} {% for pair in cl.params.items %} {% ifnotequal pair.0 search_var %}{% endifnotequal %} diff --git a/django/contrib/admin/templates/admin_doc/model_detail.html b/django/contrib/admin/templates/admin_doc/model_detail.html index 44fc43e704..70133e26dd 100644 --- a/django/contrib/admin/templates/admin_doc/model_detail.html +++ b/django/contrib/admin/templates/admin_doc/model_detail.html @@ -35,7 +35,7 @@ {{ field.name }} {{ field.data_type }} - {% if field.verbose %}{{ field.verbose|escape }}{% endif %}{% if field.help_text %} - {{ field.help_text|escape }}{% endif %} + {% if field.verbose %}{{ field.verbose }}{% endif %}{% if field.help_text %} - {{ field.help_text }}{% endif %} {% endfor %} diff --git a/django/contrib/admin/templates/admin_doc/view_detail.html b/django/contrib/admin/templates/admin_doc/view_detail.html index ed90657361..ba90399358 100644 --- a/django/contrib/admin/templates/admin_doc/view_detail.html +++ b/django/contrib/admin/templates/admin_doc/view_detail.html @@ -8,7 +8,7 @@

                                                                                  {{ name }}

                                                                                  -

                                                                                  {{ summary|escape }}

                                                                                  +

                                                                                  {{ summary }}

                                                                                  {{ body }}

                                                                                  diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index 832b3562cd..5c678fba6f 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -84,22 +84,35 @@ def result_headers(cl): 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 + + 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": 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 '')} + 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 '%s' % (settings.ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val) def items_for_result(cl, result): first = True @@ -114,9 +127,14 @@ def items_for_result(cl, result): 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 @@ def items_for_result(cl, result): 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 = '%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: diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py index 7ba7bef74e..e708b876bd 100644 --- a/django/contrib/admin/templatetags/admin_modify.py +++ b/django/contrib/admin/templatetags/admin_modify.py @@ -11,6 +11,7 @@ import re 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 class_name_to_underscored(name): 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:: ' % (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_path include_admin_script = register.simple_tag(include_admin_script) def submit_row(context): @@ -160,8 +162,10 @@ class EditInlineNode(template.Node): context.push() if relation.field.rel.edit_inline == models.TABULAR: bound_related_object_class = TabularBoundRelatedObject - else: + elif relation.field.rel.edit_inline == models.STACKED: bound_related_object_class = StackedBoundRelatedObject + else: + 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 @@ def output_all(form_fields): 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 @@ def filter_interface_script_maybe(bound_field): if f.rel and isinstance(f.rel, models.ManyToManyRel) and f.rel.filter_interface: return '\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) diff --git a/django/contrib/admin/urls.py b/django/contrib/admin/urls.py index aaf9841e45..508bb3a1ca 100644 --- a/django/contrib/admin/urls.py +++ b/django/contrib/admin/urls.py @@ -29,6 +29,8 @@ urlpatterns = patterns('', # "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'), diff --git a/django/contrib/admin/views/auth.py b/django/contrib/admin/views/auth.py index d09075c2a1..bea1f8533c 100644 --- a/django/contrib/admin/views/auth.py +++ b/django/contrib/admin/views/auth.py @@ -1,10 +1,15 @@ -from django.contrib.auth.forms import UserCreationForm +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 import forms, template -from django.shortcuts import render_to_response +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() @@ -20,7 +25,7 @@ def user_add_stage(request): return HttpResponseRedirect('../%s/' % new_user.id) else: errors = new_data = {} - form = forms.FormWrapper(manipulator, new_data, errors) + form = oldforms.FormWrapper(manipulator, new_data, errors) return render_to_response('admin/auth/user/add_form.html', { 'title': _('Add user'), 'form': form, @@ -37,3 +42,36 @@ def user_add_stage(request): '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) diff --git a/django/contrib/admin/views/decorators.py b/django/contrib/admin/views/decorators.py index fce50909f0..9dfe651fe6 100644 --- a/django/contrib/admin/views/decorators.py +++ b/django/contrib/admin/views/decorators.py @@ -87,7 +87,7 @@ def staff_member_required(view_func): # 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() diff --git a/django/contrib/admin/views/doc.py b/django/contrib/admin/views/doc.py index b724cc5485..6adfb57c92 100644 --- a/django/contrib/admin/views/doc.py +++ b/django/contrib/admin/views/doc.py @@ -98,13 +98,13 @@ def view_index(request): 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,7 +127,7 @@ def view_detail(request, view): 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__) @@ -168,7 +168,7 @@ def model_detail(request, app_label, 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 @@ def model_detail(request, app_label, model_name): 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 @@ -211,7 +211,7 @@ def model_detail(request, app_label, model_name): # 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, @@ -235,7 +235,7 @@ model_detail = staff_member_required(model_detail) 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,13 +328,17 @@ def extract_views_from_urlpatterns(urlpatterns, base=''): """ 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 return views diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 7c942ca5b8..0e962adf18 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -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 @@ def quote(s): """ 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 @@ index = staff_member_required(never_cache(index)) 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()): @@ -283,7 +283,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po 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, @@ -302,7 +302,7 @@ def change_stage(request, app_label, model_name, object_id): 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()): @@ -313,8 +313,8 @@ def change_stage(request, app_label, model_name, object_id): 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() @@ -374,7 +374,7 @@ def change_stage(request, app_label, model_name, object_id): 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 = [] @@ -454,16 +454,19 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current 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(): @@ -490,7 +493,7 @@ def delete_stage(request, app_label, model_name, object_id): 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 @@ -527,7 +530,7 @@ def history(request, app_label, model_name, object_id): 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. @@ -655,10 +658,17 @@ class ChangeList(object): 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 @@ -727,6 +737,8 @@ class ChangeList(object): for bit in self.query.split(): 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 @@ -741,7 +753,7 @@ class ChangeList(object): 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: diff --git a/django/contrib/admin/views/template.py b/django/contrib/admin/views/template.py index 1684870842..a3b4538b10 100644 --- a/django/contrib/admin/views/template.py +++ b/django/contrib/admin/views/template.py @@ -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 @@ def template_validator(request): # 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 @@ def template_validator(request): 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): diff --git a/django/contrib/auth/__init__.py b/django/contrib/auth/__init__.py index a0097a01ed..dd3b8152e6 100644 --- a/django/contrib/auth/__init__.py +++ b/django/contrib/auth/__init__.py @@ -9,7 +9,7 @@ def load_backend(path): 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: diff --git a/django/contrib/auth/create_superuser.py b/django/contrib/auth/create_superuser.py index f42d30539e..2e93c35b93 100644 --- a/django/contrib/auth/create_superuser.py +++ b/django/contrib/auth/create_superuser.py @@ -46,6 +46,7 @@ def createsuperuser(username=None, email=None, password=None): 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: diff --git a/django/contrib/auth/decorators.py b/django/contrib/auth/decorators.py index 0102496a33..37e948f8fe 100644 --- a/django/contrib/auth/decorators.py +++ b/django/contrib/auth/decorators.py @@ -26,3 +26,11 @@ login_required.__doc__ = ( 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) + diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py index ad8d423ebf..023f9b43be 100644 --- a/django/contrib/auth/forms.py +++ b/django/contrib/auth/forms.py @@ -3,17 +3,18 @@ from django.contrib.auth import authenticate 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 UserCreationForm(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 = ( - forms.TextField(field_name='username', length=30, maxlength=30, is_required=True, + oldforms.TextField(field_name='username', length=30, maxlength=30, is_required=True, validator_list=[validators.isAlphaNumeric, self.isValidUsername]), - forms.PasswordField(field_name='password1', length=30, maxlength=60, is_required=True), - forms.PasswordField(field_name='password2', length=30, maxlength=60, is_required=True, - validator_list=[validators.AlwaysMatchesOtherField('password1', "The two password fields didn't match.")]), + 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): @@ -21,13 +22,13 @@ class UserCreationForm(forms.Manipulator): User.objects.get(username=field_data) except User.DoesNotExist: return - raise validators.ValidationError, 'A user with that username already exists.' + 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(forms.Manipulator): +class AuthenticationForm(oldforms.Manipulator): """ Base class for authenticating users. Extend this to get a form that accepts username/password logins. @@ -41,9 +42,9 @@ class AuthenticationForm(forms.Manipulator): """ 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 @@ -68,11 +69,11 @@ class AuthenticationForm(forms.Manipulator): 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]), ) @@ -81,7 +82,7 @@ class PasswordResetForm(forms.Manipulator): 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" @@ -105,24 +106,39 @@ class PasswordResetForm(forms.Manipulator): } 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() diff --git a/django/contrib/auth/handlers/modpython.py b/django/contrib/auth/handlers/modpython.py index e6719794a1..c7d921313d 100644 --- a/django/contrib/auth/handlers/modpython.py +++ b/django/contrib/auth/handlers/modpython.py @@ -22,6 +22,8 @@ def authenhandler(req, **kwargs): 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 @@ def authenhandler(req, **kwargs): 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): - return apache.OK + 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.HTTP_UNAUTHORIZED + return apache.OK else: - return apache.OK - else: - return apache.HTTP_UNAUTHORIZED + return apache.HTTP_UNAUTHORIZED + finally: + db.connection.close() diff --git a/django/contrib/auth/management.py b/django/contrib/auth/management.py index 1a07417f1d..3f52681747 100644 --- a/django/contrib/auth/management.py +++ b/django/contrib/auth/management.py @@ -16,7 +16,7 @@ def _get_all_permissions(opts): 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 @@ def create_permissions(app, created_models): 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) diff --git a/django/contrib/auth/middleware.py b/django/contrib/auth/middleware.py index a6a60780a7..42dc15a366 100644 --- a/django/contrib/auth/middleware.py +++ b/django/contrib/auth/middleware.py @@ -1,12 +1,9 @@ class LazyUser(object): - def __init__(self): - self._user = None - def __get__(self, request, obj_type=None): - if self._user is None: + if not hasattr(request, '_cached_user'): from django.contrib.auth import get_user - self._user = get_user(request) - return self._user + request._cached_user = get_user(request) + return request._cached_user class AuthenticationMiddleware(object): def process_request(self, request): diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py index 4077237993..4f4f0b7538 100644 --- a/django/contrib/auth/models.py +++ b/django/contrib/auth/models.py @@ -33,7 +33,7 @@ class Permission(models.Model): 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 @@ class User(models.Model): 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 change password form.")) + 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 @@ class User(models.Model): 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 @@ class User(models.Model): 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 @@ class AnonymousUser(object): 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 @@ class AnonymousUser(object): def is_anonymous(self): return True - + def is_authenticated(self): return False diff --git a/django/contrib/auth/views.py b/django/contrib/auth/views.py index 6882755787..fda17b91fb 100644 --- a/django/contrib/auth/views.py +++ b/django/contrib/auth/views.py @@ -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 @@ def login(request, template_name='registration/login.html'): 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 @@ def password_reset(request, is_admin_site=False, template_name='registration/pas 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 @@ def password_change(request, template_name='registration/password_change_form.ht 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) diff --git a/django/contrib/comments/models.py b/django/contrib/comments/models.py index a8aff1cfb3..90a84baaff 100644 --- a/django/contrib/comments/models.py +++ b/django/contrib/comments/models.py @@ -34,7 +34,7 @@ class CommentManager(models.Manager): """ 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) diff --git a/django/contrib/comments/views/comments.py b/django/contrib/comments/views/comments.py index c19c62fc88..12330afe41 100644 --- a/django/contrib/comments/views/comments.py +++ b/django/contrib/comments/views/comments.py @@ -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 @@ class PublicCommentManipulator(AuthenticationForm): 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 @@ class PublicCommentManipulator(AuthenticationForm): # 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 @@ class PublicCommentManipulator(AuthenticationForm): 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 @@ def post_comment(request): 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 @@ def post_free_comment(request): 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, diff --git a/django/contrib/contenttypes/management.py b/django/contrib/contenttypes/management.py index a9174584bc..3572d93049 100644 --- a/django/contrib/contenttypes/management.py +++ b/django/contrib/contenttypes/management.py @@ -3,10 +3,11 @@ Creates content types for all installed models. """ 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 @@ def create_contenttypes(app, created_models): 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() diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py index a95748a9a1..0a5e68f37e 100644 --- a/django/contrib/contenttypes/models.py +++ b/django/contrib/contenttypes/models.py @@ -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 @@ class ContentTypeManager(models.Manager): 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) diff --git a/django/contrib/csrf/middleware.py b/django/contrib/csrf/middleware.py index f6f78867dc..93a9484ca6 100644 --- a/django/contrib/csrf/middleware.py +++ b/django/contrib/csrf/middleware.py @@ -11,7 +11,7 @@ import md5 import re import itertools -_ERROR_MSG = "

                                                                                  403 Forbidden

                                                                                  Cross Site Request Forgery detected. Request aborted.

                                                                                  " +_ERROR_MSG = '

                                                                                  403 Forbidden

                                                                                  Cross Site Request Forgery detected. Request aborted.

                                                                                  ' _POST_FORM_RE = \ re.compile(r'(]*\bmethod=(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE) diff --git a/django/contrib/flatpages/views.py b/django/contrib/flatpages/views.py index 4ad24795f7..f386a52101 100644 --- a/django/contrib/flatpages/views.py +++ b/django/contrib/flatpages/views.py @@ -3,6 +3,7 @@ from django.template import loader, RequestContext 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 @@ def flatpage(request, url): c = RequestContext(request, { 'flatpage': f, }) - return HttpResponse(t.render(c)) + response = HttpResponse(t.render(c)) + populate_xheaders(request, response, FlatPage, f.id) + return response diff --git a/django/contrib/formtools/__init__.py b/django/contrib/formtools/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/formtools/preview.py b/django/contrib/formtools/preview.py new file mode 100644 index 0000000000..daecba7928 --- /dev/null +++ b/django/contrib/formtools/preview.py @@ -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\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__) diff --git a/django/contrib/formtools/templates/formtools/form.html b/django/contrib/formtools/templates/formtools/form.html new file mode 100644 index 0000000000..90da8b2b2b --- /dev/null +++ b/django/contrib/formtools/templates/formtools/form.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% block content %} + +{% if form.errors %}

                                                                                  Please correct the following errors

                                                                                  {% else %}

                                                                                  Submit

                                                                                  {% endif %} + + + +{{ form }} +
                                                                                  + +

                                                                                  + + +{% endblock %} diff --git a/django/contrib/formtools/templates/formtools/preview.html b/django/contrib/formtools/templates/formtools/preview.html new file mode 100644 index 0000000000..c7955d46e1 --- /dev/null +++ b/django/contrib/formtools/templates/formtools/preview.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} + +{% block content %} + +

                                                                                  Preview your submission

                                                                                  + + +{% for field in form %} + + + + +{% endfor %} +
                                                                                  {{ field.verbose_name }}:{{ field.data|escape }}
                                                                                  + +

                                                                                  Security hash: {{ hash_value }}

                                                                                  + +
                                                                                  +{% for field in form %}{{ field.as_hidden }} +{% endfor %} + + +

                                                                                  +
                                                                                  + +

                                                                                  Or edit it again

                                                                                  + +
                                                                                  + +{{ form }} +
                                                                                  + +

                                                                                  +
                                                                                  + +{% endblock %} diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py index b2d28a0ab4..a399e7eef1 100644 --- a/django/contrib/humanize/templatetags/humanize.py +++ b/django/contrib/humanize/templatetags/humanize.py @@ -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 @@ def ordinal(value): 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 @@ def intword(value): 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 @@ def apnumber(value): 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) diff --git a/django/contrib/localflavor/__init__.py b/django/contrib/localflavor/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/uk/__init__.py b/django/contrib/localflavor/uk/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/uk/forms.py b/django/contrib/localflavor/uk/forms.py new file mode 100644 index 0000000000..ddd033e1e0 --- /dev/null +++ b/django/contrib/localflavor/uk/forms.py @@ -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) diff --git a/django/contrib/localflavor/usa/__init__.py b/django/contrib/localflavor/usa/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/contrib/localflavor/usa/forms.py b/django/contrib/localflavor/usa/forms.py new file mode 100644 index 0000000000..9461f4fe80 --- /dev/null +++ b/django/contrib/localflavor/usa/forms.py @@ -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) diff --git a/django/contrib/localflavor/usa/us_states.py b/django/contrib/localflavor/usa/us_states.py new file mode 100644 index 0000000000..89124a4b69 --- /dev/null +++ b/django/contrib/localflavor/usa/us_states.py @@ -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', +} diff --git a/django/contrib/sessions/middleware.py b/django/contrib/sessions/middleware.py index 2337ad8a61..c134a9c9cf 100644 --- a/django/contrib/sessions/middleware.py +++ b/django/contrib/sessions/middleware.py @@ -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 @@ TEST_COOKIE_VALUE = 'worked' 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 @@ class SessionWrapper(object): def _get_session(self): # Lazily loads session from storage. + self.accessed = True try: return self._session_cache except AttributeError: @@ -55,7 +58,7 @@ class SessionWrapper(object): 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,12 +74,14 @@ class SessionMiddleware(object): 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 settings.SESSION_EXPIRE_AT_BROWSER_CLOSE: diff --git a/django/contrib/sitemaps/__init__.py b/django/contrib/sitemaps/__init__.py new file mode 100644 index 0000000000..44ede4460a --- /dev/null +++ b/django/contrib/sitemaps/__init__.py @@ -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 diff --git a/django/contrib/sitemaps/templates/sitemap.xml b/django/contrib/sitemaps/templates/sitemap.xml new file mode 100644 index 0000000000..16d9a0bbe0 --- /dev/null +++ b/django/contrib/sitemaps/templates/sitemap.xml @@ -0,0 +1,13 @@ + + +{% spaceless %} +{% for url in urlset %} + + {{ url.location|escape }} + {% if url.lastmod %}{{ url.lastmod|date:"Y-m-d" }}{% endif %} + {% if url.changefreq %}{{ url.changefreq }}{% endif %} + {% if url.priority %}{{ url.priority }}{% endif %} + +{% endfor %} +{% endspaceless %} + diff --git a/django/contrib/sitemaps/templates/sitemap_index.xml b/django/contrib/sitemaps/templates/sitemap_index.xml new file mode 100644 index 0000000000..a2bcce85dc --- /dev/null +++ b/django/contrib/sitemaps/templates/sitemap_index.xml @@ -0,0 +1,4 @@ + + +{% for location in sitemaps %}{{ location|escape }}{% endfor %} + diff --git a/django/contrib/sitemaps/views.py b/django/contrib/sitemaps/views.py new file mode 100644 index 0000000000..576e3d0bb8 --- /dev/null +++ b/django/contrib/sitemaps/views.py @@ -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') diff --git a/django/contrib/sites/management.py b/django/contrib/sites/management.py index 0e1a50227a..6831cab96d 100644 --- a/django/contrib/sites/management.py +++ b/django/contrib/sites/management.py @@ -7,9 +7,10 @@ from django.db.models import signals 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() diff --git a/django/contrib/syndication/feeds.py b/django/contrib/syndication/feeds.py index 119615a0b9..cdb4e8170f 100644 --- a/django/contrib/syndication/feeds.py +++ b/django/contrib/syndication/feeds.py @@ -78,6 +78,7 @@ class Feed(object): 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 @@ class Feed(object): 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 diff --git a/django/core/cache/__init__.py b/django/core/cache/__init__.py index 17008c4637..6da8e883b9 100644 --- a/django/core/cache/__init__.py +++ b/django/core/cache/__init__.py @@ -48,7 +48,7 @@ def get_cache(backend_uri): 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) diff --git a/django/core/cache/backends/dummy.py b/django/core/cache/backends/dummy.py index c68f33616c..4c64161538 100644 --- a/django/core/cache/backends/dummy.py +++ b/django/core/cache/backends/dummy.py @@ -6,8 +6,8 @@ class CacheClass(BaseCache): 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 @@ class CacheClass(BaseCache): pass def get_many(self, *args, **kwargs): - pass + return {} def has_key(self, *args, **kwargs): return False diff --git a/django/core/context_processors.py b/django/core/context_processors.py index 2ae9a6d972..f4b288dfc4 100644 --- a/django/core/context_processors.py +++ b/django/core/context_processors.py @@ -51,15 +51,19 @@ def request(request): 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) diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py index 62217acdce..ca48b301d4 100644 --- a/django/core/handlers/base.py +++ b/django/core/handlers/base.py @@ -26,7 +26,7 @@ class BaseHandler(object): 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 @@ class BaseHandler(object): 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 @@ class BaseHandler(object): 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 @@ class BaseHandler(object): # 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,39 +107,23 @@ class BaseHandler(object): 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) - - 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()) + # Return an HttpResponse that displays a friendly error message. + callback, param_dict = resolver.resolve500() + return callback(request, **param_dict) def _get_traceback(self, exc_info=None): "Helper function to return the traceback as a string" diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py index 07c98e3b59..5fc41a048b 100644 --- a/django/core/handlers/modpython.py +++ b/django/core/handlers/modpython.py @@ -16,14 +16,32 @@ class ModPythonRequest(http.HttpRequest): 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 = '' + try: + post = pformat(self.POST) + except: + post = '' + try: + cookies = pformat(self.COOKIES) + except: + cookies = '' + try: + meta = pformat(self.META) + except: + meta = '' return '' % \ - (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 @@ class ModPythonHandler(BaseHandler): # 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 @@ class ModPythonHandler(BaseHandler): 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,20 +157,20 @@ class ModPythonHandler(BaseHandler): dispatcher.send(signal=signals.request_finished) # Convert our custom HttpResponse object back into the mod_python req. - populate_apache_request(response, req) - return 0 # mod_python.apache.OK + 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() -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) + return 0 # mod_python.apache.OK def handler(req): # mod_python hooks into this function. diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index 5c48c9dace..71cfecd9a0 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -4,6 +4,11 @@ from django.dispatch import dispatcher 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 @@ STATUS_CODE_TEXT = { 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 = '' + try: + post = pformat(self.POST) + except: + post = '' + try: + cookies = pformat(self.COOKIES) + except: + cookies = '' + try: + meta = pformat(self.META) + except: + meta = '' return '' % \ - (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 @@ class WSGIRequest(http.HttpRequest): 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 @@ class WSGIHandler(BaseHandler): 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 @@ class WSGIHandler(BaseHandler): 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 @@ class WSGIHandler(BaseHandler): for c in response.cookies.values(): response_headers.append(('Set-Cookie', c.output(header=''))) start_response(status, response_headers) - return response.iterator + return response diff --git a/django/core/mail.py b/django/core/mail.py index da4cacbe29..b9966c2af0 100644 --- a/django/core/mail.py +++ b/django/core/mail.py @@ -3,7 +3,24 @@ 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 @@ class SafeMIMEText(MIMEText): 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,7 +79,12 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=settings.EMAIL_HOST 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 diff --git a/django/core/management.py b/django/core/management.py index a469c72901..25fb73d8ce 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -25,13 +25,14 @@ APP_ARGS = '[appname ...]' # 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 @@ def _get_table_list(): 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 @@ -103,7 +123,6 @@ def get_sql_create(app): known_models = set([model for model in _get_installed_models(_get_table_list()) if model not in app_models]) pending_references = {} - for model in app_models: output, references = _get_sql_model_create(model, known_models) final_output.extend(output) @@ -147,7 +166,7 @@ def _get_sql_model_create(model, known_models=set()): 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: @@ -167,7 +186,8 @@ def _get_sql_model_create(model, known_models=set()): 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 @@ -210,9 +230,10 @@ def _get_sql_for_pending_references(model, pending_references): # 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);' % \ + 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 @@ -232,18 +253,20 @@ def _get_many_to_many_sql_for_model(model): (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())), @@ -330,7 +353,15 @@ def get_sql_reset(app): 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 @@ -347,16 +378,18 @@ def get_sql_initial_data_for_model(model): 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 = [] @@ -364,11 +397,17 @@ def get_sql_initial_data(app): 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." @@ -398,37 +437,54 @@ get_sql_sequence_reset.help_doc = "Prints the SQL statements for resetting Postg 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() @@ -439,7 +495,7 @@ def syncdb(): # dispatcher events. for app_name in settings.INSTALLED_APPS: try: - __import__(app_name + '.management', '', '', ['']) + __import__(app_name + '.management', {}, {}, ['']) except ImportError: pass @@ -457,21 +513,22 @@ def syncdb(): pending_references = {} 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) @@ -480,7 +537,8 @@ def syncdb(): 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) @@ -488,28 +546,50 @@ def syncdb(): # 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." @@ -548,7 +628,7 @@ def diffsettings(): # 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 = [] @@ -562,72 +642,109 @@ def diffsettings(): 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 - -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] + 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 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] @@ -658,13 +775,16 @@ def _start_helper(app_or_project, name, directory, other_name=''): 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. @@ -707,7 +827,7 @@ def inspectdb(): 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' @@ -816,7 +936,8 @@ def get_validation_errors(outfile, app=None): 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 @@ -858,6 +979,12 @@ def get_validation_errors(outfile, app=None): 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: @@ -899,27 +1026,32 @@ def get_validation_errors(outfile, app=None): 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: @@ -949,7 +1081,8 @@ def get_validation_errors(outfile, app=None): 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 @@ -1007,10 +1140,12 @@ def get_validation_errors(outfile, app=None): 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.") @@ -1033,7 +1168,7 @@ def _check_for_validation_errors(app=None): 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 @@ -1051,7 +1186,10 @@ def runserver(addr, port, use_reloader=True): 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 = { @@ -1072,7 +1210,7 @@ def runserver(addr, port, use_reloader=True): 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" @@ -1112,6 +1250,11 @@ createcachetable.args = "[tablename]" 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. @@ -1154,6 +1297,151 @@ def runfcgi(args): 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 = { @@ -1161,8 +1449,10 @@ DEFAULT_ACTION_MAPPING = { 'createcachetable' : createcachetable, 'dbshell': dbshell, 'diffsettings': diffsettings, + 'dumpdata': dump_data, + 'flush': flush, 'inspectdb': inspectdb, - 'install': install, + 'loaddata': load_data, 'reset': reset, 'runfcgi': runfcgi, 'runserver': runserver, @@ -1170,6 +1460,8 @@ DEFAULT_ACTION_MAPPING = { '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, @@ -1178,6 +1470,7 @@ DEFAULT_ACTION_MAPPING = { 'startproject': startproject, 'syncdb': syncdb, 'validate': validate, + 'test':test, } NO_SQL_TRANSACTION = ( @@ -1185,7 +1478,6 @@ NO_SQL_TRANSACTION = ( 'createcachetable', 'dbshell', 'diffsettings', - 'install', 'reset', 'sqlindexes', 'syncdb', @@ -1228,8 +1520,19 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): 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. @@ -1256,8 +1559,10 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): 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](): @@ -1270,6 +1575,16 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): 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] @@ -1285,11 +1600,16 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): 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: @@ -1300,7 +1620,10 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): 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: @@ -1317,7 +1640,7 @@ def setup_environ(settings_mod): 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. diff --git a/django/core/paginator.py b/django/core/paginator.py index 026fe0a675..380808a3dd 100644 --- a/django/core/paginator.py +++ b/django/core/paginator.py @@ -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 - - 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 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] 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 @@ class ObjectPaginator(object): 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 @@ class ObjectPaginator(object): 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) diff --git a/django/core/serializers/__init__.py b/django/core/serializers/__init__.py index 75e087ee1b..494393f3cf 100644 --- a/django/core/serializers/__init__.py +++ b/django/core/serializers/__init__.py @@ -25,11 +25,18 @@ BUILTIN_SERIALIZERS = { "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 @@ def get_serializer(format): 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: diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py index e939c0c6e7..7dde2a4faf 100644 --- a/django/core/serializers/base.py +++ b/django/core/serializers/base.py @@ -11,7 +11,7 @@ from django.db import models class SerializationError(Exception): """Something bad happened during serialization.""" pass - + class DeserializationError(Exception): """Something bad happened during deserialization.""" pass @@ -20,15 +20,16 @@ class Serializer(object): """ 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) @@ -36,15 +37,18 @@ class Serializer(object): if field is obj._meta.pk: continue elif field.rel is None: - self.handle_field(obj, field) + if self.selected_fields is None or field.attname in self.selected_fields: + self.handle_field(obj, field) else: - self.handle_fk_field(obj, field) + 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 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 @@ class Serializer(object): 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 @@ class Deserializer(object): """ Abstract base deserializer class. """ - + def __init__(self, stream_or_string, **options): """ Init this serializer given a stream or a string @@ -123,39 +127,39 @@ class Deserializer(object): # 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 "" % 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 diff --git a/django/core/serializers/json.py b/django/core/serializers/json.py index a8b4259099..15770f160e 100644 --- a/django/core/serializers/json.py +++ b/django/core/serializers/json.py @@ -16,7 +16,7 @@ class Serializer(PythonSerializer): 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() @@ -48,4 +48,4 @@ class DateTimeAwareJSONEncoder(simplejson.JSONEncoder): elif isinstance(o, datetime.time): return o.strftime(self.TIME_FORMAT) else: - return super(self, DateTimeAwareJSONEncoder).default(o) \ No newline at end of file + return super(DateTimeAwareJSONEncoder, self).default(o) diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py index 4181bc7f2b..29ce6bf9bd 100644 --- a/django/core/serializers/python.py +++ b/django/core/serializers/python.py @@ -57,7 +57,7 @@ def Deserializer(object_list, **options): 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 @@ def Deserializer(object_list, **options): 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: diff --git a/django/core/serializers/pyyaml.py b/django/core/serializers/pyyaml.py new file mode 100644 index 0000000000..f45a511e79 --- /dev/null +++ b/django/core/serializers/pyyaml.py @@ -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 JSON. + """ + 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 JSON 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 + diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py index 09fff408cf..9e37f03cc2 100644 --- a/django/core/serializers/xml_serializer.py +++ b/django/core/serializers/xml_serializer.py @@ -57,10 +57,12 @@ class Serializer(base.Serializer): }) # 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") @@ -127,7 +129,8 @@ class Deserializer(base.Deserializer): pk = node.getAttribute("pk") if not pk: raise base.DeserializationError(" 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 +151,37 @@ class Deserializer(base.Deserializer): # 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 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 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): """ diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py index 4bd0e50e53..a16b8b675a 100644 --- a/django/core/servers/basehttp.py +++ b/django/core/servers/basehttp.py @@ -594,11 +594,14 @@ class AdminMediaHandler(object): 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): diff --git a/django/core/servers/fastcgi.py b/django/core/servers/fastcgi.py index dedc1f8ba1..649dd6942d 100644 --- a/django/core/servers/fastcgi.py +++ b/django/core/servers/fastcgi.py @@ -31,9 +31,11 @@ Optional Fcgi settings: (setting=value) 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 @@ FASTCGI_OPTIONS = { 'maxspare': 5, 'minspare': 2, 'maxchildren': 50, + 'maxrequests': 0, } def fastcgi_help(message=None): @@ -74,8 +77,9 @@ def fastcgi_help(message=None): 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,13 +106,20 @@ def runfastcgi(argset): '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 diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index 2f557b90a6..3f1004c4fb 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -15,12 +15,16 @@ class Resolver404(Http404): 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): @@ -106,7 +110,7 @@ class RegexURLPattern(object): 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) @@ -118,7 +122,7 @@ class RegexURLPattern(object): return self._callback mod_name, func_name = get_mod_func(self._callback_str) try: - self._callback = 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: @@ -129,7 +133,7 @@ class RegexURLPattern(object): def reverse(self, viewname, *args, **kwargs): mod_name, func_name = get_mod_func(viewname) try: - lookup_view = getattr(__import__(mod_name, '', '', ['']), func_name) + lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name) except (ImportError, AttributeError): raise NoReverseMatch if lookup_view != self.callback: @@ -170,7 +174,7 @@ class RegexURLResolver(object): 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) @@ -185,7 +189,7 @@ class RegexURLResolver(object): 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)) @@ -199,7 +203,7 @@ class RegexURLResolver(object): if not callable(lookup_view): mod_name, func_name = get_mod_func(lookup_view) try: - lookup_view = getattr(__import__(mod_name, '', '', ['']), func_name) + lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name) except (ImportError, AttributeError): raise NoReverseMatch for pattern in self.urlconf_module.urlpatterns: diff --git a/django/core/validators.py b/django/core/validators.py index 8f40ceb51a..bd7d790e04 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -8,12 +8,13 @@ validator will *always* be run, regardless of whether its associated 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/]+$') @@ -122,9 +123,30 @@ def isOnlyLetters(field_data, all_data): 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 isValidANSITime(field_data, all_data): 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 @@ def isWellFormedXmlFragment(field_data, all_data): isWellFormedXml('%s' % 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 @@ def hasNoProfanities(field_data, all_data): 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 @@ class RequiredIfOtherFieldGiven(RequiredIfOtherFieldsGiven): 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 @@ class RequiredIfOtherFieldEquals(object): 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 @@ class UniqueAmongstFieldsWithPrefix(object): 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 @@ class IsValidFloat(object): 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: diff --git a/django/core/xheaders.py b/django/core/xheaders.py index e173bcbca8..3beb930158 100644 --- a/django/core/xheaders.py +++ b/django/core/xheaders.py @@ -13,9 +13,10 @@ def populate_xheaders(request, response, model, object_id): """ 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) diff --git a/django/db/__init__.py b/django/db/__init__.py index f21ae6a727..4176b5aa79 100644 --- a/django/db/__init__.py +++ b/django/db/__init__.py @@ -8,7 +8,7 @@ if not settings.DATABASE_ENGINE: 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 @@ except ImportError, e: 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 diff --git a/django/db/backends/ado_mssql/base.py b/django/db/backends/ado_mssql/base.py index afe2d19981..8dcb98ce61 100644 --- a/django/db/backends/ado_mssql/base.py +++ b/django/db/backends/ado_mssql/base.py @@ -55,7 +55,7 @@ except ImportError: 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 @@ class DatabaseWrapper(local): 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_limit_offset_sql(limit, offset=None): 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_drop_foreignkey_sql(): 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', diff --git a/django/db/backends/ado_mssql/creation.py b/django/db/backends/ado_mssql/creation.py index 4d85d27ea5..5158ba02f9 100644 --- a/django/db/backends/ado_mssql/creation.py +++ b/django/db/backends/ado_mssql/creation.py @@ -21,6 +21,5 @@ DATA_TYPES = { 'SmallIntegerField': 'smallint', 'TextField': 'text', 'TimeField': 'time', - 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', } diff --git a/django/db/backends/dummy/base.py b/django/db/backends/dummy/base.py index 985fe96469..e36a99e982 100644 --- a/django/db/backends/dummy/base.py +++ b/django/db/backends/dummy/base.py @@ -20,6 +20,9 @@ class DatabaseWrapper: _commit = complain _rollback = complain + def __init__(self, **kwargs): + pass + def close(self): pass # close() @@ -33,6 +36,9 @@ get_date_extract_sql = complain 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 = {} diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index 23ea76316f..cbe080144c 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -10,45 +10,39 @@ try: except ImportError, e: from django.core.exceptions import ImproperlyConfigured raise ImproperlyConfigured, "Error loading MySQLdb module: %s" % e +if Database.version_info < (1,2,1,'final',2): + raise ImportError, "MySQLdb-1.2.1p2 or newer is required; you have %s" % MySQLdb.__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 - - 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()) - - 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) +# 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})') + +# 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. try: # Only exists in Python 2.4+ @@ -58,9 +52,11 @@ except ImportError: 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 +70,39 @@ class DatabaseWrapper(local): 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, } + 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 +113,16 @@ class DatabaseWrapper(local): 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 +165,9 @@ def get_limit_offset_sql(limit, offset=None): 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 +177,36 @@ def get_drop_foreignkey_sql(): 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', diff --git a/django/db/backends/mysql/client.py b/django/db/backends/mysql/client.py index f9d6297b8e..116074a9ce 100644 --- a/django/db/backends/mysql/client.py +++ b/django/db/backends/mysql/client.py @@ -3,12 +3,25 @@ import os 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) diff --git a/django/db/backends/mysql/creation.py b/django/db/backends/mysql/creation.py index 116b490124..22ed901653 100644 --- a/django/db/backends/mysql/creation.py +++ b/django/db/backends/mysql/creation.py @@ -25,6 +25,5 @@ DATA_TYPES = { 'SmallIntegerField': 'smallint', 'TextField': 'longtext', 'TimeField': 'time', - 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', } diff --git a/django/db/backends/mysql/introspection.py b/django/db/backends/mysql/introspection.py index 2c77f76ee3..7829457fa9 100644 --- a/django/db/backends/mysql/introspection.py +++ b/django/db/backends/mysql/introspection.py @@ -36,13 +36,14 @@ def get_relations(cursor, table_name): 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: diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index dfe2df11dc..d52ae33c2e 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -21,9 +21,10 @@ except ImportError: 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 @@ class DatabaseWrapper(local): 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_limit_offset_sql(limit, offset=None): 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_drop_foreignkey_sql(): 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', diff --git a/django/db/backends/oracle/creation.py b/django/db/backends/oracle/creation.py index d45ceb64f5..da65df172e 100644 --- a/django/db/backends/oracle/creation.py +++ b/django/db/backends/oracle/creation.py @@ -21,6 +21,5 @@ DATA_TYPES = { 'SmallIntegerField': 'smallint', 'TextField': 'long', 'TimeField': 'timestamp', - 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', } diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index 5355781e81..54be422ae2 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -20,14 +20,51 @@ except ImportError: # 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 @@ class DatabaseWrapper(local): 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_limit_offset_sql(limit, offset=None): 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_drop_foreignkey_sql(): 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 __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
                                                                                  _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)) diff --git a/django/db/backends/postgresql/creation.py b/django/db/backends/postgresql/creation.py index 65a804ec40..6c130f368e 100644 --- a/django/db/backends/postgresql/creation.py +++ b/django/db/backends/postgresql/creation.py @@ -25,6 +25,5 @@ DATA_TYPES = { 'SmallIntegerField': 'smallint', 'TextField': 'text', 'TimeField': 'time', - 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', } diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py index 9623e68354..e4724e46fb 100644 --- a/django/db/backends/postgresql_psycopg2/base.py +++ b/django/db/backends/postgresql_psycopg2/base.py @@ -11,10 +11,6 @@ except ImportError, e: from django.core.exceptions import ImproperlyConfigured raise ImproperlyConfigured, "Error loading psycopg2 module: %s" % e -# Register Unicode conversions -import psycopg2.extensions -psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) - DatabaseError = Database.DatabaseError try: @@ -24,14 +20,19 @@ except ImportError: # 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." @@ -44,19 +45,26 @@ class DatabaseWrapper(local): 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): @@ -71,23 +79,9 @@ def quote_name(name): 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() - -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() +dictfetchone = util.dictfetchone +dictfetchmany = util.dictfetchmany +dictfetchall = util.dictfetchall def get_last_insert_id(cursor, table_name, pk_name): cursor.execute("SELECT CURRVAL('\"%s_%s_seq\"')" % (table_name, pk_name)) @@ -112,6 +106,9 @@ def get_limit_offset_sql(limit, offset=None): def get_random_function_sql(): return "RANDOM()" +def get_deferrable_sql(): + return " DEFERRABLE INITIALLY DEFERRED" + def get_fulltext_search_sql(field_name): raise NotImplementedError @@ -121,6 +118,58 @@ def get_drop_foreignkey_sql(): 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
                                                                                  __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
                                                                                  _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', diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 68452e1363..4b8a1c64a8 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -4,10 +4,18 @@ SQLite3 backend for django. Requires pysqlite2 (http://pysqlite.org/). 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 @@ except ImportError: 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 @@ class DatabaseWrapper(local): 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_limit_offset_sql(limit, offset=None): 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_drop_foreignkey_sql(): 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) diff --git a/django/db/backends/sqlite3/creation.py b/django/db/backends/sqlite3/creation.py index e845179e64..77f570b2e8 100644 --- a/django/db/backends/sqlite3/creation.py +++ b/django/db/backends/sqlite3/creation.py @@ -24,6 +24,5 @@ DATA_TYPES = { 'SmallIntegerField': 'smallint', 'TextField': 'text', 'TimeField': 'time', - 'URLField': 'varchar(200)', 'USStateField': 'varchar(2)', } diff --git a/django/db/backends/util.py b/django/db/backends/util.py index 74d33f42ca..d8f86fef4f 100644 --- a/django/db/backends/util.py +++ b/django/db/backends/util.py @@ -17,7 +17,7 @@ class CursorDebugWrapper(object): 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 rev_typecast_boolean(obj, d): 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 dictfetchone(cursor): 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) diff --git a/django/db/models/__init__.py b/django/db/models/__init__.py index 0308dd047a..13832f95a3 100644 --- a/django/db/models/__init__.py +++ b/django/db/models/__init__.py @@ -50,4 +50,9 @@ class LazyDate(object): 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) diff --git a/django/db/models/base.py b/django/db/models/base.py index c9e9206321..be89d00adf 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -13,6 +13,7 @@ from django.dispatch import dispatcher 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 @@ class ModelBase(type): "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__')}) @@ -90,41 +91,74 @@ class Model(object): 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() - 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) + # 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: + 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): @@ -322,7 +356,7 @@ class Model(object): 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)) @@ -357,8 +391,9 @@ class Model(object): 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 @@ -376,24 +411,6 @@ class Model(object): 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) # ############################################ diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 49eb594838..781e4cb9e9 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -2,9 +2,11 @@ from django.db.models import signals 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 @@ -80,7 +82,7 @@ class Field(object): 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 +164,7 @@ class Field(object): 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 +178,13 @@ class Field(object): 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 +213,10 @@ class Field(object): 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 +225,7 @@ class Field(object): 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. @@ -324,6 +332,24 @@ class Field(object): 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): @@ -345,7 +371,7 @@ class AutoField(Field): 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 @@ -360,6 +386,9 @@ class AutoField(Field): 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 @@ -367,16 +396,21 @@ class BooleanField(Field): 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): @@ -388,10 +422,15 @@ class CharField(Field): 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 @@ -404,6 +443,8 @@ class DateField(Field): 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): @@ -453,14 +494,21 @@ class DateField(Field): 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): @@ -494,7 +542,7 @@ class DateTimeField(DateField): 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'] @@ -517,6 +565,11 @@ class DateTimeField(DateField): 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 @@ -526,11 +579,16 @@ class EmailField(CharField): 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 @@ -567,7 +625,7 @@ class FileField(Field): # 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 @@ -577,7 +635,7 @@ class FileField(Field): 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): @@ -590,19 +648,19 @@ class FileField(Field): 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)) @@ -618,7 +676,7 @@ class FilePathField(Field): 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 @@ -627,7 +685,7 @@ class FloatField(Field): 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): @@ -635,7 +693,7 @@ class ImageField(FileField): 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) @@ -646,12 +704,12 @@ class ImageField(FileField): 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: @@ -661,7 +719,12 @@ class ImageField(FileField): 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): @@ -669,7 +732,7 @@ class IPAddressField(Field): 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) @@ -679,23 +742,36 @@ class NullBooleanField(Field): 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): @@ -707,15 +783,20 @@ class SlugField(Field): 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 @@ -745,30 +826,45 @@ class TimeField(Field): 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): @@ -779,7 +875,7 @@ class XMLField(TextField): 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 @@ -792,4 +888,4 @@ class OrderingField(IntegerField): 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)] diff --git a/django/db/models/fields/generic.py b/django/db/models/fields/generic.py index 5f4de40e69..1ad8346e42 100644 --- a/django/db/models/fields/generic.py +++ b/django/db/models/fields/generic.py @@ -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 @@ -98,7 +98,7 @@ class GenericRelation(RelatedField, Field): 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 +117,7 @@ class GenericRelation(RelatedField, Field): 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) diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index aa232c07f3..fad9c164c1 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -2,10 +2,12 @@ from django.db import backend, transaction 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 @@ -256,8 +258,7 @@ class ForeignRelatedObjectsDescriptor(object): # 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 @@ def create_many_related_manager(superclass): # 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 @@ def create_many_related_manager(superclass): # *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 @@ class ManyRelatedObjectsDescriptor(object): 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 @@ class ReverseManyRelatedObjectsDescriptor(object): 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 @@ class ForeignKey(RelatedField, Field): 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 @@ class ForeignKey(RelatedField, Field): 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 @@ class ForeignKey(RelatedField, Field): 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 @@ class OneToOneField(RelatedField, IntegerField): 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 @@ class OneToOneField(RelatedField, IntegerField): 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 @@ class ManyToManyField(RelatedField, Field): 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 @@ class ManyToManyField(RelatedField, Field): 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 @@ class ManyToManyField(RelatedField, Field): 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, diff --git a/django/db/models/loading.py b/django/db/models/loading.py index 22f83bfd78..f4aff2438b 100644 --- a/django/db/models/loading.py +++ b/django/db/models/loading.py @@ -48,7 +48,7 @@ def get_app(app_label, emptyOK=False): 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: diff --git a/django/db/models/manager.py b/django/db/models/manager.py index 6005874516..b60eed262a 100644 --- a/django/db/models/manager.py +++ b/django/db/models/manager.py @@ -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 @@ class Manager(object): ####################### # 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() diff --git a/django/db/models/manipulators.py b/django/db/models/manipulators.py index b0ce48dec5..c624cb698b 100644 --- a/django/db/models/manipulators.py +++ b/django/db/models/manipulators.py @@ -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 @@ class ManipulatorDescriptor(object): 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 @@ class AutomaticManipulator(forms.Manipulator): # 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,14 +96,16 @@ class AutomaticManipulator(forms.Manipulator): 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: @@ -177,7 +179,7 @@ class AutomaticManipulator(forms.Manipulator): # 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 @@ class AutomaticManipulator(forms.Manipulator): # 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 @@ def manipulator_validator_unique_together(field_name_list, opts, self, field_dat # 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 @@ def manipulator_validator_unique_together(field_name_list, opts, self, field_dat 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} diff --git a/django/db/models/query.py b/django/db/models/query.py index 4ea3c6b0b0..d0593b4617 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -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 @@ QUERY_TERMS = ( # 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 @@ class QuerySet(object): 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. @@ -163,12 +168,16 @@ class QuerySet(object): 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 +187,8 @@ class QuerySet(object): 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 +196,31 @@ class QuerySet(object): 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,7 +228,16 @@ class QuerySet(object): 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." @@ -359,9 +396,9 @@ class QuerySet(object): 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 +432,7 @@ class QuerySet(object): 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 +486,10 @@ class QuerySet(object): # 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 +550,18 @@ class QuerySet(object): 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 +570,8 @@ class ValuesQuerySet(QuerySet): columns = [f.column for f in self.model._meta.fields] field_names = [f.attname for f in self.model._meta.fields] - 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 = connection.cursor() cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) while 1: rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE) @@ -545,7 +592,12 @@ class DateQuerySet(QuerySet): 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 +615,25 @@ class DateQuerySet(QuerySet): 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 +642,14 @@ class QOperator(object): 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 +703,11 @@ class QNot(Q): 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 +719,14 @@ def get_where_clause(lookup_type, table_prefix, field_name, value): 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 +734,33 @@ def get_where_clause(lookup_type, table_prefix, field_name, value): 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,7 +775,7 @@ def fill_table_cache(opts, select, tables, where, old_prefix, cache_tables_seen) 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 @@ -707,34 +801,35 @@ def parse_lookup(kwarg_items, opts): 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' - - 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) + 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 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 +861,7 @@ def lookup_inner(path, lookup_type, value, opts, table, column): 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,8 +921,14 @@ def lookup_inner(path, lookup_type, value, opts, table, column): new_opts = field.rel.to._meta new_column = new_opts.pk.column join_column = field.column - - raise FieldFound + 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 except FieldFound: # Match found, loop has been shortcut. pass @@ -925,18 +1026,26 @@ def delete_objects(seen_objs): 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): diff --git a/django/db/models/related.py b/django/db/models/related.py index ee3b916cf4..2c1dc5c516 100644 --- a/django/db/models/related.py +++ b/django/db/models/related.py @@ -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 @@ class RelatedObject(object): 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 @@ class RelatedObject(object): # 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 @@ class RelatedObject(object): 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 @@ class RelatedObject(object): # 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()) diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py index 1a617b5946..029c59fd3f 100644 --- a/django/dispatch/dispatcher.py +++ b/django/dispatch/dispatcher.py @@ -25,7 +25,6 @@ Internal attributes: 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 @@ __author__ = "Patrick K. O'Brien " __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 @@ def connect(receiver, signal=Any, sender=Any, weak=True): 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 @@ def getReceivers( sender = Any, signal = Any ): 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,30 +271,48 @@ def liveReceivers(receivers): 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 @@ def send(signal=Any, sender=Anonymous, *arguments, **named): # 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 @@ def send(signal=Any, sender=Anonymous, *arguments, **named): ) 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 _cleanupConnections(senderkey, signal): 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 _removeOldBackRefs(senderkey, signal, receiver, receivers): 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: diff --git a/django/forms/__init__.py b/django/forms/__init__.py index 730f7a54da..68d3d245a2 100644 --- a/django/forms/__init__.py +++ b/django/forms/__init__.py @@ -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 '' % 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 '
                                                                                  • %s
                                                                                  ' % '
                                                                                • '.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 "" % 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 '' % \ - (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 '' % \ - (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 '' % \ - (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 '' % \ - (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 = ['') - 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 }}
                                                                                  - {% 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
                                                                                    " - output = ['' % (self.ul_class and ' class="%s"' % self.ul_class or '')] - output.extend(['
                                                                                  • %s %s
                                                                                  • ' % (d['field'], d['label']) for d in self.datalist]) - output.append('
                                                                                  ') - 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': '' % \ - (self.get_id() + '_' + str(i), self.field_name, value, selected_html), - '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 = ['') - 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 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 = ['' % (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('
                                                                                • ' % \ - (self.get_id() + value , self.__class__.__name__, field_name, checked_html, - self.get_id() + value, choice)) - output.append('') - 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 '' % \ - (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 * diff --git a/django/http/__init__.py b/django/http/__init__.py index c4ac302ec5..0ae90c4921 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -52,7 +52,7 @@ def parse_file_upload(header_dict, post_data): 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 @@ class HttpResponse(object): 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() @@ -208,37 +208,42 @@ class HttpResponse(object): if path is not None: self.cookies[key]['path'] = path if domain is not None: - self.cookies[key]['domain'] = path + 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 @@ -246,7 +251,7 @@ class HttpResponse(object): 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): diff --git a/django/middleware/common.py b/django/middleware/common.py index d63b71fed7..6283214fad 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -2,6 +2,7 @@ from django.conf import settings from django import http from django.core.mail import mail_managers import md5 +import re class CommonMiddleware(object): """ @@ -61,11 +62,12 @@ class CommonMiddleware(object): # 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', '') 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 @@ def _is_ignorable_404(uri): 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) diff --git a/django/middleware/doc.py b/django/middleware/doc.py index 6600e588cd..48c155c392 100644 --- a/django/middleware/doc.py +++ b/django/middleware/doc.py @@ -7,11 +7,12 @@ class XViewMiddleware(object): """ 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 diff --git a/django/middleware/gzip.py b/django/middleware/gzip.py index 7d860abdb1..a7c74481d0 100644 --- a/django/middleware/gzip.py +++ b/django/middleware/gzip.py @@ -25,4 +25,5 @@ class GZipMiddleware(object): response.content = compress_string(response.content) response['Content-Encoding'] = 'gzip' + response['Content-Length'] = str(len(response.content)) return response diff --git a/django/newforms/__init__.py b/django/newforms/__init__.py new file mode 100644 index 0000000000..0d9c68f9e0 --- /dev/null +++ b/django/newforms/__init__.py @@ -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 * diff --git a/django/newforms/extras/__init__.py b/django/newforms/extras/__init__.py new file mode 100644 index 0000000000..a7f6a9b3f6 --- /dev/null +++ b/django/newforms/extras/__init__.py @@ -0,0 +1 @@ +from widgets import * diff --git a/django/newforms/extras/widgets.py b/django/newforms/extras/widgets.py new file mode 100644 index 0000000000..1011934fb8 --- /dev/null +++ b/django/newforms/extras/widgets.py @@ -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
                                                                                  s -- excluding the
                                                                                  ." + return self._html_output(u'%(label)s%(errors)s%(field)s%(help_text)s', u'%s', '', u'
                                                                                  %s', False) + + def as_ul(self): + "Returns this form rendered as HTML
                                                                                • s -- excluding the
                                                                                    ." + return self._html_output(u'
                                                                                  • %(errors)s%(label)s %(field)s%(help_text)s
                                                                                  • ', u'
                                                                                  • %s
                                                                                  • ', '', u' %s', False) + + def as_p(self): + "Returns this form rendered as HTML

                                                                                    s." + return self._html_output(u'

                                                                                    %(label)s %(field)s%(help_text)s

                                                                                    ', u'

                                                                                    %s

                                                                                    ', '

                                                                                    ', 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 . + """ + return self.as_widget(TextInput(), attrs) + + def as_textarea(self, attrs=None): + "Returns a string of HTML for representing this as a ' % (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'' % 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'' % 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'' % (escape(option_value), selected_html, escape(smart_unicode(option_label)))) + output.append(u'') + 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'') + 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 ." + 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'' % (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'' % 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
                                                                                      for this set of radio fields." + return u'
                                                                                        \n%s\n
                                                                                      ' % u'\n'.join([u'
                                                                                    • %s
                                                                                    • ' % 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 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'
                                                                                        '] + 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'
                                                                                      • ' % (rendered_cb, escape(smart_unicode(option_label)))) + output.append(u'
                                                                                      ') + 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 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] diff --git a/django/oldforms/__init__.py b/django/oldforms/__init__.py new file mode 100644 index 0000000000..56101984f5 --- /dev/null +++ b/django/oldforms/__init__.py @@ -0,0 +1,1015 @@ +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, 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 = {} + self.prepare(new_data) + 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=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 + + 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: + # 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 + + 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 '' % 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 '
                                                                                      • %s
                                                                                      ' % '
                                                                                    • '.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 "" % 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 + # 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() + 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('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 '' % \ + (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 '' % \ + (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 '' % \ + (self.get_id(), self.field_name, escape(data)) + +class CheckboxField(FormField): + 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 = is_required + 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 '' % \ + (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 = ['') + 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 }}
                                                                                      + {% 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
                                                                                        " + output = ['' % (self.ul_class and ' class="%s"' % self.ul_class or '')] + output.extend(['
                                                                                      • %s %s
                                                                                      • ' % (d['field'], d['label']) for d in self.datalist]) + output.append('
                                                                                      ') + 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': '' % \ + (self.get_id() + '_' + str(i), self.field_name, value, selected_html), + '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 = ['') + 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 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 = ['' % (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('
                                                                                    • ' % \ + (self.get_id() + escape(value), self.__class__.__name__, field_name, checked_html, + self.get_id() + escape(value), choice)) + output.append('
                                                                                    ') + 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 '' % \ + (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+2, max_digits+2, 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 + return data + 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 + + 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): + if data: + return data.split(',') + else: + return [] + 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 diff --git a/django/shortcuts/__init__.py b/django/shortcuts/__init__.py index 76d54917ad..be2155bb09 100644 --- a/django/shortcuts/__init__.py +++ b/django/shortcuts/__init__.py @@ -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 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 return obj_list diff --git a/django/template/__init__.py b/django/template/__init__.py index ba7ca4c02b..0d8990a42b 100644 --- a/django/template/__init__.py +++ b/django/template/__init__.py @@ -66,6 +66,7 @@ __all__ = ('Template', 'Context', 'RequestContext', 'compile_string') TOKEN_TEXT = 0 TOKEN_VAR = 1 TOKEN_BLOCK = 2 +TOKEN_COMMENT = 3 # template syntax constants FILTER_SEPARATOR = '|' @@ -75,6 +76,8 @@ BLOCK_TAG_START = '{%' 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 @@ ALLOWED_VARIABLE_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01 UNKNOWN_SOURCE="<unknown source>" # 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 @@ class TemplateDoesNotExist(Exception): 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 @@ class StringOrigin(Origin): return self.source class Template(object): - def __init__(self, template_string, origin=None): + def __init__(self, template_string, origin=None, name=''): "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 @@ def compile_string(template_string, origin): 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 @@ class Lexer(object): 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 @@ class TokenParser(object): 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 @@ class FilterExpression(object): 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 @@ class FilterExpression(object): 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 @@ class FilterExpression(object): 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 @@ def resolve_variable(path, context): (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 @@ def resolve_variable(path, context): 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 @@ class VariableNode(Node): 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 @@ class Library(object): 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 @@ class Library(object): 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 @@ class Library(object): 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 @@ class Library(object): 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 @@ def get_library(module_name): 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: diff --git a/django/template/context.py b/django/template/context.py index 6d9efdc7ec..25397b0e1a 100644 --- a/django/template/context.py +++ b/django/template/context.py @@ -49,6 +49,9 @@ class Context(object): 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 @@ def get_standard_processors(): 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: diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index a2e9d2f405..a025365c90 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -8,6 +8,38 @@ import random as random_module 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 @@ register = Library() 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 ``&`` entities" from django.utils.html import fix_ampersands return fix_ampersands(value) - -def floatformat(text): - """ - Displays a floating point number as 34.2 (with one decimal place) -- but - only if there's a point to be displayed +fix_ampersands = stringfilter(fix_ampersands) + +def floatformat(text, arg=-1): + """ + 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 - else: + if not m and d < 0: return '%d' % int(f) + else: + formatstr = '%%.%df' % abs(d) + return formatstr % f def linenumbers(value): "Displays text with line numbers" @@ -51,22 +104,26 @@ def linenumbers(value): 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 @@ def stringformat(value, arg): 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 @@ def truncatewords(value, arg): 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 @@ def urlizetrunc(value, limit): """ 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 @@ def wordwrap(value, arg): 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 @@ def ljust(value, arg): 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 @@ def rjust(value, arg): 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 @@ def escape(value): "Escapes a string's HTML" from django.utils.html import escape return escape(value) +escape = stringfilter(escape) def linebreaks(value): "Converts newlines into

                                                                                    and
                                                                                    s" from django.utils.html import linebreaks return linebreaks(value) +linebreaks = stringfilter(linebreaks) def linebreaksbr(value): "Converts newlines into
                                                                                    s" return value.replace('\n', '
                                                                                    ') +linebreaksbr = stringfilter(linebreaksbr) def removetags(value, tags): "Removes a space separated list of [X]HTML tags from the output" @@ -189,13 +279,13 @@ def removetags(value, tags): 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 first(value): 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 @@ -421,7 +511,11 @@ def filesizeformat(bytes): 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: @@ -512,6 +606,7 @@ register.filter(timesince) register.filter(timeuntil) register.filter(title) register.filter(truncatewords) +register.filter(truncatewords_html) register.filter(unordered_list) register.filter(upper) register.filter(urlencode) diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 0a4fe33d82..ed870047b1 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -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 @@ class CommentNode(Node): 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 @@ class ForNode(Node): 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 @@ class ForNode(Node): 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 @@ class RegroupNode(Node): 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 @@ class SsiNode(Node): 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 @@ class TemplateTagNode(Node): '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 @@ class TemplateTagNode(Node): 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 @@ def cycle(parser, token): 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 @@ def cycle(parser, token): cycle = register.tag(cycle) def debug(parser, token): + """ + Output a whole load of debugging information, including the current context and imported modules. + + Sample usage:: + +

                                                                                    +            {% debug %}
                                                                                    +        
                                                                                    + """ return DebugNode() debug = register.tag(debug) @@ -501,21 +547,6 @@ def do_for(parser, token): 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 @@ def do_ifequal(parser, token, negate): #@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 @@ def ifchanged(parser, token): """ 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. -

                                                                                    Archive for {{ year }}

                                                                                    + 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 %}

                                                                                    {{ date|date:"F" }}

                                                                                    {% endifchanged %} - {{ date|date:"j" }} - {% endfor %} +

                                                                                    Archive for {{ year }}

                                                                                    + + {% for date in days %} + {% ifchanged %}

                                                                                    {{ date|date:"F" }}

                                                                                    {% endifchanged %} + {{ date|date:"j" }} + {% 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 @@ def templatetag(parser, token): ``closevariable`` ``}}`` ``openbrace`` ``{`` ``closebrace`` ``}`` + ``opencomment`` ``{#`` + ``closecomment`` ``#}`` ================== ======= """ bits = token.contents.split() @@ -837,6 +897,51 @@ def templatetag(parser, token): 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): """ diff --git a/django/template/loader.py b/django/template/loader.py index 60f24554f1..03e6f8d49d 100644 --- a/django/template/loader.py +++ b/django/template/loader.py @@ -76,14 +76,16 @@ def get_template(template_name): 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): """ diff --git a/django/template/loader_tags.py b/django/template/loader_tags.py index 7f22f207b6..4439e0b010 100644 --- a/django/template/loader_tags.py +++ b/django/template/loader_tags.py @@ -51,13 +51,13 @@ class ExtendsNode(Node): 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 @@ def do_block(parser, token): 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) diff --git a/django/template/loaders/app_directories.py b/django/template/loaders/app_directories.py index 8a9bfef4b6..c4e91df929 100644 --- a/django/template/loaders/app_directories.py +++ b/django/template/loaders/app_directories.py @@ -15,9 +15,9 @@ for app in settings.INSTALLED_APPS: 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') diff --git a/django/templatetags/__init__.py b/django/templatetags/__init__.py index 62374577ea..9204535abb 100644 --- a/django/templatetags/__init__.py +++ b/django/templatetags/__init__.py @@ -2,6 +2,6 @@ from django.conf import settings for a in settings.INSTALLED_APPS: try: - __path__.extend(__import__(a + '.templatetags', '', '', ['']).__path__) + __path__.extend(__import__(a + '.templatetags', {}, {}, ['']).__path__) except ImportError: pass diff --git a/django/test/__init__.py b/django/test/__init__.py new file mode 100644 index 0000000000..554e72bad3 --- /dev/null +++ b/django/test/__init__.py @@ -0,0 +1,6 @@ +""" +Django Unit Test and Doctest framework. +""" + +from django.test.client import Client +from django.test.testcases import TestCase diff --git a/django/test/client.py b/django/test/client.py new file mode 100644 index 0000000000..682dd01261 --- /dev/null +++ b/django/test/client.py @@ -0,0 +1,248 @@ +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() + ]) + 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) diff --git a/django/test/doctest.py b/django/test/doctest.py new file mode 100644 index 0000000000..3b364f0a75 --- /dev/null +++ b/django/test/doctest.py @@ -0,0 +1,2669 @@ +# Module doctest. +# Released to the public domain 16-Jan-2001, by Tim Peters (tim@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 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 = '' +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 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 ('' % + (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 + (?:^(?P [ ]*) >>> .*) # PS1 line + (?:\n [ ]* \.\.\. .*)*) # PS2 lines + \n? + # Want consists of any non-blank lines that do not start with PS1. + (?P (?:(?![ ]*$) # 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 Traceback\ \( + (?: most\ recent\ call\ last + | innermost\ last + ) \) : + ) + \s* $ # toss trailing whitespace on the header. + (?P .*?) # don't blink: absorb stuff until... + ^ (?P \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=''): + """ + 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=''): + """ + 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 = '' % (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'[\w\.]+)' + r'\[(?P\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 + + # 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 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 s are being used, then replace blank lines + # with 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: + + >>> 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 : + >>> print 'foo\n\nbar\n' + foo + + bar + + """, + + "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() diff --git a/django/test/signals.py b/django/test/signals.py new file mode 100644 index 0000000000..40748ff4fe --- /dev/null +++ b/django/test/signals.py @@ -0,0 +1 @@ +template_rendered = object() \ No newline at end of file diff --git a/django/test/simple.py b/django/test/simple.py new file mode 100644 index 0000000000..200f150594 --- /dev/null +++ b/django/test/simple.py @@ -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 diff --git a/django/test/testcases.py b/django/test/testcases.py new file mode 100644 index 0000000000..2bfb9a733a --- /dev/null +++ b/django/test/testcases.py @@ -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'(?= 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() diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py index 632e804f26..e924e4edbc 100644 --- a/django/utils/datastructures.py +++ b/django/utils/datastructures.py @@ -14,7 +14,13 @@ class MergeDict(object): 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 @@ class MergeDict(object): 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 @@ class SortedDict(dict): 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 @@ class SortedDict(dict): 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 initialising 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 @@ class MultiValueDict(dict): "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): """ diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py index 0890a81a81..a558e3a69f 100644 --- a/django/utils/dateformat.py +++ b/django/utils/dateformat.py @@ -11,12 +11,13 @@ Usage: >>> """ -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'(? 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 @@ class TimeFormat(Formatter): 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 @@ class DateFormat(TimeFormat): 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 @@ class DateFormat(TimeFormat): 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'" diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py index 2eb27a40b7..9397789d6a 100644 --- a/django/utils/feedgenerator.py +++ b/django/utils/feedgenerator.py @@ -40,7 +40,7 @@ class SyndicationFeed(object): "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 @@ class SyndicationFeed(object): '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 @@ class SyndicationFeed(object): 'unique_id': unique_id, 'enclosure': enclosure, 'categories': categories or (), + 'item_copyright': item_copyright, }) def num_items(self): @@ -128,6 +130,8 @@ class RssFeed(SyndicationFeed): 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 @@ class Atom1Feed(SyndicationFeed): 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 @@ class Atom1Feed(SyndicationFeed): 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 diff --git a/django/utils/functional.py b/django/utils/functional.py index d1514d5728..e3c0a3c76b 100644 --- a/django/utils/functional.py +++ b/django/utils/functional.py @@ -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: diff --git a/django/utils/itercompat.py b/django/utils/itercompat.py new file mode 100644 index 0000000000..370988bedb --- /dev/null +++ b/django/utils/itercompat.py @@ -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 diff --git a/django/utils/simplejson/LICENSE.txt b/django/utils/simplejson/LICENSE.txt index 90251a9f62..1fa4fd5ba2 100644 --- a/django/utils/simplejson/LICENSE.txt +++ b/django/utils/simplejson/LICENSE.txt @@ -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 diff --git a/django/utils/simplejson/__init__.py b/django/utils/simplejson/__init__.py index f88329b950..15b7173976 100644 --- a/django/utils/simplejson/__init__.py +++ b/django/utils/simplejson/__init__.py @@ -27,6 +27,21 @@ Encoding basic Python object hierarchies:: >>> 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 @@ Extending JSONEncoder:: ['[', '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.decoder import JSONDecoder 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 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 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 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 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 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, 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 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, 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): """ diff --git a/django/utils/simplejson/decoder.py b/django/utils/simplejson/decoder.py index 684af8c9ad..66f68a200b 100644 --- a/django/utils/simplejson/decoder.py +++ b/django/utils/simplejson/decoder.py @@ -127,6 +127,7 @@ def JSONObject(match, context, _w=WHITESPACE.match): 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 @@ def JSONObject(match, context, _w=WHITESPACE.match): 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 @@ def JSONArray(match, context, _w=WHITESPACE.match): 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) diff --git a/django/utils/simplejson/encoder.py b/django/utils/simplejson/encoder.py index bb1aba09f0..c83c6873eb 100644 --- a/django/utils/simplejson/encoder.py +++ b/django/utils/simplejson/encoder.py @@ -3,11 +3,11 @@ Implementation of JSONEncoder """ 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 attack + '/': '\\/', '\\': '\\\\', '"': '\\"', '\b': '\\b', @@ -16,31 +16,31 @@ ESCAPE_DCT = { '\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): """ @@ -90,8 +90,11 @@ class JSONEncoder(object): 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 @@ class JSONEncoder(object): 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,6 +135,13 @@ class JSONEncoder(object): 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: @@ -134,14 +153,25 @@ class JSONEncoder(object): 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 @@ class JSONEncoder(object): 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 @@ class JSONEncoder(object): 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 @@ class JSONEncoder(object): 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] diff --git a/django/utils/simplejson/jsonfilter.py b/django/utils/simplejson/jsonfilter.py new file mode 100644 index 0000000000..d02ae2033a --- /dev/null +++ b/django/utils/simplejson/jsonfilter.py @@ -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) diff --git a/django/utils/simplejson/scanner.py b/django/utils/simplejson/scanner.py index c2e9b6eb89..64f4999fb5 100644 --- a/django/utils/simplejson/scanner.py +++ b/django/utils/simplejson/scanner.py @@ -3,7 +3,7 @@ Iterator based sre token scanner """ 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'] diff --git a/django/utils/text.py b/django/utils/text.py index 7df9bc03b7..1c1c456e2d 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -8,17 +8,28 @@ capfirst = lambda x: x and x[0].upper() + x[1:] 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.splitlines() + 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 @@ def truncate_words(s, num): 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 += '' % 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,7 +165,8 @@ def compress_string(s): 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 @@ def javascript_quote(s): 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('"', '"') return str(ustring_re.sub(fix, s)) smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)') diff --git a/django/views/debug.py b/django/views/debug.py index 6934360afd..77b6c2fac2 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -4,7 +4,7 @@ from django.utils.html import escape 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 @@ def technical_500_response(request, exc_type, exc_value, tb): 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 @@ def technical_500_response(request, exc_type, exc_value, tb): '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 @@ def technical_404_response(request, exception): # 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 technical_404_response(request, exception): 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 @@ TECHNICAL_500_TEMPLATE = """ - {{ exception_type }} at {{ request.path }} + {{ exception_type }} at {{ request.path|escape }}