summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2006-06-19 15:23:57 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2006-06-19 15:23:57 +0000
commitadf4b9311d5d64a2bdd58da50271c121ea22e397 (patch)
treea69b3b023595cf1ce67a14c4c1ecd3290d94088e
parente976ed1f7910fad03704f88853c5c5b36cbab134 (diff)
downloaddjango-attic/multi-auth.tar.gz
multi-auth: Merged to [3151]archive/attic/multi-authattic/multi-auth
git-svn-id: http://code.djangoproject.com/svn/django/branches/multi-auth@3152 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS1
-rw-r--r--django/conf/__init__.py6
-rw-r--r--django/conf/locale/fr/LC_MESSAGES/django.mobin32926 -> 32921 bytes
-rw-r--r--django/conf/locale/fr/LC_MESSAGES/django.po4
-rw-r--r--django/conf/locale/he/LC_MESSAGES/django.mobin35143 -> 36826 bytes
-rw-r--r--django/conf/locale/he/LC_MESSAGES/django.po2553
-rw-r--r--django/conf/locale/he/LC_MESSAGES/djangojs.mobin1625 -> 1626 bytes
-rw-r--r--django/conf/locale/he/LC_MESSAGES/djangojs.po3
-rw-r--r--django/conf/locale/pl/LC_MESSAGES/django.mobin13525 -> 23926 bytes
-rw-r--r--django/conf/locale/pl/LC_MESSAGES/django.po305
-rw-r--r--django/conf/locale/ru/LC_MESSAGES/django.mobin29509 -> 31822 bytes
-rw-r--r--django/conf/locale/ru/LC_MESSAGES/django.po76
-rw-r--r--django/conf/locale/sk/LC_MESSAGES/django.mobin32226 -> 32375 bytes
-rw-r--r--django/conf/locale/sk/LC_MESSAGES/django.po1088
-rw-r--r--django/contrib/admin/filterspecs.py59
-rw-r--r--django/contrib/admin/media/css/rtl.css46
-rw-r--r--django/contrib/admin/media/js/admin/CollapsedFieldsets.js8
-rw-r--r--django/contrib/admin/media/js/admin/DateTimeShortcuts.js23
-rw-r--r--django/contrib/admin/media/js/core.js19
-rw-r--r--django/contrib/admin/templates/admin/base.html5
-rw-r--r--django/contrib/admin/templates/admin/filters.html3
-rw-r--r--django/contrib/admin/templates/admin/pagination.html3
-rw-r--r--django/contrib/admin/templates/admin/search_form.html2
-rw-r--r--django/contrib/admin/templates/registration/password_reset_email.html2
-rw-r--r--django/contrib/admin/templatetags/admin_list.py2
-rw-r--r--django/contrib/admin/templatetags/admin_modify.py13
-rw-r--r--django/contrib/admin/views/main.py2
-rw-r--r--django/contrib/auth/management.py2
-rw-r--r--django/contrib/auth/middleware.py2
-rw-r--r--django/contrib/auth/views.py24
-rw-r--r--django/contrib/contenttypes/management.py24
-rw-r--r--django/contrib/flatpages/middleware.py2
-rw-r--r--django/contrib/redirects/middleware.py2
-rw-r--r--django/contrib/redirects/models.py4
-rw-r--r--django/contrib/sessions/middleware.py2
-rw-r--r--django/contrib/syndication/feeds.py4
-rw-r--r--django/core/cache/backends/base.py2
-rw-r--r--django/core/context_processors.py8
-rw-r--r--django/core/handlers/base.py2
-rw-r--r--django/core/management.py62
-rw-r--r--django/core/paginator.py2
-rw-r--r--django/core/servers/basehttp.py8
-rw-r--r--django/core/urlresolvers.py2
-rw-r--r--django/core/validators.py33
-rw-r--r--django/db/backends/ado_mssql/base.py3
-rw-r--r--django/db/backends/mysql/base.py3
-rw-r--r--django/db/backends/oracle/base.py3
-rw-r--r--django/db/backends/postgresql/base.py3
-rw-r--r--django/db/backends/postgresql_psycopg2/base.py3
-rw-r--r--django/db/backends/sqlite3/base.py3
-rw-r--r--django/db/backends/util.py2
-rw-r--r--django/db/models/__init__.py3
-rw-r--r--django/db/models/base.py21
-rw-r--r--django/db/models/fields/__init__.py2
-rw-r--r--django/db/models/fields/generic.py259
-rw-r--r--django/db/models/fields/related.py4
-rw-r--r--django/db/models/manager.py11
-rw-r--r--django/db/models/options.py4
-rw-r--r--django/db/models/query.py19
-rw-r--r--django/db/transaction.py2
-rw-r--r--django/forms/__init__.py16
-rw-r--r--django/http/__init__.py6
-rw-r--r--django/middleware/cache.py2
-rw-r--r--django/middleware/common.py4
-rw-r--r--django/middleware/doc.py2
-rw-r--r--django/middleware/gzip.py2
-rw-r--r--django/middleware/http.py2
-rw-r--r--django/middleware/locale.py2
-rw-r--r--django/middleware/transaction.py2
-rw-r--r--django/template/__init__.py41
-rw-r--r--django/template/context.py2
-rw-r--r--django/template/defaultfilters.py6
-rw-r--r--django/template/defaulttags.py61
-rw-r--r--django/utils/datastructures.py2
-rw-r--r--django/utils/dateformat.py2
-rw-r--r--django/utils/feedgenerator.py6
-rw-r--r--django/utils/text.py18
-rw-r--r--django/views/debug.py6
-rw-r--r--django/views/generic/create_update.py2
-rw-r--r--docs/add_ons.txt4
-rw-r--r--docs/authentication.txt11
-rw-r--r--docs/db-api.txt60
-rw-r--r--docs/faq.txt41
-rw-r--r--docs/forms.txt16
-rw-r--r--docs/i18n.txt19
-rw-r--r--docs/model-api.txt27
-rw-r--r--docs/request_response.txt4
-rw-r--r--docs/syndication_feeds.txt36
-rw-r--r--docs/templates.txt30
-rw-r--r--docs/templates_python.txt5
-rw-r--r--tests/modeltests/custom_pk/models.py3
-rw-r--r--tests/modeltests/empty/__init__.py0
-rw-r--r--tests/modeltests/empty/models.py24
-rw-r--r--tests/modeltests/generic_relations/__init__.py0
-rw-r--r--tests/modeltests/generic_relations/models.py108
-rw-r--r--tests/modeltests/get_or_create/__init__.py0
-rw-r--r--tests/modeltests/get_or_create/models.py52
-rw-r--r--tests/modeltests/invalid_models/models.py2
-rw-r--r--tests/modeltests/properties/models.py12
-rw-r--r--tests/othertests/templates.py101
-rwxr-xr-xtests/runtests.py14
101 files changed, 3290 insertions, 2216 deletions
diff --git a/AUTHORS b/AUTHORS
index 970b0d90a2..355206b15d 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -71,6 +71,7 @@ answer newbie questions, and generally made Django that much better:
Russell Keith-Magee <freakboy@iinet.net.au>
Garth Kidd <http://www.deadlybloodyserious.com/>
Sune Kirkeby <http://ibofobi.dk/>
+ Cameron Knight (ckknight)
Bruce Kroeze <http://coderseye.com/>
Joseph Kocherhans
lakin.wecker@gmail.com
diff --git a/django/conf/__init__.py b/django/conf/__init__.py
index a4aaf46a76..d5477201d7 100644
--- a/django/conf/__init__.py
+++ b/django/conf/__init__.py
@@ -12,7 +12,7 @@ from django.conf import global_settings
ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
-class LazySettings:
+class LazySettings(object):
"""
A lazy proxy for either global Django settings or a custom settings object.
The user can manually configure settings prior to using them. Otherwise,
@@ -67,7 +67,7 @@ class LazySettings:
setattr(holder, name, value)
self._target = holder
-class Settings:
+class Settings(object):
def __init__(self, settings_module):
# update this dict from global settings (but only for ALL_CAPS settings)
for setting in dir(global_settings):
@@ -112,7 +112,7 @@ class Settings:
def get_all_members(self):
return dir(self)
-class UserSettingsHolder:
+class UserSettingsHolder(object):
"""
Holder for user configured settings.
"""
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo
index 38d7fab7bb..d678225f2f 100644
--- a/django/conf/locale/fr/LC_MESSAGES/django.mo
+++ b/django/conf/locale/fr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po
index acb86bf6ff..7cc5070840 100644
--- a/django/conf/locale/fr/LC_MESSAGES/django.po
+++ b/django/conf/locale/fr/LC_MESSAGES/django.po
@@ -12,7 +12,7 @@ msgstr ""
"Last-Translator: Gaël Chardon <gael.dev_at_nospam_4now.net>\n"
"Language-Team: français <fr@li.org>\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"
#: contrib/comments/models.py:67 contrib/comments/models.py:166
@@ -2010,4 +2010,4 @@ msgstr "oui,non,peut-être"
#~ msgstr "paquetages"
#~ msgid "Messages"
-#~ msgstr "Messages" \ No newline at end of file
+#~ msgstr "Messages"
diff --git a/django/conf/locale/he/LC_MESSAGES/django.mo b/django/conf/locale/he/LC_MESSAGES/django.mo
index e2101a527b..0f8b07e5bb 100644
--- a/django/conf/locale/he/LC_MESSAGES/django.mo
+++ b/django/conf/locale/he/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/he/LC_MESSAGES/django.po b/django/conf/locale/he/LC_MESSAGES/django.po
index 04a4df18ad..6e4df17521 100644
--- a/django/conf/locale/he/LC_MESSAGES/django.po
+++ b/django/conf/locale/he/LC_MESSAGES/django.po
@@ -7,13 +7,734 @@ msgid ""
msgstr ""
"Project-Id-Version: Django 0.95\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:14+0200\n"
-"PO-Revision-Date: 2006-05-16 15:48+0300\n"
+"POT-Creation-Date: 2006-06-15 12:42+0300\n"
+"PO-Revision-Date: 2006-06-15 12:40+0300\n"
"Last-Translator: Meir Kriheli <meir@mksoft.co.il>\n"
"Language-Team: Hebrew\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: template/defaultfilters.py:389
+msgid "yes,no,maybe"
+msgstr "כן,לא,אולי"
+
+#: forms/__init__.py:346 db/models/fields/__init__.py:114
+#: db/models/fields/__init__.py:265 db/models/fields/__init__.py:545
+#: db/models/fields/__init__.py:556
+msgid "This field is required."
+msgstr "יש להזין תוכן בשדה זה."
+
+#: 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:485 forms/__init__.py:558 forms/__init__.py:597
+#, python-format
+msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
+msgstr "יש לבחור אפשרות חוקית; '%(data)s' אינו בין %(choices)s."
+
+#: forms/__init__.py:659 core/validators.py:151 core/validators.py:376
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "לא נשלח שום קובץ. נא לבדוק את סוג הקידוד של הטופס."
+
+#: forms/__init__.py:661
+msgid "The submitted file is empty."
+msgstr "הקובץ שנשלח ריק."
+
+#: forms/__init__.py:717
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "חש להזין מספר שלם בין ‎-32,768 ל- 32,767."
+
+#: forms/__init__.py:727
+msgid "Enter a positive number."
+msgstr "יש להזין מספר חיובי."
+
+#: forms/__init__.py:737
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "יש להזין מספר שלם בין 0 ל- 32,767."
+
+#: utils/translation.py:363
+msgid "DATE_FORMAT"
+msgstr "d.m.Y"
+
+#: utils/translation.py:364
+msgid "DATETIME_FORMAT"
+msgstr "d.m.y H:i:s"
+
+#: utils/translation.py:365
+msgid "TIME_FORMAT"
+msgstr "H:i:s"
+
+#: utils/translation.py:381
+msgid "YEAR_MONTH_FORMAT"
+msgstr "d.m.Y"
+
+#: utils/translation.py:382
+msgid "MONTH_DAY_FORMAT"
+msgstr "d.m.Y"
+
+#: 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 "דצמ'"
+
+#: db/models/manipulators.py:302
+#, 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/fields/__init__.py:40
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s·עם·%(fieldname)s·זה קיימת כבר."
+
+#: db/models/fields/__init__.py:337
+msgid "This value must be an integer."
+msgstr "ערך זה חייב להיות מספר שלם."
+
+#: db/models/fields/__init__.py:369
+msgid "This value must be either True or False."
+msgstr "ערך זה חייב להיות אמת או שקר."
+
+#: db/models/fields/__init__.py:385
+msgid "This field cannot be null."
+msgstr "שדה זה אינו יכול להכיל null."
+
+#: db/models/fields/__init__.py:471 core/validators.py:135
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "יש להזין תאריך ושעה במבנה YYYY-MM-DD HH:MM."
+
+#: db/models/fields/__init__.py:565
+msgid "Enter a valid filename."
+msgstr "יש להזין שם קובץ חוקי."
+
+#: db/models/fields/related.py:43
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "יש להזין %s חוקי."
+
+#: db/models/fields/related.py:579
+msgid "Separate multiple IDs with commas."
+msgstr "יש להפריד מזהים מרובים בפסיקים."
+
+#: db/models/fields/related.py:581
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "החזק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד."
+
+#: 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] "נא להזין זיהוי %(self)s חוקי. הערך %(value)r אינו חוקי."
+msgstr[1] ""
+"נא להזין זיהויי %(self)s חוקיים. הערכים %(value)r אינם חוקיים."
+
+#: 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: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:127
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "יש להזין תאריך במבנה YYYY-MM-DD."
+
+#: core/validators.py:131
+msgid "Enter a valid time in HH:MM format."
+msgstr "יש להזין שעה במבנה HH:MM."
+
+#: core/validators.py:139
+msgid "Enter a valid e-mail address."
+msgstr "יש להזין כתובת דוא\"ל חוקית."
+
+#: core/validators.py:155
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr "נא להעלות תמונה חוקית. הקובץ שהעלת אינו תמונה אומכיל תמונה מקולקלת."
+
+#: core/validators.py:162
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "ה-URL %s אנו מצביע לתמונה חוקית."
+
+#: core/validators.py:166
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "מספרי טלפון חייבים להיות במבנה XXX-XXX-XXXX.‏ \"%s\" אינו חוקי."
+
+#: core/validators.py:174
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "ה-URL‏ %s אינו מצביע לסרטון QuickTime חוקי."
+
+#: core/validators.py:178
+msgid "A valid URL is required."
+msgstr "יש להזין URL חוקי."
+
+#: core/validators.py:192
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"יש להזין HTML חוקי. שגיאות ספציפיות:\n"
+"%s"
+
+#: core/validators.py:199
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "מבנה XML שגוי: %s"
+
+#: core/validators.py:209
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL שגוי: %s"
+
+#: core/validators.py:213 core/validators.py:215
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "ה-URL‏ %s הוא קישור שבור."
+
+#: core/validators.py:221
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "יש להזין קיצור חוקי למדינה בארה\"ב."
+
+#: 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] "שמור על לשונך! המילה %s אסורה לשימוש כאן."
+msgstr[1] "שמור על לשונך! המילים %s אסורות לשימוש כאן."
+
+#: core/validators.py:243
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "תוכן השדה חייב להיות זהה לשדה '%s'."
+
+#: core/validators.py:262
+msgid "Please enter something for at least one field."
+msgstr "יש להזין תוכן בלפחות אחד מהשדות."
+
+#: core/validators.py:271 core/validators.py:282
+msgid "Please enter both fields or leave them both empty."
+msgstr "יש להזין תוכן בשני השדות או להשאיר את שניהם ריקים."
+
+#: core/validators.py:289
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "יש להזין מידע בשדה זה אם שדה %(field)s מכיל %(value)s"
+
+#: core/validators.py:301
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "יש להזין תוכן בשדה זה אם תוכן שדה %(field)s אינו %(value)s"
+
+#: core/validators.py:320
+msgid "Duplicate values are not allowed."
+msgstr "לא ניתן להזין ערכים כפולים."
+
+#: core/validators.py:343
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "ערך זה חייב להיות חזקה של %s."
+
+#: core/validators.py:354
+msgid "Please enter a valid decimal number."
+msgstr "יש להזין מספר עשרוני חוקי."
+
+#: 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] "נא להזין מספר עשרוני חוקי עם %s ספרה לכל היותר."
+msgstr[1] ""
+"נא להזין מספר עשרוני חוקי עם %s ספרות לכל היותר."
+
+#: core/validators.py:359
+#, 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:369
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "יש להעלות קובץ בגודל %s בתים לפחות."
+
+#: core/validators.py:370
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "יש לוודא שהקובץ שהעלת הוא בגודל %s בתים לכל היותר."
+
+#: core/validators.py:387
+msgid "The format for this field is wrong."
+msgstr "מבנה תוכן שדה זה שגוי."
+
+#: core/validators.py:402
+msgid "This field is invalid."
+msgstr "שדה זה אינו חוקי."
+
+#: core/validators.py:438
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "לא ניתן לאחזר כלום מ %s."
+
+#: core/validators.py:441
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "ה-URL·%(url)s·החזיר כותרת·Content-Type·לא חוקית·'%(contenttype)s'."
+
+#: core/validators.py:474
+#, 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:478
+#, 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:483
+#, 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:488
+#, 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:492
+#, 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:497
+#, 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\".)"
+
+#: conf/global_settings.py:37
+msgid "Bengali"
+msgstr "בנגאלית - Bengali"
+
+#: conf/global_settings.py:38
+msgid "Czech"
+msgstr "צ'כית - Czech"
+
+#: conf/global_settings.py:39
+msgid "Welsh"
+msgstr "וולשית - Welsh"
+
+#: conf/global_settings.py:40
+msgid "Danish"
+msgstr "דנית - Danish"
+
+#: conf/global_settings.py:41
+msgid "German"
+msgstr "גרמנית - German"
+
+#: conf/global_settings.py:42
+msgid "Greek"
+msgstr "יוונית - Greek"
+
+#: conf/global_settings.py:43
+msgid "English"
+msgstr "אנגלית - English"
+
+#: conf/global_settings.py:44
+msgid "Spanish"
+msgstr "ספרדית - Spanish"
+
+#: conf/global_settings.py:45
+msgid "Argentinean Spanish"
+msgstr "ספרדית ארגנטינאית - Argentinean Spanish"
+
+#: conf/global_settings.py:46
+msgid "French"
+msgstr "צרפתית - French"
+
+#: conf/global_settings.py:47
+msgid "Galician"
+msgstr "גאליצית - Galician"
+
+#: conf/global_settings.py:48
+msgid "Hungarian"
+msgstr "הונגרית (Hungarian)"
+
+#: conf/global_settings.py:49
+msgid "Hebrew"
+msgstr "עברית - Hebrew"
+
+#: conf/global_settings.py:50
+msgid "Icelandic"
+msgstr "איסלנדית - Icelandic"
+
+#: conf/global_settings.py:51
+msgid "Italian"
+msgstr "איטלקית - Italian"
+
+#: conf/global_settings.py:52
+msgid "Japanese"
+msgstr "יפנית - Japanese"
+
+#: conf/global_settings.py:53
+msgid "Dutch"
+msgstr "הולנדית - Dutch"
+
+#: conf/global_settings.py:54
+msgid "Norwegian"
+msgstr "נורווגית - Norwegian"
+
+#: conf/global_settings.py:55
+msgid "Brazilian"
+msgstr "ברזילאית - Brazilian"
+
+#: conf/global_settings.py:56
+msgid "Romanian"
+msgstr "רומנית - Romanian"
+
+#: conf/global_settings.py:57
+msgid "Russian"
+msgstr "רוסית - Russian"
+
+#: conf/global_settings.py:58
+msgid "Slovak"
+msgstr "סלובקית - Slovak"
+
+#: conf/global_settings.py:59
+msgid "Slovenian"
+msgstr "סלובנית - Slovenian"
+
+#: conf/global_settings.py:60
+msgid "Serbian"
+msgstr "סרבית - Serbian"
+
+#: conf/global_settings.py:61
+msgid "Swedish"
+msgstr "שוודית - Swedish"
+
+#: conf/global_settings.py:62
+msgid "Ukrainian"
+msgstr "אוקראינית - Ukrainian"
+
+#: conf/global_settings.py:63
+msgid "Simplified Chinese"
+msgstr "סינית פשוטה - Simplified·Chinese"
+
+#: conf/global_settings.py:64
+msgid "Traditional Chinese"
+msgstr "סינית מסורתית - Traditional·Chinese"
+
+#: contrib/sessions/models.py:35
+msgid "session key"
+msgstr "מפתח התחברות (session key)"
+
+#: contrib/sessions/models.py:36
+msgid "session data"
+msgstr "מידע התחברות (session data)"
+
+#: contrib/sessions/models.py:37
+msgid "expire date"
+msgstr "תאריך פג תוקף"
+
+#: contrib/sessions/models.py:41
+msgid "session"
+msgstr "התחברות"
+
+#: contrib/sessions/models.py:42
+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 "אתרים"
+
+#: contrib/contenttypes/models.py:25
+msgid "python model class name"
+msgstr "שם ה-class של מודל פייתון"
+
+#: contrib/contenttypes/models.py:28
+msgid "content type"
+msgstr "סוג תוכן"
+
+#: contrib/contenttypes/models.py:29
+msgid "content types"
+msgstr "סוגי תוכן"
#: contrib/comments/models.py:67 contrib/comments/models.py:166
msgid "object ID"
@@ -72,7 +793,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:292
msgid "IP address"
msgstr "כתובת IP"
@@ -196,17 +917,73 @@ msgstr "מחיקות מודרטור"
msgid "Moderator deletion by %r"
msgstr "מחיקת מודרציה ע\"י %r"
-#: contrib/comments/views/karma.py:19
-msgid "Anonymous users cannot vote"
-msgstr "משתמשים אנונימיים אינם יכולים להצביע"
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "שמך:"
-#: contrib/comments/views/karma.py:23
-msgid "Invalid comment ID"
-msgstr "מזהה תגובה שגוי"
+#: contrib/comments/templates/comments/freeform.html:5
+#: contrib/comments/templates/comments/form.html:27
+msgid "Comment:"
+msgstr "תגובה:"
-#: contrib/comments/views/karma.py:25
-msgid "No voting for yourself"
-msgstr "לא ניתן להצביע לעצמך"
+#: contrib/comments/templates/comments/freeform.html:9
+#: contrib/comments/templates/comments/form.html:32
+msgid "Preview comment"
+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/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_doc/bookmarklets.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/template_detail.html:4
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin/base.html:24
+#: 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/change_list.html:5
+#: 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: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/views/comments.py:28
msgid ""
@@ -220,16 +997,18 @@ msgid ""
"comment:\n"
"\n"
"%(text)s"
+msgid_plural ""
"This comment was posted by a user who has posted fewer than %(count)s "
"comments:\n"
"\n"
"%(text)s"
-msgstr ""
-"תגובה זו נשלחה ע\"י משתמש אשר שלח פחות מ %(count)s "
+msgstr[0] ""
+"התגובה נשלחה ע\"י משתמש אשר שלח פחות מ-%(count)s "
"תגובה:\n"
"\n"
"%(text)s"
-"תגובה זו נשלחה ע\"י משתמש אשר שלח פחות מ %(count)s "
+msgstr[1] ""
+"התגובה נשלחה ע\"י משתמש אשר שלח פחות מ-%(count)s "
"תגובות:\n"
"\n"
"%(text)s"
@@ -272,73 +1051,17 @@ msgstr "טופס התגובה הכיל פרמטר target לא חוקי -- מזה
msgid "The comment form didn't provide either 'preview' or 'post'"
msgstr "טופס התגובה לא הכיל 'preview' או 'post'"
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
-#: contrib/admin/templates/admin/login.html:17
-msgid "Username:"
-msgstr "שם משתמש:"
-
-#: 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/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: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:27
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "תגובה:"
+#: contrib/comments/views/karma.py:19
+msgid "Anonymous users cannot vote"
+msgstr "משתמשים אנונימיים אינם יכולים להצביע"
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-msgid "Preview comment"
-msgstr "תצוגה מקדימה של התגובה"
+#: contrib/comments/views/karma.py:23
+msgid "Invalid comment ID"
+msgstr "מזהה תגובה שגוי"
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "שמך:"
+#: contrib/comments/views/karma.py:25
+msgid "No voting for yourself"
+msgstr "לא ניתן להצביע לעצמך"
#: contrib/admin/filterspecs.py:40
#, python-format
@@ -414,260 +1137,188 @@ 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
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"נא להזין שם משתמש וסיסמה נכונים. בשני השדות גודל האותיות האנגליות משנה."
-
-#: contrib/admin/views/decorators.py:23
-#: contrib/admin/templates/admin/login.html:25
-msgid "Log in"
-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 ""
-"נא להתחבר שוב, מאחר ופג תוקף ההתחברות הנוכחית. אל דאגה: המידעששלחת נשמר."
-
-#: 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 ""
-"נראה שהדפדפן שלך אינו מוגדר לקבל עוגיות. נא לאפשר עוגיות,לטעון מחדש את הדף "
-"ולנסות שוב."
-
-#: contrib/admin/views/decorators.py:82
-msgid "Usernames cannot contain the '@' character."
-msgstr "שם משתמש אינו יכול להכיל את התו '@'."
-
-#: contrib/admin/views/decorators.py:84
-#, python-format
-msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "כתובת הדוא\"ל שלך אינה שם המשתמש שלך. נסה/י '%s' במקום."
-
-#: contrib/admin/views/main.py:226
-msgid "Site administration"
-msgstr "ניהול אתר"
-
-#: contrib/admin/views/main.py:260
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה."
-
-#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
-msgid "You may edit it again below."
-msgstr "ניתן לערוך שוב מתחת"
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "הנוכחי."
-#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
-#, python-format
-msgid "You may add another %s below."
-msgstr "ניתן להוסיף %s נוסף מתחת."
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "שינוי:"
-#: contrib/admin/views/main.py:290
-#, python-format
-msgid "Add %s"
-msgstr "הוספת %s"
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "תאריך:"
-#: contrib/admin/views/main.py:336
-#, python-format
-msgid "Added %s."
-msgstr "%s התווסף."
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "שעה:"
-#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
-#: contrib/admin/views/main.py:340
-msgid "and"
-msgstr "ו"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_form.html:13
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/change_list.html:6
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+msgid "Home"
+msgstr "דף הבית"
-#: contrib/admin/views/main.py:338
-#, python-format
-msgid "Changed %s."
-msgstr "%s שונה."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+#: contrib/admin/templates/admin/base.html:24
+#: 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/change_list.html:5
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+msgid "Documentation"
+msgstr "תיעוד"
-#: contrib/admin/views/main.py:340
-#, python-format
-msgid "Deleted %s."
-msgstr "%s נמחק."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "ייסומניות"
-#: contrib/admin/views/main.py:343
-msgid "No fields changed."
-msgstr "אף שדה לא השתנה."
+#: contrib/admin/templates/admin_doc/bookmarklets.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/template_detail.html:4
+#: contrib/admin/templates/admin_doc/missing_docutils.html:4
+#: contrib/admin/templates/admin_doc/model_detail.html:3
+#: contrib/admin/templates/admin_doc/template_tag_index.html:5
+#: contrib/admin/templates/admin_doc/model_index.html:5
+#: contrib/admin/templates/admin_doc/view_detail.html:4
+#: contrib/admin/templates/admin_doc/index.html:4
+#: contrib/admin/templates/admin/base.html:24
+#: 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/change_list.html:5
+#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_done.html:3
+msgid "Change password"
+msgstr "שינוי סיסמה"
-#: contrib/admin/views/main.py:346
-#, python-format
-msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "שינוי %(name)s \"%(obj)s\" בוצע בהצלחה."
+#: contrib/admin/templates/admin_doc/bookmarklets.html:5
+msgid "Documentation bookmarklets"
+msgstr "ייסומוניות תיעוד"
-#: contrib/admin/views/main.py:354
-#, python-format
+#: contrib/admin/templates/admin_doc/bookmarklets.html:9
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 "שינוי %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"
-
-#: contrib/admin/views/main.py:475
-#, python-format
-msgid "One or more %(fieldname)s in %(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\" בוצעה בהצלחה."
-
-#: contrib/admin/views/main.py:511
-msgid "Are you sure?"
-msgstr "האם את/ה בטוח/ה ?"
-
-#: contrib/admin/views/main.py:533
-#, python-format
-msgid "Change history: %s"
-msgstr "היסטוריית שינוי: %s"
-
-#: contrib/admin/views/main.py:565
-#, python-format
-msgid "Select %s"
-msgstr "בחר/י %s"
-
-#: contrib/admin/views/main.py:565
-#, python-format
-msgid "Select %s to change"
-msgstr "בחר/י %s לשינוי"
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site. Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">כדי להתקין ייסומניות, יש לגרור את הקישור לסרגל הסימניות\n"
+"שלך, או קליק ימני והוספה לסימניות. כעת ניתן\n"
+"לבחור את הייסומניה מכל עמוד באתר. יש לשים לב כי חלק מהייסומניות\n"
+"ניתנות לצפיה רק ממחשב שמסווג\n"
+"כ\"פנימי\" (יש לדבר עם מנהל המערכת שלך אם אינך בטוח/ה\n"
+"שהמחשב מסווג ככזה).</p>\n"
-#: contrib/admin/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 "מספר שלם"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:19
+msgid "Documentation for this page"
+msgstr "תיעוד לדף זה"
-#: contrib/admin/views/doc.py:278
-msgid "Boolean (Either True or False)"
-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/views/doc.py:279 contrib/admin/views/doc.py:296
-#, python-format
-msgid "String (up to %(maxlength)s)"
-msgstr "מחרוזת (עד %(maxlength)s תווים)"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:22
+msgid "Show object ID"
+msgstr "הצג מזהה אובייקט"
-#: contrib/admin/views/doc.py:280
-msgid "Comma-separated integers"
-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/views/doc.py:281
-msgid "Date (without time)"
-msgstr "תאריך (ללא שעה)"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:25
+msgid "Edit this object (current window)"
+msgstr "עריכת אובייקט זה (בחלון הנוכחי)"
-#: contrib/admin/views/doc.py:282
-msgid "Date (with time)"
-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/views/doc.py:283
-msgid "E-mail address"
-msgstr "כתובת דוא\"ל"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:28
+msgid "Edit this object (new window)"
+msgstr "עריכת אובייקט זה (בחלון חדש)"
-#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
-msgid "File path"
-msgstr "נתיב קובץ"
+#: contrib/admin/templates/admin_doc/bookmarklets.html:29
+msgid "As above, but opens the admin page in a new window."
+msgstr "כנ\"ל, אך דף הניהול ייפתח בחלון חדש."
-#: contrib/admin/views/doc.py:285
-msgid "Decimal number"
-msgstr "מספר עשרוני"
+#: contrib/admin/templates/admin/login.html:22
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "האם <a href=\"/password_reset/\">שכחת את הסיסמה שלך</a>?"
-#: contrib/admin/views/doc.py:291
-msgid "Boolean (Either True, False or None)"
-msgstr "בוליאני (אמת, שקר או כלום)"
+#: contrib/admin/templates/admin/login.html:25
+#: contrib/admin/views/decorators.py:23
+msgid "Log in"
+msgstr "כניסה"
-#: contrib/admin/views/doc.py:292
-msgid "Relation to parent model"
-msgstr "יחס למודל אב"
+#: contrib/admin/templates/admin/submit_line.html:3
+#: contrib/admin/templates/admin/delete_confirmation.html:9
+msgid "Delete"
+msgstr "מחיקה"
-#: contrib/admin/views/doc.py:293
-msgid "Phone number"
-msgstr "מספר טלפון"
+#: contrib/admin/templates/admin/submit_line.html:4
+msgid "Save as new"
+msgstr "שמירה כחדש"
-#: contrib/admin/views/doc.py:298
-msgid "Text"
-msgstr "טקסט"
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save and add another"
+msgstr "שמירה והוספת אחר"
-#: contrib/admin/views/doc.py:299
-msgid "Time"
-msgstr "זמן"
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and continue editing"
+msgstr "שמירה והמשך עריכה"
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save"
+msgstr "שמירה"
-#: contrib/admin/views/doc.py:301
-msgid "U.S. state (two uppercase letters)"
-msgstr "מדינה בארה\"ב (שתי אותיות גדולות)"
+#: contrib/admin/templates/admin/base.html:24
+msgid "Welcome,"
+msgstr "שלום"
-#: contrib/admin/views/doc.py:302
-msgid "XML text"
-msgstr "טקסט XML"
+#: contrib/admin/templates/admin/filters.html:4
+msgid "Filter"
+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/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/search_form.html:8
+msgid "Go"
+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/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/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "תוצאה אחת"
+msgstr[1] "%(counter)s תוצאות"
-#: 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 "דף הבית"
+#: 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:20
@@ -694,7 +1345,31 @@ msgstr "l d.m.y H:i:s"
msgid ""
"This object doesn't have a change history. It probably wasn't added via this "
"admin site."
-msgstr "לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול להוספתו."
+msgstr ""
+"לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול הזה להוספתו."
+
+#: contrib/admin/templates/admin/change_form.html:15
+#: contrib/admin/templates/admin/index.html:28
+msgid "Add"
+msgstr "הוספה"
+
+#: contrib/admin/templates/admin/change_form.html: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/base_site.html:4
msgid "Django site admin"
@@ -704,24 +1379,9 @@ msgstr "ניהול אתר Django"
msgid "Django administration"
msgstr "ניהול Django"
-#: contrib/admin/templates/admin/500.html:4
-msgid "Server error"
-msgstr "שגיאת שרת"
-
-#: contrib/admin/templates/admin/500.html:6
-msgid "Server error (500)"
-msgstr "שגיאת שרת (500)"
-
-#: contrib/admin/templates/admin/500.html:9
-msgid "Server Error <em>(500)</em>"
-msgstr "שגיאת שרת <em>(500)</em>"
-
-#: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך."
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "הצג הכל"
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
@@ -732,16 +1392,48 @@ msgstr "דף לא קיים"
msgid "We're sorry, but the requested page could not be found."
msgstr "אנו מצטערים, לא ניתן למצוא את הדף המבוקש."
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(title)s "
+msgstr " לפי %(title)s "
+
+#: 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' תמחק אובייקטים קשורים, אך לחשבון שלך אין "
+"הרשאות למחיקת אובייקטים מהסוג הבא:"
+
+#: 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\"? כלהפריטים הקשורים הבאים "
+"יימחקו:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:26
+msgid "Yes, I'm sure"
+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/index.html:17
#, python-format
msgid "Models available in the %(name)s application."
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 "שינוי"
@@ -762,95 +1454,92 @@ msgstr "הפעולות שלי"
msgid "None available"
msgstr "לא נמצאו"
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "הוספת %(name)s"
-
-#: contrib/admin/templates/admin/login.html:22
-msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "האם <a href=\"/password_reset/\">שכחת את הסיסמה שלך</a>?"
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "שגיאת שרת"
-#: contrib/admin/templates/admin/base.html:23
-msgid "Welcome,"
-msgstr "שלום"
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "שגיאת שרת (500)"
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Delete"
-msgstr "מחיקה"
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "שגיאת שרת <em>(500)</em>"
-#: contrib/admin/templates/admin/delete_confirmation.html:14
-#, python-format
+#: contrib/admin/templates/admin/500.html:10
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:"
+"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 ""
-"מחיקת %(object_name)s·'%(object)s'·תמחק אובייקטים קשורים,אך לחשבון שלך אין "
-"הרשאות למחיקת אובייקטים מהסוג הבא:"
+"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך."
-#: contrib/admin/templates/admin/delete_confirmation.html:21
+#: contrib/admin/templates/admin/change_list.html:11
#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
-"the following related items will be deleted:"
-msgstr ""
-"האם ברצונך למחוק את %(object_name)s·\"%(object)s\"? כלהפריטים הקשורים הבאים "
-"יימחקו:"
+msgid "Add %(name)s"
+msgstr "הוספת %(name)s"
-#: contrib/admin/templates/admin/delete_confirmation.html:26
-msgid "Yes, I'm sure"
-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/admin/filter.html:2
+#: contrib/admin/templates/registration/password_reset_email.html:3
#, python-format
-msgid " By %(title)s "
-msgstr " לפי %(title)s "
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-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 "סידור"
+msgid "for your user account at %(site_name)s"
+msgstr "עבור חשבון המשתמש שלך ב %(site_name)s"
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-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/admin/submit_line.html:4
-msgid "Save as new"
-msgstr "שמירה כחדש"
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
+msgstr "ניתן לשנות את הסיסמה בכל עת ע\"י פניה לדף זה:"
-#: contrib/admin/templates/admin/submit_line.html:5
-msgid "Save and add another"
-msgstr "שמירה והוספת אחר"
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "שם המשתמש שלך, במקרה ששכחת:"
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "שמירה והמשך עריכה"
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "תודה על השימוש באתר שלנו!"
-#: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-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_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: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"
@@ -860,13 +1549,33 @@ msgstr "הסיסמה שונתה בהצלחה"
msgid "Your password was changed."
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: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
-#: contrib/admin/templates/registration/password_reset_done.html:4
msgid "Password reset"
msgstr "איפוס סיסמה"
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "הסיסמה אופסה בהצלחה"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"שלחנו את הסיסמה החדשה לכתובת הדוא\"ל שהזנת. היא אמורה להתקבל תוך זמן קצר."
+
#: contrib/admin/templates/registration/password_reset_form.html:12
msgid ""
"Forgotten your password? Enter your e-mail address below, and we'll reset "
@@ -883,158 +1592,210 @@ msgstr "כתובת דוא\"ל:"
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/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
+msgid "Integer"
+msgstr "מספר שלם"
-#: contrib/admin/templates/registration/logged_out.html:10
-msgid "Log in again"
-msgstr "התחבר/י שוב"
+#: contrib/admin/views/doc.py:280
+msgid "Boolean (Either True or False)"
+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/views/doc.py:281 contrib/admin/views/doc.py:299
+#, python-format
+msgid "String (up to %(maxlength)s)"
+msgstr "מחרוזת (עד %(maxlength)s תווים)"
-#: 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/views/doc.py:282
+msgid "Comma-separated integers"
+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/views/doc.py:283
+msgid "Date (without time)"
+msgstr "תאריך (ללא שעה)"
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "סיסמה ישנה:"
+#: contrib/admin/views/doc.py:284
+msgid "Date (with time)"
+msgstr "תאריך (כולל שעה)"
-#: contrib/admin/templates/registration/password_change_form.html:19
-msgid "New password:"
-msgstr "סיסמה חדשה:"
+#: contrib/admin/views/doc.py:285
+msgid "E-mail address"
+msgstr "כתובת דוא\"ל"
-#: contrib/admin/templates/registration/password_change_form.html:21
-msgid "Confirm password:"
-msgstr "אימות סיסמה:"
+#: contrib/admin/views/doc.py:286 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:290
+msgid "File path"
+msgstr "נתיב קובץ"
-#: contrib/admin/templates/registration/password_change_form.html:23
-msgid "Change my password"
-msgstr "שנה את סיסמתי"
+#: contrib/admin/views/doc.py:288
+msgid "Decimal number"
+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/views/doc.py:294
+msgid "Boolean (Either True, False or None)"
+msgstr "בוליאני (אמת, שקר או כלום)"
-#: contrib/admin/templates/registration/password_reset_email.html:3
+#: contrib/admin/views/doc.py:295
+msgid "Relation to parent model"
+msgstr "יחס למודל אב"
+
+#: contrib/admin/views/doc.py:296
+msgid "Phone number"
+msgstr "מספר טלפון"
+
+#: contrib/admin/views/doc.py:301
+msgid "Text"
+msgstr "טקסט"
+
+#: contrib/admin/views/doc.py:302
+msgid "Time"
+msgstr "זמן"
+
+#: contrib/admin/views/doc.py:303 contrib/flatpages/models.py:7
+msgid "URL"
+msgstr "URL"
+
+#: contrib/admin/views/doc.py:304
+msgid "U.S. state (two uppercase letters)"
+msgstr "מדינה בארה\"ב (שתי אותיות גדולות)"
+
+#: contrib/admin/views/doc.py:305
+msgid "XML text"
+msgstr "טקסט XML"
+
+#: contrib/admin/views/main.py:226
+msgid "Site administration"
+msgstr "ניהול אתר"
+
+#: contrib/admin/views/main.py:260
#, python-format
-msgid "for your user account at %(site_name)s"
-msgstr "עבור חשבון המשתמש שלך ב %(site_name)s"
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה."
-#: contrib/admin/templates/registration/password_reset_email.html:5
+#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
+msgid "You may edit it again below."
+msgstr "ניתן לערוך שוב מתחת"
+
+#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format
-msgid "Your new password is: %(new_password)s"
-msgstr "סיסמתך החדשה: %(new_password)s"
+msgid "You may add another %s below."
+msgstr "ניתן להוסיף %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/views/main.py:290
+#, python-format
+msgid "Add %s"
+msgstr "הוספת %s"
-#: contrib/admin/templates/registration/password_reset_email.html:11
-msgid "Your username, in case you've forgotten:"
-msgstr "שם המשתמש שלך, במקרה ששכחת:"
+#: contrib/admin/views/main.py:336
+#, python-format
+msgid "Added %s."
+msgstr "%s התווסף."
-#: contrib/admin/templates/registration/password_reset_email.html:13
-msgid "Thanks for using our site!"
-msgstr "תודה על השימוש באתר שלנו!"
+#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
+#: contrib/admin/views/main.py:340
+msgid "and"
+msgstr "ו"
-#: contrib/admin/templates/registration/password_reset_email.html:15
+#: contrib/admin/views/main.py:338
#, python-format
-msgid "The %(site_name)s team"
-msgstr "צוות %(site_name)s"
+msgid "Changed %s."
+msgstr "%s שונה."
-#: contrib/admin/templates/admin_doc/bookmarklets.html:3
-msgid "Bookmarklets"
-msgstr "ייסומניות"
+#: contrib/admin/views/main.py:340
+#, python-format
+msgid "Deleted %s."
+msgstr "%s נמחק."
-#: contrib/admin/templates/admin_doc/bookmarklets.html:5
-msgid "Documentation bookmarklets"
-msgstr "ייסומוניות תיעוד"
+#: contrib/admin/views/main.py:343
+msgid "No fields changed."
+msgstr "אף שדה לא השתנה."
-#: contrib/admin/templates/admin_doc/bookmarklets.html:9
+#: contrib/admin/views/main.py:346
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "שינוי %(name)s \"%(obj)s\" בוצע בהצלחה."
+
+#: contrib/admin/views/main.py:354
+#, python-format
msgid ""
-"\n"
-"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
-"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
-"select the bookmarklet from any page in the site. Note that some of these\n"
-"bookmarklets require you to be viewing the site from a computer designated\n"
-"as \"internal\" (talk to your system administrator if you aren't sure if\n"
-"your computer is \"internal\").</p>\n"
-msgstr ""
-"\n"
-"<p class=\"help\">כדי להתקין ייסומניות, יש לגרור את הקישור לסרגל הסימניות\n"
-"שלך, או קליק ימני והוספה לסימניות. כעת ניתן\n"
-"לבחור את הייסומניה מכל עמוד באתר. יש לשים לב כי חלק מהייסומניות\n"
-"ניתנות לצפיה רק ממחשב שמסווג\n"
-"כ\"פנימי\" (יש לדבר עם מנהל המערכת שלך אם אינך בטוח/ה\n"
-"שהמחשב מסווג ככזה).</p>\n"
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה. ניתן לערוך אותו שוב מתחת."
-#: contrib/admin/templates/admin_doc/bookmarklets.html:19
-msgid "Documentation for this page"
-msgstr "תיעוד לדף זה"
+#: contrib/admin/views/main.py:392
+#, python-format
+msgid "Change %s"
+msgstr "שינוי %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 "מקפיץ אותך מכל עמוד לתיעוד התצוגה שייצרה אותו."
+#: 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"
-#: contrib/admin/templates/admin_doc/bookmarklets.html:22
-msgid "Show object ID"
-msgstr "הצג מזהה אובייקט"
+#: contrib/admin/views/main.py:475
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "אחד או יותר %(fieldname)s ב%(name)s:"
-#: 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/views/main.py:508
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "מחיקת %(name)s \"%(obj)s\" בוצעה בהצלחה."
-#: contrib/admin/templates/admin_doc/bookmarklets.html:25
-msgid "Edit this object (current window)"
-msgstr "עריכת אובייקט זה (בחלון הנוכחי)"
+#: contrib/admin/views/main.py:511
+msgid "Are you sure?"
+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/views/main.py:533
+#, python-format
+msgid "Change history: %s"
+msgstr "היסטוריית שינוי: %s"
-#: contrib/admin/templates/admin_doc/bookmarklets.html:28
-msgid "Edit this object (new window)"
-msgstr "עריכת אובייקט זה (בחלון חדש)"
+#: contrib/admin/views/main.py:567
+#, python-format
+msgid "Select %s"
+msgstr "בחירת %s"
-#: contrib/admin/templates/admin_doc/bookmarklets.html:29
-msgid "As above, but opens the admin page in a new window."
-msgstr "כנ\"ל, אך דף הניהול ייפתח בחלון חדש."
+#: contrib/admin/views/main.py:567
+#, python-format
+msgid "Select %s to change"
+msgstr "בחירת %s לשינוי"
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "תאריך:"
+#: contrib/admin/views/main.py:743
+msgid "Database error"
+msgstr "שגיאת בסיס נתונים"
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "שעה:"
+#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
+#: contrib/auth/forms.py:43
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"נא להזין שם משתמש וסיסמה נכונים. בשני השדות גודל האותיות האנגליות משנה."
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-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 ""
+"נא להתחבר שוב, מאחר ופג תוקף ההתחברות הנוכחית. אל דאגה: המידע ששלחת נשמר."
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-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 ""
+"נראה שהדפדפן שלך אינו מוגדר לקבל עוגיות. נא לאפשר עוגיות, לטעון מחדש את הדף "
+"ולנסות שוב."
+
+#: contrib/admin/views/decorators.py:82
+msgid "Usernames cannot contain the '@' character."
+msgstr "שם משתמש אינו יכול להכיל את התו '@'."
+
+#: contrib/admin/views/decorators.py:84
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "כתובת הדוא\"ל שלך אינה שם המשתמש שלך. נסה/י '%s' במקום."
#: contrib/redirects/models.py:7
msgid "redirect from"
@@ -1056,59 +1817,27 @@ msgid ""
"'http://'."
msgstr "יכול להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב'http://'."
-#: contrib/redirects/models.py:12
+#: contrib/redirects/models.py:13
msgid "redirect"
msgstr "הפניה"
-#: contrib/redirects/models.py:13
+#: contrib/redirects/models.py:14
msgid "redirects"
msgstr "הפניות"
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף."
-
-#: 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
+#: contrib/auth/forms.py:30
msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"דוגמא: 'flatpages/contact_page'. האם אינו קיים, המערכתתשתמש ב 'flatpages/"
-"default'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "הרשמה נדרשת"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr "אם זה מסומך, רק משתמשים מחוברים יוכלו לצפות בדף."
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr "נראה שעוגיות לא מאופשרות בדפדפן שלך.הן נדרשות כדי להתחבר."
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "דף פשוט"
+#: contrib/auth/forms.py:45
+msgid "This account is inactive."
+msgstr "חשבון זה אינו פעיל."
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "דפים פשוטים"
+#: contrib/auth/views.py:39
+msgid "Logged out"
+msgstr "יצאת מהמערכת"
#: contrib/auth/models.py:13 contrib/auth/models.py:26
msgid "name"
@@ -1187,8 +1916,8 @@ msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
msgstr ""
-"בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש/ת גם כל ההרשאות של כל קבוצה "
-"המשוייכת אליו/ה."
+"בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש גם כל ההרשאות של כל קבוצה "
+"המשוייכת אליו."
#: contrib/auth/models.py:67
msgid "user permissions"
@@ -1222,693 +1951,49 @@ msgstr "קבוצות"
msgid "message"
msgstr "הודעה"
-#: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr "נראה שעוגיות לא מאופשרות בדפדפן שלך.הן נדרשות כדי להתחבר."
-
-#: contrib/contenttypes/models.py:25
-msgid "python model class name"
-msgstr "שם ה-class של מודל פייתון"
-
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "סוג תוכן"
-
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "סוגי תוכן"
-
-#: contrib/sessions/models.py:35
-msgid "session key"
-msgstr "מפתח התחברות (session key)"
-
-#: contrib/sessions/models.py:36
-msgid "session data"
-msgstr "מידע התחברות (session data)"
-
-#: contrib/sessions/models.py:37
-msgid "expire date"
-msgstr "תאריך פג תוקף"
-
-#: contrib/sessions/models.py:41
-msgid "session"
-msgstr "התחברות"
-
-#: contrib/sessions/models.py:42
-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/translation.py:360
-msgid "DATE_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation.py:361
-msgid "DATETIME_FORMAT"
-msgstr "d.m.y H:i:s"
-
-#: utils/translation.py:362
-msgid "TIME_FORMAT"
-msgstr "H:i:s"
-
-#: 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 "דקה"
-
-#: conf/global_settings.py:37
-msgid "Bengali"
-msgstr "בנגאלית - Bengali"
-
-#: conf/global_settings.py:38
-msgid "Czech"
-msgstr "צ'כית - Czech"
-
-#: conf/global_settings.py:39
-msgid "Welsh"
-msgstr "וולשית - Welsh"
-
-#: conf/global_settings.py:40
-msgid "Danish"
-msgstr "דנית - Danish"
-
-#: conf/global_settings.py:41
-msgid "German"
-msgstr "גרמנית - German"
-
-#: conf/global_settings.py:42
-msgid "Greek"
-msgstr "יוונית - Greek"
-
-#: conf/global_settings.py:43
-msgid "English"
-msgstr "אנגלית - English"
-
-#: conf/global_settings.py:44
-msgid "Spanish"
-msgstr "ספרדית - Spanish"
-
-#: conf/global_settings.py:45
-msgid "French"
-msgstr "צרפתית - French"
-
-#: conf/global_settings.py:46
-msgid "Galician"
-msgstr "גאליצית - Galician"
-
-#: conf/global_settings.py:47
-msgid "Hungarian"
-msgstr "הונגרית (Hungarian)"
-
-#: conf/global_settings.py:48
-msgid "Hebrew"
-msgstr "עברית - Hebrew"
-
-#: conf/global_settings.py:49
-msgid "Icelandic"
-msgstr "איסלנדית - Icelandic"
-
-#: conf/global_settings.py:50
-msgid "Italian"
-msgstr "איטלקית - Italian"
-
-#: conf/global_settings.py:51
-msgid "Japanese"
-msgstr "יפנית - Japanese"
-
-#: conf/global_settings.py:52
-msgid "Dutch"
-msgstr "הולנדית - Dutch"
-
-#: conf/global_settings.py:53
-msgid "Norwegian"
-msgstr "נורווגית - Norwegian"
-
-#: conf/global_settings.py:54
-msgid "Brazilian"
-msgstr "ברזילאית - Brazilian"
-
-#: conf/global_settings.py:55
-msgid "Romanian"
-msgstr "רומנית - Romanian"
-
-#: conf/global_settings.py:56
-msgid "Russian"
-msgstr "רוסית - Russian"
-
-#: conf/global_settings.py:57
-msgid "Slovak"
-msgstr "סלובקית - Slovak"
-
-#: conf/global_settings.py:58
-msgid "Slovenian"
-msgstr "סלובנית - Slovenian"
-
-#: conf/global_settings.py:59
-msgid "Serbian"
-msgstr "סרבית - Serbian"
-
-#: conf/global_settings.py:60
-msgid "Swedish"
-msgstr "שוודית - Swedish"
-
-#: conf/global_settings.py:61
-msgid "Ukrainian"
-msgstr "אוקראינית - Ukrainian"
-
-#: conf/global_settings.py:62
-msgid "Simplified Chinese"
-msgstr "סינית פשוטה - Simplified·Chinese"
-
-#: conf/global_settings.py:63
-msgid "Traditional Chinese"
-msgstr "סינית מסורתית - Traditional·Chinese"
-
-#: core/validators.py:60
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "ערך זה חייב להכיל אותיות, ספרות וקווים תחתונים בלבד."
-
-#: core/validators.py:64
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr "ערך זה חייב להכיל אותיות, ספרות, מקפים, קווים תחתונים ונטויים בלבד."
-
-#: core/validators.py:72
-msgid "Uppercase letters are not allowed here."
-msgstr "אסור להשתמש באותיות גדולות."
-
-#: core/validators.py:76
-msgid "Lowercase letters are not allowed here."
-msgstr "אסור להשתמש באותיות קטנות."
-
-#: core/validators.py:83
-msgid "Enter only digits separated by commas."
-msgstr "יש להזין רק ספרות מופרדות בפסיקים."
-
-#: core/validators.py:95
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "יש להזין רק כתובות דוא\"ל מופרדות בפסיקים."
-
-#: core/validators.py:99
-msgid "Please enter a valid IP address."
-msgstr "נא להזין כתובת IP חוקית."
-
-#: core/validators.py:103
-msgid "Empty values are not allowed here."
-msgstr "חובה להזין ערך בשדה זה."
-
-#: core/validators.py:107
-msgid "Non-numeric characters aren't allowed here."
-msgstr "מותר להזין ספרות בלבד."
-
-#: core/validators.py:111
-msgid "This value can't be comprised solely of digits."
-msgstr "ערך זה אינו יכול להכיל ספרות בלבד."
-
-#: core/validators.py:116
-msgid "Enter a whole number."
-msgstr "נא להזין מספר שלם."
-
-#: core/validators.py:120
-msgid "Only alphabetical characters are allowed here."
-msgstr "יש להזין כאן אותיות בלבד."
-
-#: core/validators.py:124
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "יש להזין תאריך במבנה YYYY-MM-DD."
-
-#: core/validators.py:128
-msgid "Enter a valid time in HH:MM format."
-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."
-
-#: core/validators.py:136
-msgid "Enter a valid e-mail address."
-msgstr "יש להזין כתובת דוא\"ל חוקית."
-
-#: core/validators.py:148
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr "נא להעלות תמונה חוקית. הקובץ שהעלת אינו תמונה אומכיל תמונה מקולקלת."
-
-#: core/validators.py:155
-#, python-format
-msgid "The URL %s does not point to a valid image."
-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\" אינו חוקי."
-
-#: core/validators.py:167
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr "ה-URL‏ %s אינו מצביע לסרטון QuickTime חוקי."
-
-#: core/validators.py:171
-msgid "A valid URL is required."
-msgstr "יש להזין URL חוקי."
-
-#: core/validators.py:185
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-"יש להזין HTML חוקי. שגיאות ספציפיות:\n"
-"%s"
-
-#: core/validators.py:192
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr "מבנה XML שגוי: %s"
-
-#: core/validators.py:202
-#, python-format
-msgid "Invalid URL: %s"
-msgstr "URL שגוי: %s"
-
-#: core/validators.py:206 core/validators.py:208
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr "ה-URL‏ %s הוא קישור שבור."
-
-#: core/validators.py:214
-msgid "Enter a valid U.S. state abbreviation."
-msgstr "יש להזין קיצור חוקי למדינה בארה\"ב."
-
-#: core/validators.py:229
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgstr "שמור על לשונך! המילה %s אינה מותרת לשימוש כאן."
-
-#: core/validators.py:236
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr "תוכן השדה חייב להיות זהה לשדה '%s'."
-
-#: core/validators.py:255
-msgid "Please enter something for at least one field."
-msgstr "יש להזין תוכן בלפחות אחד מהשדות."
-
-#: core/validators.py:264 core/validators.py:275
-msgid "Please enter both fields or leave them both empty."
-msgstr "יש להזין תוכן בשני השדות או להשאיר את שניהם ריקים."
-
-#: core/validators.py:282
-#, python-format
-msgid "This field must be given if %(field)s is %(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"
-
-#: core/validators.py:313
-msgid "Duplicate values are not allowed."
-msgstr "לא ניתן להזין ערכים כפולים."
-
-#: core/validators.py:336
-#, python-format
-msgid "This value must be a power of %s."
-msgstr "ערך זה חייב להיות חזקה של %s."
-
-#: core/validators.py:347
-msgid "Please enter a valid decimal number."
-msgstr "יש להזין מספר עשרוני חוקי."
-
-#: core/validators.py:349
-#, 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:352
-#, 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:362
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "יש להעלות קובץ בגודל %s בתים לפחות."
-
-#: core/validators.py:363
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "יש לוודא שהקובץ שהעלת הוא בגודל %s בתים לכל היותר."
-
-#: core/validators.py:376
-msgid "The format for this field is wrong."
-msgstr "מבנה תוכן שדה זה שגוי."
-
-#: core/validators.py:391
-msgid "This field is invalid."
-msgstr "שדה זה אינו חוקי."
-
-#: core/validators.py:426
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr "לא ניתן לאחזר כלום מ %s."
-
-#: core/validators.py:429
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr "ה-URL·%(url)s·החזיר כותרת·Content-Type·לא חוקית·'%(contenttype)s'."
-
-#: core/validators.py:462
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr "נא לסגור את תג·%(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 ""
-"חלק מהטקסט בשורה·%(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 ""
-"\"%(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 ""
-"\"<%(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 ""
-"A·tag·on·line·%(line)s·חסרה תכונה אחת או יותר נדרשות.·(השורה·מתחילה ב·\"%"
-"(start)s\".)"
-
-#: core/validators.py:485
-#, python-format
+#: contrib/flatpages/models.py:8
msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
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 "%(object)s עם %(type)s קיים כבר עבור %(field)s נתון."
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s·עם·%(fieldname)s·זה קיימת כבר."
-
-#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
-#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "יש להזין תוכן בשדה זה."
-
-#: db/models/fields/__init__.py:337
-msgid "This value must be an integer."
-msgstr "ערך זה חייב להיות מספר שלם."
-
-#: db/models/fields/__init__.py:369
-msgid "This value must be either True or False."
-msgstr "ערך זה חייב להיות אמת או שקר."
+"לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף."
-#: db/models/fields/__init__.py:385
-msgid "This field cannot be null."
-msgstr "שדה זה אינו יכול להכיל null."
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "כותרת"
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "יש להזין שם קובץ חוקי."
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "תוכן"
-#: db/models/fields/related.py:43
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "יש להזין %s חוקי."
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "אפשר תגובות"
-#: db/models/fields/related.py:579
-msgid "Separate multiple IDs with commas."
-msgstr "יש להפריד מזהים מרובים בפסיקים."
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "שם תבנית"
-#: db/models/fields/related.py:581
+#: contrib/flatpages/models.py:13
msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
+"use 'flatpages/default'."
msgstr ""
-"החזק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד."
-
-#: db/models/fields/related.py:625
-#, python-format
-msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr "נא להזין זיהוי %(self)s חוקי. הערך %(value)r אינו חוקי."
-"נא להזין זיהויי %(self)s חוקיים. הערכים %(value)r אינם חוקיים."
-
-#: forms/__init__.py:380
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgstr "נא לוודא שהטקסט שלך מכיל פחות מ %s תו."
-
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-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 "יש לבחור אפשרות חוקית; '%(data)s' אינו בין %(choices)s."
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "הקובץ שנשלח ריק."
+"דוגמא: 'flatpages/contact_page'. האם אינו קיים, המערכתתשתמש ב 'flatpages/"
+"default'."
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "חש להזין מספר שלם בין ‎-32,768 ל- 32,767."
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "הרשמה נדרשת"
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "יש להזין מספר חיובי."
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "אם זה מסומך, רק משתמשים מחוברים יוכלו לצפות בדף."
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "יש להזין מספר שלם בין 0 ל- 32,767."
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "דף פשוט"
-#: template/defaultfilters.py:379
-msgid "yes,no,maybe"
-msgstr "כן,לא,אולי"
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "דפים פשוטים"
diff --git a/django/conf/locale/he/LC_MESSAGES/djangojs.mo b/django/conf/locale/he/LC_MESSAGES/djangojs.mo
index 4441ea84e6..2539598770 100644
--- a/django/conf/locale/he/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/he/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/he/LC_MESSAGES/djangojs.po b/django/conf/locale/he/LC_MESSAGES/djangojs.po
index ce5b25568c..75b53dd8db 100644
--- a/django/conf/locale/he/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/he/LC_MESSAGES/djangojs.po
@@ -2,7 +2,6 @@
# Copyright (C) 2006 THE djangojs'S COPYRIGHT HOLDER
# This file is distributed under the same license as the djangojs package.
# Meir Kriheli <meir@mksoft.co.il>, 2006.
-# , fuzzy
#
#
msgid ""
@@ -53,7 +52,7 @@ 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"
diff --git a/django/conf/locale/pl/LC_MESSAGES/django.mo b/django/conf/locale/pl/LC_MESSAGES/django.mo
index 3e748781ac..f7fad56339 100644
--- a/django/conf/locale/pl/LC_MESSAGES/django.mo
+++ b/django/conf/locale/pl/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/pl/LC_MESSAGES/django.po b/django/conf/locale/pl/LC_MESSAGES/django.po
index dee8dbf226..b6449e22b0 100644
--- a/django/conf/locale/pl/LC_MESSAGES/django.po
+++ b/django/conf/locale/pl/LC_MESSAGES/django.po
@@ -11,7 +11,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-16 10:13+0200\n"
"PO-Revision-Date: 2006-02-21 11:10+0100\n"
-"Last-Translator: GNOME PL Team <translators@gnome.pl>\n"
+"Last-Translator: Piotr Maliński <admin@rk.edu.pl>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +19,7 @@ msgstr ""
#: contrib/comments/models.py:67 contrib/comments/models.py:166
msgid "object ID"
-msgstr ""
+msgstr "ID obiektu"
#: contrib/comments/models.py:68
msgid "headline"
@@ -32,43 +32,43 @@ msgstr "komentarz"
#: contrib/comments/models.py:70
msgid "rating #1"
-msgstr ""
+msgstr "ocena #1"
#: contrib/comments/models.py:71
msgid "rating #2"
-msgstr ""
+msgstr "ocena #2"
#: contrib/comments/models.py:72
msgid "rating #3"
-msgstr ""
+msgstr "ocena #3"
#: contrib/comments/models.py:73
msgid "rating #4"
-msgstr ""
+msgstr "ocena #4"
#: contrib/comments/models.py:74
msgid "rating #5"
-msgstr ""
+msgstr "ocena #5"
#: contrib/comments/models.py:75
msgid "rating #6"
-msgstr ""
+msgstr "ocena #6"
#: contrib/comments/models.py:76
msgid "rating #7"
-msgstr ""
+msgstr "ocena #7"
#: contrib/comments/models.py:77
msgid "rating #8"
-msgstr ""
+msgstr "ocena #8"
#: contrib/comments/models.py:82
msgid "is valid rating"
-msgstr ""
+msgstr "jest poprawną oceną"
#: contrib/comments/models.py:83 contrib/comments/models.py:169
msgid "date/time submitted"
-msgstr ""
+msgstr "data/czas dodania"
#: contrib/comments/models.py:84 contrib/comments/models.py:170
msgid "is public"
@@ -87,15 +87,16 @@ msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead."
msgstr ""
+"Zaznacz to pole jeżeli komentarz jest nieodpowiedni. Wyświetlony zostanie tekst \"Ten "
+"komentarz został usunięty\". "
#: contrib/comments/models.py:91
-#, fuzzy
msgid "comments"
-msgstr "komentarz"
+msgstr "komentarze"
#: contrib/comments/models.py:131 contrib/comments/models.py:207
msgid "Content object"
-msgstr ""
+msgstr "Obiekt Treści"
#: contrib/comments/models.py:159
#, python-format
@@ -106,6 +107,11 @@ msgid ""
"\n"
"http://%(domain)s%(url)s"
msgstr ""
+"Dodane przez %(user)s dnia %(date)s\n"
+"\n"
+"%(comment)y\n"
+"\n"
+"http://%(domain)s%(url)s"
#: contrib/comments/models.py:168
msgid "person's name"
@@ -122,12 +128,12 @@ msgstr "zaakceptowano"
#: contrib/comments/models.py:176
#, fuzzy
msgid "free comment"
-msgstr "Wolny komentarz"
+msgstr "wolny komentarz"
#: contrib/comments/models.py:177
#, fuzzy
msgid "free comments"
-msgstr "Wolne komentarze"
+msgstr "wolne komentarze"
#: contrib/comments/models.py:233
msgid "score"
@@ -135,7 +141,7 @@ msgstr "ilość punktów"
#: contrib/comments/models.py:234
msgid "score date"
-msgstr ""
+msgstr "data przyznania punktów"
#: contrib/comments/models.py:237
#, fuzzy
@@ -144,12 +150,12 @@ msgstr "ilość punktów"
#: contrib/comments/models.py:238
msgid "karma scores"
-msgstr ""
+msgstr "wyniki"
#: contrib/comments/models.py:242
#, python-format
msgid "%(score)d rating by %(user)s"
-msgstr ""
+msgstr "%(score)d ocenę przez %(user)s"
#: contrib/comments/models.py:258
#, python-format
@@ -158,57 +164,62 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
+"Komentarz oflagowany przez %(user)s:\n"
+"\n"
+"%(text)s"
#: contrib/comments/models.py:265
msgid "flag date"
-msgstr ""
+msgstr "data flagi"
#: contrib/comments/models.py:268
msgid "user flag"
-msgstr ""
+msgstr "flaga użytkownika"
#: contrib/comments/models.py:269
msgid "user flags"
-msgstr ""
+msgstr "flagi użytkownika"
#: contrib/comments/models.py:273
#, python-format
msgid "Flag by %r"
-msgstr ""
+msgstr "Flaga %r"
#: contrib/comments/models.py:278
msgid "deletion date"
-msgstr ""
+msgstr "data skasowania"
#: contrib/comments/models.py:280
msgid "moderator deletion"
-msgstr ""
+msgstr "usunięcie moderatora"
#: contrib/comments/models.py:281
msgid "moderator deletions"
-msgstr ""
+msgstr "usunięcia moderatorów"
#: contrib/comments/models.py:285
#, python-format
msgid "Moderator deletion by %r"
-msgstr ""
+msgstr "Usunięcie moderatora przez %r"
#: contrib/comments/views/karma.py:19
msgid "Anonymous users cannot vote"
-msgstr ""
+msgstr "Anonimowi użytkownicy nie mogą głosować"
#: contrib/comments/views/karma.py:23
msgid "Invalid comment ID"
-msgstr ""
+msgstr "Błędny ID komentarza"
#: contrib/comments/views/karma.py:25
msgid "No voting for yourself"
-msgstr ""
+msgstr "Nie można głosować na siebie"
#: contrib/comments/views/comments.py:28
msgid ""
"This rating is required because you've entered at least one other rating."
msgstr ""
+"Ta ocena jest wymagana gdyż podałeś przynajmniej jedną inną ocenę."
+
#: contrib/comments/views/comments.py:112
#, python-format
@@ -236,12 +247,12 @@ msgstr ""
#: contrib/comments/views/comments.py:189
#: contrib/comments/views/comments.py:280
msgid "Only POSTs are allowed"
-msgstr ""
+msgstr "Dozwolone tylko POSTy"
#: 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 "Jedno lub więcej wymaganych pól nie zostało wypełnionych"
#: contrib/comments/views/comments.py:197
#: contrib/comments/views/comments.py:286
@@ -264,17 +275,16 @@ msgstr ""
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/login.html:17
msgid "Username:"
-msgstr "Nazwa użytkownika"
+msgstr "Nazwa użytkownika:"
#: contrib/comments/templates/comments/form.html:6
#: contrib/admin/templates/admin/login.html:20
msgid "Password:"
-msgstr "Hasło"
+msgstr "Hasło:"
#: contrib/comments/templates/comments/form.html:6
-#, fuzzy
msgid "Forgotten your password?"
-msgstr "Zmień hasło"
+msgstr "Zapomniałeś hasło?"
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/object_history.html:3
@@ -385,7 +395,7 @@ msgstr "id obiektu"
#: contrib/admin/models.py:20
msgid "object repr"
-msgstr ""
+msgstr "reprezentacj obiektu"
#: contrib/admin/models.py:21
msgid "action flag"
@@ -426,12 +436,16 @@ msgid ""
"Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved."
msgstr ""
+"Zaloguj się ponownie. Twoja sesja wygasła lecz twoje zgłoszenie "
+"zostało zapisane."
#: contrib/admin/views/decorators.py:68
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
msgstr ""
+"Twoja przeglądarka nie chce akceptować ciasteczek. Zmień "
+"jej ustawienia i spróbuj ponownie."
#: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character."
@@ -449,16 +463,16 @@ msgstr "Administracja stroną"
#: contrib/admin/views/main.py:260
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" dodany pomyślnie."
#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
msgid "You may edit it again below."
-msgstr "Możesz to ponownie edytować poniżej."
+msgstr "Możesz ponownie edytować wpis poniżej."
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format
msgid "You may add another %s below."
-msgstr "Możesz dodać nowe %s poniżej."
+msgstr "Możesz dodać nowy wpis %s poniżej."
#: contrib/admin/views/main.py:290
#, python-format
@@ -499,6 +513,8 @@ msgstr "%(name)s \"%(obj)s\" zostało pomyślnie zmienione."
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
+"%(name)s \"%(obj)s\" dodane pomyślnie. Możesz edytować ponownie wpis poniżej."
+
#: contrib/admin/views/main.py:392
#, python-format
@@ -508,21 +524,21 @@ msgstr "Zmień %s"
#: contrib/admin/views/main.py:470
#, python-format
msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
+msgstr "Jedno lub więcej %(fieldname)s w %(name)s: %(obj)s"
#: contrib/admin/views/main.py:475
#, python-format
msgid "One or more %(fieldname)s in %(name)s:"
-msgstr ""
+msgstr "Jedno lub więcej %(fieldname)s w %(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\" usunięty pomyślnie."
#: contrib/admin/views/main.py:511
msgid "Are you sure?"
-msgstr "Czy na pewno?"
+msgstr "Jesteś pewien?"
#: contrib/admin/views/main.py:533
#, python-format
@@ -552,7 +568,7 @@ msgstr "Wartość logiczna (True, False - prawda lub fałsz)"
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
#, python-format
msgid "String (up to %(maxlength)s)"
-msgstr ""
+msgstr "Łańcuch (do %(maxlength)s znaków)"
#: contrib/admin/views/doc.py:280
msgid "Comma-separated integers"
@@ -604,11 +620,11 @@ msgstr "URL"
#: contrib/admin/views/doc.py:301
msgid "U.S. state (two uppercase letters)"
-msgstr ""
+msgstr "Stan USA (dwie duże litery)"
#: contrib/admin/views/doc.py:302
msgid "XML text"
-msgstr "Text XML"
+msgstr "Tekst XML"
#: contrib/admin/templates/admin/object_history.html:3
#: contrib/admin/templates/admin/change_list.html:5
@@ -682,6 +698,8 @@ msgid ""
"This object doesn't have a change history. It probably wasn't added via this "
"admin site."
msgstr ""
+"Ten obiekt nie ma historii zmian. Najprawdopodobniej wpis te nie "
+"został dodany poprzez panel admina"
#: contrib/admin/templates/admin/base_site.html:4
msgid "Django site admin"
@@ -701,13 +719,15 @@ msgstr "Bład serwera (500)"
#: contrib/admin/templates/admin/500.html:9
msgid "Server Error <em>(500)</em>"
-msgstr ""
+msgstr "Błąd Serwera <em>(500)</em>"
#: contrib/admin/templates/admin/500.html:10
msgid ""
"There's been an error. It's been reported to the site administrators via e-"
"mail and should be fixed shortly. Thanks for your patience."
msgstr ""
+"Wystąpił niespodziewany błąd. Raport został wysłany emailem "
+"administratorowi strony."
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
@@ -716,12 +736,12 @@ msgstr "Strona nie znaleziona"
#: contrib/admin/templates/admin/404.html:10
msgid "We're sorry, but the requested page could not be found."
-msgstr ""
+msgstr "Niestety nie można znaleźć rządanej strony."
#: contrib/admin/templates/admin/index.html:17
#, python-format
msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Modele dostępne w aplikacji %(name)s."
#: contrib/admin/templates/admin/index.html:28
#: contrib/admin/templates/admin/change_form.html:15
@@ -734,7 +754,7 @@ msgstr "Zmień"
#: contrib/admin/templates/admin/index.html:44
msgid "You don't have permission to edit anything."
-msgstr ""
+msgstr "Nie masz uprawnień by edytować cokolwiek"
#: contrib/admin/templates/admin/index.html:52
msgid "Recent Actions"
@@ -746,7 +766,7 @@ msgstr "Moje akcje"
#: contrib/admin/templates/admin/index.html:57
msgid "None available"
-msgstr "Nic nie dostępne"
+msgstr "Brak"
#: contrib/admin/templates/admin/change_list.html:11
#, python-format
@@ -756,7 +776,7 @@ msgstr "Dodaj %(name)s"
#: contrib/admin/templates/admin/login.html:22
msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
msgstr ""
-"Czy aby na pewno <a href=\"/password_reset/\">zapomniałeś/łaś</a> hasła?"
+"Czy <a href=\"/password_reset/\">zapomniałeś/łaś</a> hasła?"
#: contrib/admin/templates/admin/base.html:23
msgid "Welcome,"
@@ -816,11 +836,11 @@ msgstr "Porządek:"
#: contrib/admin/templates/admin/submit_line.html:4
msgid "Save as new"
-msgstr "Zapisz"
+msgstr "Zapisz jako nowe"
#: contrib/admin/templates/admin/submit_line.html:5
msgid "Save and add another"
-msgstr "Zapisz i dodaj"
+msgstr "Zapisz i dodaj nowe"
#: contrib/admin/templates/admin/submit_line.html:6
msgid "Save and continue editing"
@@ -858,6 +878,8 @@ msgid ""
"Forgotten your password? Enter your e-mail address below, and we'll reset "
"your password and e-mail the new one to you."
msgstr ""
+"Podaj swój adres email. Hasło zostanie zresetowane i wysłane na twój "
+"adres email."
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "E-mail address:"
@@ -869,7 +891,7 @@ msgstr "Zresetuj moje hasło"
#: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today."
-msgstr ""
+msgstr "Dziękujemy za odwiedzenie serwisu."
#: contrib/admin/templates/registration/logged_out.html:10
msgid "Log in again"
@@ -878,19 +900,21 @@ msgstr "Zaloguj ponownie"
#: contrib/admin/templates/registration/password_reset_done.html:6
#: contrib/admin/templates/registration/password_reset_done.html:10
msgid "Password reset successful"
-msgstr ""
+msgstr "Udane resetowanie hasła"
#: contrib/admin/templates/registration/password_reset_done.html:12
msgid ""
"We've e-mailed a new password to the e-mail address you submitted. You "
"should be receiving it shortly."
msgstr ""
+"Nowe hasło zostało wysłane na podany adres email. Powinieneś "
+"otrzymać je niebawem."
#: contrib/admin/templates/registration/password_change_form.html:12
msgid ""
"Please enter your old password, for security's sake, and then enter your new "
"password twice so we can verify you typed it in correctly."
-msgstr ""
+msgstr "Podaj swoje stare hasło i dwa razy nowe."
#: contrib/admin/templates/registration/password_change_form.html:17
msgid "Old password:"
@@ -910,12 +934,12 @@ msgstr "Zmień hasło"
#: contrib/admin/templates/registration/password_reset_email.html:2
msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
+msgstr "Otrzymałeś email gdyż zarządałeś zresetowania hasła"
#: contrib/admin/templates/registration/password_reset_email.html:3
#, python-format
msgid "for your user account at %(site_name)s"
-msgstr ""
+msgstr "dla twojego konta użytkownika na stronie %(site_name)s"
#: contrib/admin/templates/registration/password_reset_email.html:5
#, python-format
@@ -924,11 +948,11 @@ msgstr "Twoje nowe hasło to: %(new_password)s"
#: contrib/admin/templates/registration/password_reset_email.html:7
msgid "Feel free to change this password by going to this page:"
-msgstr ""
+msgstr "Możesz zmienić je na stronie:"
#: contrib/admin/templates/registration/password_reset_email.html:11
msgid "Your username, in case you've forgotten:"
-msgstr ""
+msgstr "Twój login:"
#: contrib/admin/templates/registration/password_reset_email.html:13
msgid "Thanks for using our site!"
@@ -960,7 +984,7 @@ msgstr ""
#: contrib/admin/templates/admin_doc/bookmarklets.html:19
msgid "Documentation for this page"
-msgstr ""
+msgstr "Dokumentacja dla tej strony"
#: contrib/admin/templates/admin_doc/bookmarklets.html:20
msgid ""
@@ -970,37 +994,39 @@ msgstr ""
#: contrib/admin/templates/admin_doc/bookmarklets.html:22
msgid "Show object ID"
-msgstr ""
+msgstr "Pokaż ID obiektu"
#: contrib/admin/templates/admin_doc/bookmarklets.html:23
msgid ""
"Shows the content-type and unique ID for pages that represent a single "
"object."
msgstr ""
+"Pokazuje typ i unikalne ID dla stron, które reprezentują "
+"pojedynczy obiekt."
#: contrib/admin/templates/admin_doc/bookmarklets.html:25
msgid "Edit this object (current window)"
-msgstr ""
+msgstr "Edytuj ten obiekt (bierzące okno)"
#: contrib/admin/templates/admin_doc/bookmarklets.html:26
msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
+msgstr "Przeskok do panelu admina dla stron reprezentujących pojedynczy obiekt"
#: contrib/admin/templates/admin_doc/bookmarklets.html:28
msgid "Edit this object (new window)"
-msgstr ""
+msgstr "Edytuj ten obiekt (nowe onko)"
#: contrib/admin/templates/admin_doc/bookmarklets.html:29
msgid "As above, but opens the admin page in a new window."
-msgstr ""
+msgstr "Jak wyżej, tyle że otwiera nowe okno."
#: contrib/admin/templates/widget/date_time.html:3
msgid "Date:"
-msgstr "data"
+msgstr "Data:"
#: contrib/admin/templates/widget/date_time.html:4
msgid "Time:"
-msgstr "Czas"
+msgstr "Czas:"
#: contrib/admin/templates/widget/file.html:2
msgid "Currently:"
@@ -1012,36 +1038,40 @@ msgstr "Zmień:"
#: contrib/redirects/models.py:7
msgid "redirect from"
-msgstr ""
+msgstr "przekieruj z"
#: contrib/redirects/models.py:8
msgid ""
"This should be an absolute path, excluding the domain name. Example: '/"
"events/search/'."
msgstr ""
+"Podaj pełną ścieżkę bez nazwy domeny. Przykład: '/"
+"events/search/'."
#: contrib/redirects/models.py:9
msgid "redirect to"
-msgstr ""
+msgstr "przekierowanie do"
#: contrib/redirects/models.py:10
msgid ""
"This can be either an absolute path (as above) or a full URL starting with "
"'http://'."
-msgstr ""
+msgstr "Ścieżka jak wyżej lub pełny URL z http://"
#: contrib/redirects/models.py:12
msgid "redirect"
-msgstr ""
+msgstr "przekieruj"
#: contrib/redirects/models.py:13
msgid "redirects"
-msgstr ""
+msgstr "przekierowania"
#: contrib/flatpages/models.py:8
msgid ""
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
msgstr ""
+"Przykład: '/about/contact/'. Upewnij się że wpisałeś otwierający i zamykający slash."
+
#: contrib/flatpages/models.py:9
msgid "title"
@@ -1053,11 +1083,11 @@ msgstr "zawartość"
#: contrib/flatpages/models.py:11
msgid "enable comments"
-msgstr ""
+msgstr "włącz komentarze"
#: contrib/flatpages/models.py:12
msgid "template name"
-msgstr ""
+msgstr "nazwa szablonu"
#: contrib/flatpages/models.py:13
msgid ""
@@ -1067,11 +1097,11 @@ msgstr ""
#: contrib/flatpages/models.py:14
msgid "registration required"
-msgstr ""
+msgstr "wymagana rejestracja"
#: contrib/flatpages/models.py:14
msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
+msgstr "Jeżeli zaznaczone - tylko zalogowani użytkownicy będą mogli zobaczyć stronę."
#: contrib/flatpages/models.py:18
msgid "flat page"
@@ -1091,31 +1121,31 @@ msgstr ""
#: contrib/auth/models.py:17
msgid "permission"
-msgstr ""
+msgstr "uprawnienie"
#: contrib/auth/models.py:18 contrib/auth/models.py:27
msgid "permissions"
-msgstr ""
+msgstr "uprawnienia"
#: contrib/auth/models.py:29
msgid "group"
-msgstr ""
+msgstr "grupa"
#: contrib/auth/models.py:30 contrib/auth/models.py:65
msgid "groups"
-msgstr ""
+msgstr "grupy"
#: contrib/auth/models.py:55
msgid "username"
-msgstr ""
+msgstr "użytkownik"
#: contrib/auth/models.py:56
msgid "first name"
-msgstr ""
+msgstr "Imię"
#: contrib/auth/models.py:57
msgid "last name"
-msgstr ""
+msgstr "Nazwisko"
#: contrib/auth/models.py:58
msgid "e-mail address"
@@ -1127,15 +1157,15 @@ msgstr "hasło"
#: contrib/auth/models.py:59
msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr ""
+msgstr "Użyj '[algo]$[salt]$[hexdigest]'"
#: contrib/auth/models.py:60
msgid "staff status"
-msgstr ""
+msgstr "stan w zespole"
#: contrib/auth/models.py:60
msgid "Designates whether the user can log into this admin site."
-msgstr ""
+msgstr "Oznaczy czy użytkownik może zalogować się do panelu admina."
#: contrib/auth/models.py:61
msgid "active"
@@ -1143,7 +1173,7 @@ msgstr "aktywny"
#: contrib/auth/models.py:62
msgid "superuser status"
-msgstr ""
+msgstr "Główny Administrator"
#: contrib/auth/models.py:63
msgid "last login"
@@ -1158,10 +1188,12 @@ msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
msgstr ""
+"Oprócz uprawnień przypisanych bezpośrednio użytkownikowi otrzyma on "
+"uprawnienia grup, do których należy."
#: contrib/auth/models.py:67
msgid "user permissions"
-msgstr ""
+msgstr "uprawnienia użytkownika"
#: contrib/auth/models.py:70
#, fuzzy
@@ -1175,62 +1207,64 @@ msgstr "Uzytkownicy"
#: contrib/auth/models.py:76
msgid "Personal info"
-msgstr ""
+msgstr "Dane osobowe"
#: contrib/auth/models.py:77
msgid "Permissions"
-msgstr ""
+msgstr "Uprawnienia"
#: contrib/auth/models.py:78
msgid "Important dates"
-msgstr ""
+msgstr "Ważne daty"
#: contrib/auth/models.py:79
msgid "Groups"
-msgstr ""
+msgstr "Grupy"
#: contrib/auth/models.py:219
#, fuzzy
msgid "message"
-msgstr "Wiadomość"
+msgstr "wiadomość"
#: contrib/auth/forms.py:30
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in."
msgstr ""
+"Twoja przeglądarka nie chce akceptować ciasteczek. Są one "
+"wymagane do zalogowania się."
#: contrib/contenttypes/models.py:25
msgid "python model class name"
-msgstr ""
+msgstr "nazwa pythonowa modelu klasy"
#: contrib/contenttypes/models.py:28
msgid "content type"
-msgstr ""
+msgstr "typ zawartości"
#: contrib/contenttypes/models.py:29
msgid "content types"
-msgstr ""
+msgstr "typy zawartości"
#: contrib/sessions/models.py:35
msgid "session key"
-msgstr ""
+msgstr "klucz sesji"
#: contrib/sessions/models.py:36
msgid "session data"
-msgstr ""
+msgstr "data sesji"
#: contrib/sessions/models.py:37
msgid "expire date"
-msgstr ""
+msgstr "data wygaśnięcia sesji"
#: contrib/sessions/models.py:41
msgid "session"
-msgstr ""
+msgstr "sesja"
#: contrib/sessions/models.py:42
msgid "sessions"
-msgstr ""
+msgstr "sesje"
#: contrib/sites/models.py:10
msgid "domain name"
@@ -1250,15 +1284,15 @@ msgstr "strony"
#: utils/translation.py:360
msgid "DATE_FORMAT"
-msgstr "FORMAT_DATY"
+msgstr "Y-m-d"
#: utils/translation.py:361
msgid "DATETIME_FORMAT"
-msgstr ""
+msgstr "Y-m-d H:i:s"
#: utils/translation.py:362
msgid "TIME_FORMAT"
-msgstr ""
+msgstr "H:i:s"
#: utils/dates.py:6
msgid "Monday"
@@ -1339,52 +1373,51 @@ msgstr "Grudzień"
#: utils/dates.py:19
#, fuzzy
msgid "jan"
-msgstr "i"
+msgstr "sty"
#: utils/dates.py:19
msgid "feb"
-msgstr ""
+msgstr "luty"
#: utils/dates.py:19
msgid "mar"
-msgstr ""
+msgstr "marz"
#: utils/dates.py:19
msgid "apr"
-msgstr ""
+msgstr "kwie"
#: utils/dates.py:19
-#, fuzzy
msgid "may"
-msgstr "dzień"
+msgstr "maj"
#: utils/dates.py:19
msgid "jun"
-msgstr ""
+msgstr "czerw"
#: utils/dates.py:20
msgid "jul"
-msgstr ""
+msgstr "lip"
#: utils/dates.py:20
msgid "aug"
-msgstr ""
+msgstr "sier"
#: utils/dates.py:20
msgid "sep"
-msgstr ""
+msgstr "wrze"
#: utils/dates.py:20
msgid "oct"
-msgstr ""
+msgstr "paź"
#: utils/dates.py:20
msgid "nov"
-msgstr ""
+msgstr "list"
#: utils/dates.py:20
msgid "dec"
-msgstr ""
+msgstr "gru"
#: utils/dates.py:27
msgid "Jan."
@@ -1396,7 +1429,7 @@ msgstr "Lut."
#: utils/dates.py:28
msgid "Aug."
-msgstr "Sier.."
+msgstr "Sier."
#: utils/dates.py:28
msgid "Sept."
@@ -1415,31 +1448,28 @@ msgid "Dec."
msgstr "Gru."
#: utils/timesince.py:12
-#, fuzzy
msgid "year"
msgid_plural "years"
msgstr[0] "rok"
-msgstr[1] "rok"
+msgstr[1] "lat"
#: utils/timesince.py:13
-#, fuzzy
msgid "month"
msgid_plural "months"
msgstr[0] "miesiąc"
-msgstr[1] "miesiąc"
+msgstr[1] "miesięcy"
#: utils/timesince.py:14
msgid "week"
msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "tydzień"
+msgstr[1] "tygodni"
#: utils/timesince.py:15
-#, fuzzy
msgid "day"
msgid_plural "days"
msgstr[0] "dzień"
-msgstr[1] "dzień"
+msgstr[1] "dni"
#: utils/timesince.py:16
#, fuzzy
@@ -1449,11 +1479,10 @@ msgstr[0] "godzina"
msgstr[1] "godzina"
#: utils/timesince.py:17
-#, fuzzy
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minuta"
-msgstr[1] "minuta"
+msgstr[1] "minut"
#: conf/global_settings.py:37
msgid "Bengali"
@@ -1477,7 +1506,7 @@ msgstr "Niemiecki"
#: conf/global_settings.py:42
msgid "Greek"
-msgstr ""
+msgstr "Grecki"
#: conf/global_settings.py:43
msgid "English"
@@ -1501,7 +1530,7 @@ msgstr ""
#: conf/global_settings.py:48
msgid "Hebrew"
-msgstr ""
+msgstr "Hebrajski"
#: conf/global_settings.py:49
msgid "Icelandic"
@@ -1517,7 +1546,7 @@ msgstr "Japoński"
#: conf/global_settings.py:52
msgid "Dutch"
-msgstr ""
+msgstr "Holenderski"
#: conf/global_settings.py:53
msgid "Norwegian"
@@ -1570,11 +1599,10 @@ msgid "This value must contain only letters, numbers and underscores."
msgstr "To pole możei zawierać tylko litery, cyfry i podkreślenia"
#: core/validators.py:64
-#, fuzzy
msgid ""
"This value must contain only letters, numbers, underscores, dashes or "
"slashes."
-msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i slasze"
+msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i slasze."
#: core/validators.py:72
msgid "Uppercase letters are not allowed here."
@@ -1606,7 +1634,7 @@ msgstr "Tu mogą być tylko cyfry"
#: core/validators.py:111
msgid "This value can't be comprised solely of digits."
-msgstr ""
+msgstr "To pole nie może zawierać jedynie cyfr."
#: core/validators.py:116
msgid "Enter a whole number."
@@ -1777,6 +1805,7 @@ msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr ""
+
#: core/validators.py:462
#, python-format
msgid ""
diff --git a/django/conf/locale/ru/LC_MESSAGES/django.mo b/django/conf/locale/ru/LC_MESSAGES/django.mo
index 6fb7a4929c..562996eee5 100644
--- a/django/conf/locale/ru/LC_MESSAGES/django.mo
+++ b/django/conf/locale/ru/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/ru/LC_MESSAGES/django.po b/django/conf/locale/ru/LC_MESSAGES/django.po
index a9901b5342..024b2bfc12 100644
--- a/django/conf/locale/ru/LC_MESSAGES/django.po
+++ b/django/conf/locale/ru/LC_MESSAGES/django.po
@@ -125,12 +125,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 "Свободные комментарии"
@@ -143,13 +141,12 @@ msgid "score date"
msgstr "счёт времени"
#: contrib/comments/models.py:237
-#, fuzzy
msgid "karma score"
-msgstr "счёт"
+msgstr "Карма счёт"
#: contrib/comments/models.py:238
msgid "karma scores"
-msgstr ""
+msgstr "Карма счета"
#: contrib/comments/models.py:242
#, python-format
@@ -172,12 +169,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 "Признаки пользователя"
@@ -191,14 +186,12 @@ msgid "deletion date"
msgstr "дата удаления"
#: contrib/comments/models.py:280
-#, fuzzy
msgid "moderator deletion"
-msgstr "Удалено модератором"
+msgstr "Удаленно модератором"
#: contrib/comments/models.py:281
-#, fuzzy
msgid "moderator deletions"
-msgstr "Удалено модератором"
+msgstr "Удаления модератором"
#: contrib/comments/models.py:285
#, python-format
@@ -742,7 +735,7 @@ 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
@@ -818,11 +811,11 @@ 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."
@@ -832,7 +825,7 @@ msgstr[1] "Пожалуйста исправьте ошибки ниже."
#: contrib/admin/templates/admin/change_form.html:48
msgid "Ordering"
-msgstr ""
+msgstr "Очерёдность"
#: contrib/admin/templates/admin/change_form.html:51
msgid "Order:"
@@ -967,11 +960,11 @@ msgstr "Спасибо за посещение нашего сайта!"
#: contrib/admin/templates/registration/password_reset_email.html:15
#, python-format
msgid "The %(site_name)s team"
-msgstr "Команда сайта di %(site_name)s"
+msgstr "Команда сайта %(site_name)s"
#: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Bookmarklets"
-msgstr ""
+msgstr "Закладки"
#: contrib/admin/templates/admin_doc/bookmarklets.html:5
msgid "Documentation bookmarklets"
@@ -1018,7 +1011,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)"
@@ -1129,22 +1122,18 @@ msgid "codename"
msgstr "код"
#: contrib/auth/models.py:17
-#, fuzzy
msgid "permission"
msgstr "Права"
#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
msgid "permissions"
msgstr "Права"
#: contrib/auth/models.py:29
-#, fuzzy
msgid "group"
msgstr "Группа"
#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
msgid "groups"
msgstr "Группы"
@@ -1205,17 +1194,14 @@ msgstr ""
"все права группы, к которой он принадлежит."
#: contrib/auth/models.py:67
-#, fuzzy
msgid "user permissions"
-msgstr "Права"
+msgstr "Права пользователя"
#: contrib/auth/models.py:70
-#, fuzzy
msgid "user"
msgstr "Пользователь"
#: contrib/auth/models.py:71
-#, fuzzy
msgid "users"
msgstr "Пользователи"
@@ -1236,7 +1222,6 @@ msgid "Groups"
msgstr "Группы"
#: contrib/auth/models.py:219
-#, fuzzy
msgid "message"
msgstr "Сообщение"
@@ -1247,9 +1232,8 @@ msgid ""
msgstr ""
#: contrib/contenttypes/models.py:25
-#, fuzzy
msgid "python model class name"
-msgstr "имя python модуля"
+msgstr "имя класса python модуля"
#: contrib/contenttypes/models.py:28
msgid "content type"
@@ -1384,54 +1368,52 @@ msgid "December"
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
-#, fuzzy
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."
@@ -1476,8 +1458,8 @@ 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"
@@ -1610,11 +1592,11 @@ msgid "This value must contain only letters, numbers and underscores."
msgstr "Значение может содержать только буквы, цифры и подчеркивания."
#: core/validators.py:64
-#, fuzzy
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."
diff --git a/django/conf/locale/sk/LC_MESSAGES/django.mo b/django/conf/locale/sk/LC_MESSAGES/django.mo
index bf2ff58d36..c6ac1c9612 100644
--- a/django/conf/locale/sk/LC_MESSAGES/django.mo
+++ b/django/conf/locale/sk/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/sk/LC_MESSAGES/django.po b/django/conf/locale/sk/LC_MESSAGES/django.po
index 7cedb35c8a..4e1dba2a49 100644
--- a/django/conf/locale/sk/LC_MESSAGES/django.po
+++ b/django/conf/locale/sk/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 10:12+0200\n"
+"POT-Creation-Date: 2006-05-27 07:31-0400\n"
"PO-Revision-Date: 2005-11-10 23:22-0500\n"
"Last-Translator: Vladimir Labath <vlado@labath.org>\n"
"Language-Team: Slovak <sk@li.org>\n"
@@ -16,6 +16,178 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: contrib/contenttypes/models.py:25
+msgid "python model class name"
+msgstr "pythonové meno triedy modelu"
+
+#: contrib/contenttypes/models.py:28
+msgid "content type"
+msgstr "typ obsahu"
+
+#: contrib/contenttypes/models.py:29
+msgid "content types"
+msgstr "typy obsahu"
+
+#: contrib/auth/models.py:13 contrib/auth/models.py:26
+msgid "name"
+msgstr "meno"
+
+#: contrib/auth/models.py:15
+msgid "codename"
+msgstr "codename"
+
+#: contrib/auth/models.py:17
+msgid "permission"
+msgstr "povolenie"
+
+#: contrib/auth/models.py:18 contrib/auth/models.py:27
+msgid "permissions"
+msgstr "povolenia"
+
+#: contrib/auth/models.py:29
+msgid "group"
+msgstr "skupina"
+
+#: contrib/auth/models.py:30 contrib/auth/models.py:65
+msgid "groups"
+msgstr "skupiny"
+
+#: contrib/auth/models.py:55
+msgid "username"
+msgstr "užívateľské meno"
+
+#: contrib/auth/models.py:56
+msgid "first name"
+msgstr "krstné meno"
+
+#: contrib/auth/models.py:57
+msgid "last name"
+msgstr "priezvisko"
+
+#: contrib/auth/models.py:58
+msgid "e-mail address"
+msgstr "e-mailová adresa"
+
+#: contrib/auth/models.py:59
+msgid "password"
+msgstr "heslo"
+
+#: contrib/auth/models.py:59
+msgid "Use '[algo]$[salt]$[hexdigest]'"
+msgstr "Použi '[algo]$[salt]$[hexdigest]'"
+
+#: contrib/auth/models.py:60
+msgid "staff status"
+msgstr "štatút zamestnanca"
+
+#: contrib/auth/models.py:60
+msgid "Designates whether the user can log into this admin site."
+msgstr "Označenie, ak užívateľ má oprávnenie vstúpiť ako administrátor."
+
+#: contrib/auth/models.py:61
+msgid "active"
+msgstr "aktívny"
+
+#: contrib/auth/models.py:62
+msgid "superuser status"
+msgstr "štatút superužívateľa"
+
+#: contrib/auth/models.py:63
+msgid "last login"
+msgstr "posledné prihlásenie"
+
+#: contrib/auth/models.py:64
+msgid "date joined"
+msgstr "dátum registrácie"
+
+#: 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 ""
+"Okrem ručne vložených povolení, tento uživateľ dostane všetky povolenia "
+"skupin, v ktorých sa nachádza."
+
+#: contrib/auth/models.py:67
+msgid "user permissions"
+msgstr "pridelené povolenia"
+
+#: contrib/auth/models.py:70
+msgid "user"
+msgstr "uživateľ"
+
+#: contrib/auth/models.py:71
+msgid "users"
+msgstr "užívatelia"
+
+#: contrib/auth/models.py:76
+msgid "Personal info"
+msgstr "Osobné údaje"
+
+#: contrib/auth/models.py:77
+msgid "Permissions"
+msgstr "Povolenia"
+
+#: contrib/auth/models.py:78
+msgid "Important dates"
+msgstr "Dôležité údaje"
+
+#: contrib/auth/models.py:79
+msgid "Groups"
+msgstr "Skupiny"
+
+#: contrib/auth/models.py:219
+msgid "message"
+msgstr "zpráva"
+
+#: contrib/auth/forms.py:30
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Vyzerá, že tvoj web prehliadač nedovoľuje prístup ku cookies. Cookies sú "
+"nevýhnutné aby si sa mohol prihlásiť."
+
+#: contrib/auth/forms.py:36 contrib/auth/forms.py:41
+#: contrib/admin/views/decorators.py:9
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Prosím, vlož spávne meno užvateľa ako aj heslo. Pripomínam, že obe polia "
+"rozlišujú malé a veľké písmena"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "presmerovaný z"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Tu by sa mala použiť absolútna cesta, bez domény. Napr.: '/events/search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "presmerovaný na "
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Tu môže byť buď absolútna cesta (ako hore) alebo plné URL začínajúce s "
+"'http://'."
+
+#: contrib/redirects/models.py:12
+msgid "redirect"
+msgstr "presmerovanie"
+
+#: contrib/redirects/models.py:13
+msgid "redirects"
+msgstr "presmerovania"
+
#: contrib/comments/models.py:67 contrib/comments/models.py:166
msgid "object ID"
msgstr "objekt ID"
@@ -73,7 +245,7 @@ msgstr "dátum/čas poslania"
msgid "is public"
msgstr "je zveréjnený"
-#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
+#: contrib/comments/models.py:85 contrib/admin/views/doc.py:292
msgid "IP address"
msgstr "IP adresa"
@@ -86,7 +258,7 @@ msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead."
msgstr ""
-"Ak je tento komentár nevhodný, tu ho poznačte. \"Tento komentár bol vymazaný"
+"Ak je tento komentár nevhodný, tu ho poznač. \"Tento komentár bol vymazaný"
"\" táto správa sa objaví namiesto neho."
#: contrib/comments/models.py:91
@@ -278,6 +450,20 @@ msgstr ""
msgid "The comment form didn't provide either 'preview' or 'post'"
msgstr "Formulár komentára neposkytuje odpoveď buď 'prezri' alebo 'pošli'"
+#: contrib/comments/templates/comments/freeform.html:4
+msgid "Your name:"
+msgstr "Tvoje meno:"
+
+#: contrib/comments/templates/comments/freeform.html:5
+#: contrib/comments/templates/comments/form.html:27
+msgid "Comment:"
+msgstr "Komentár:"
+
+#: contrib/comments/templates/comments/freeform.html:9
+#: contrib/comments/templates/comments/form.html:32
+msgid "Preview comment"
+msgstr "Pozri komentár"
+
#: contrib/comments/templates/comments/form.html:6
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/login.html:17
@@ -296,9 +482,9 @@ msgstr "Zabudol si svoje 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/change_form.html:10
#: 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
@@ -332,19 +518,93 @@ msgstr "Voliteľné"
msgid "Post a photo"
msgstr "Pošli foto"
-#: contrib/comments/templates/comments/form.html:27
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Komentár:"
+#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:303
+msgid "URL"
+msgstr "URL"
-#: contrib/comments/templates/comments/form.html:32
-#: contrib/comments/templates/comments/freeform.html:9
-msgid "Preview comment"
-msgstr "Pozri komentár"
+#: contrib/flatpages/models.py:8
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Príklad: '/about/contact/'. Uisti sa, že máš vložené ako úvodné tak aj "
+"záverečné lomítka."
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Vaše meno:"
+#: contrib/flatpages/models.py:9
+msgid "title"
+msgstr "názov"
+
+#: contrib/flatpages/models.py:10
+msgid "content"
+msgstr "obsah"
+
+#: contrib/flatpages/models.py:11
+msgid "enable comments"
+msgstr "povolené komentáre"
+
+#: contrib/flatpages/models.py:12
+msgid "template name"
+msgstr "meno predlohy"
+
+#: contrib/flatpages/models.py:13
+msgid ""
+"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
+"use 'flatpages/default'."
+msgstr ""
+"Príklad: 'flatpages/contact_page'. Ak sa toto nevykonalo, systém použije "
+"'flatpages/default'."
+
+#: contrib/flatpages/models.py:14
+msgid "registration required"
+msgstr "musíte byť zaregistrovaný"
+
+#: contrib/flatpages/models.py:14
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Ak je toto označené, potom len prihlásený užívateľ môže vidieť túto stránku."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "plochá stránka"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "ploché stránky"
+
+#: contrib/sessions/models.py:35
+msgid "session key"
+msgstr "kľúč sedenia"
+
+#: contrib/sessions/models.py:36
+msgid "session data"
+msgstr "údaje sedenia"
+
+#: contrib/sessions/models.py:37
+msgid "expire date"
+msgstr "dátum konca platnosti"
+
+#: contrib/sessions/models.py:41
+msgid "session"
+msgstr "sedenie"
+
+#: contrib/sessions/models.py:42
+msgid "sessions"
+msgstr "sedenia"
+
+#: contrib/sites/models.py:10
+msgid "domain name"
+msgstr "meno domény"
+
+#: contrib/sites/models.py:11
+msgid "display name"
+msgstr "zobrazené meno"
+
+#: contrib/sites/models.py:15
+msgid "site"
+msgstr "web"
+
+#: contrib/sites/models.py:16
+msgid "sites"
+msgstr "weby"
#: contrib/admin/filterspecs.py:40
#, python-format
@@ -410,7 +670,7 @@ msgstr "návestie udalosti"
#: contrib/admin/models.py:22
msgid "change message"
-msgstr "zmena zprávy"
+msgstr "zmeň zprávu"
#: contrib/admin/models.py:25
msgid "log entry"
@@ -424,15 +684,6 @@ msgstr "záznamy priebehu"
msgid "All dates"
msgstr "Všetky dátumy"
-#: 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 ""
-"Prosím, vložte spávne meno užvateľa ako aj heslo. Pripomínam, že obe "
-"poliarozlišujú malé a veľké písmena"
-
#: contrib/admin/views/decorators.py:23
#: contrib/admin/templates/admin/login.html:25
msgid "Log in"
@@ -443,16 +694,16 @@ msgid ""
"Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved."
msgstr ""
-"Prosím prihlaste sa znovu, lebo čas vášho sedenia vypršal. Nemajte obavy: "
-"Vaše údaje su uchované."
+"Prosím prihlas sa znovu, lebo čas tvojho sedenia vypršal. Nemaj obavy: tvoje "
+"údaje su uchované."
#: 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 ""
-"Vyzerá, že váš prehliadač nemá povolené cookies. Prosím povoľte cookies, "
-"znovu načítajte túto stránku a skúste činnosť znovu."
+"Vyzerá, že tvoj prehliadač nemá povolené cookies. Prosím, povoľ cookies, "
+"znovu načítaj túto stránku a skús činnosť znovu."
#: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character."
@@ -461,7 +712,7 @@ msgstr "Meno užívateľa nemože obsahovať znak '@' ."
#: contrib/admin/views/decorators.py:84
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Vaša e-mailova adresa nie je vaše užívateľské meno. Skúste '%s'."
+msgstr "Tvoja e-mailova adresa nie je tvoje užívateľské meno. Skús '%s'."
#: contrib/admin/views/main.py:226
msgid "Site administration"
@@ -474,12 +725,12 @@ msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne pridaný."
#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
msgid "You may edit it again below."
-msgstr "Môžete urobiť zmeny zase nižšie."
+msgstr "Môžeš urobiť zmeny zase nižšie."
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format
msgid "You may add another %s below."
-msgstr "Môžete pridať ďalší %s nižšie."
+msgstr "Môžeš pridať ďalší %s nižšie."
#: contrib/admin/views/main.py:290
#, python-format
@@ -520,7 +771,7 @@ msgstr "Objekt %(name)s \"%(obj)s\" boli úspešne zmenený."
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
-"Objekt %(name)s \"%(obj)s\" bol úspešne zmenený. Ďalšie zmeny môžete urobiť "
+"Objekt %(name)s \"%(obj)s\" bol úspešne zmenený. Ďalšie zmeny môžeš urobiť "
"zase nižšie."
#: contrib/admin/views/main.py:392
@@ -545,12 +796,12 @@ msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne vymazaný."
#: contrib/admin/views/main.py:511
msgid "Are you sure?"
-msgstr "Ste si istý?"
+msgstr "Si si istý?"
#: contrib/admin/views/main.py:533
#, python-format
msgid "Change history: %s"
-msgstr "Zmena histórie:"
+msgstr "Zmeň históriu: %s"
#: contrib/admin/views/main.py:565
#, python-format
@@ -560,84 +811,97 @@ msgstr "Výber %s"
#: contrib/admin/views/main.py:565
#, python-format
msgid "Select %s to change"
-msgstr "Výber %s na zmenu"
+msgstr "Ktorý %s sa má zmeniť?"
-#: 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: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
msgid "Integer"
msgstr "Celočíselná hodnota"
-#: contrib/admin/views/doc.py:278
+#: contrib/admin/views/doc.py:280
msgid "Boolean (Either True or False)"
msgstr "Logická hodnota (buď True alebo False)"
-#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
+#: contrib/admin/views/doc.py:281 contrib/admin/views/doc.py:299
#, python-format
msgid "String (up to %(maxlength)s)"
msgstr "Dĺžka reťazca (maximálne do %(maxlength)s)"
-#: contrib/admin/views/doc.py:280
+#: contrib/admin/views/doc.py:282
msgid "Comma-separated integers"
msgstr "Čiarka oddeľuje celé čísla"
-#: contrib/admin/views/doc.py:281
+#: contrib/admin/views/doc.py:283
msgid "Date (without time)"
msgstr "Dátum (bez času)"
-#: contrib/admin/views/doc.py:282
+#: contrib/admin/views/doc.py:284
msgid "Date (with time)"
msgstr "Dátum ( a čas)"
-#: contrib/admin/views/doc.py:283
+#: contrib/admin/views/doc.py:285
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:286 contrib/admin/views/doc.py:287
+#: contrib/admin/views/doc.py:290
msgid "File path"
msgstr "Cesta k súboru"
-#: contrib/admin/views/doc.py:285
+#: contrib/admin/views/doc.py:288
msgid "Decimal number"
msgstr "Desiatkové číslo"
-#: contrib/admin/views/doc.py:291
+#: contrib/admin/views/doc.py:294
msgid "Boolean (Either True, False or None)"
msgstr "Logická hodnota (buď True, False alebo None)"
-#: contrib/admin/views/doc.py:292
+#: contrib/admin/views/doc.py:295
msgid "Relation to parent model"
msgstr "Má vzťah na rodičovský model"
-#: contrib/admin/views/doc.py:293
+#: contrib/admin/views/doc.py:296
msgid "Phone number"
msgstr "Číslo telefónu"
-#: contrib/admin/views/doc.py:298
+#: contrib/admin/views/doc.py:301
msgid "Text"
msgstr "Text"
-#: contrib/admin/views/doc.py:299
+#: contrib/admin/views/doc.py:302
msgid "Time"
msgstr "Čas"
-#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admin/views/doc.py:301
+#: contrib/admin/views/doc.py:304
msgid "U.S. state (two uppercase letters)"
msgstr "U.S. štát (dve veľké písmena)"
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:305
msgid "XML text"
msgstr "XML text"
+#: contrib/admin/templates/widget/file.html:2
+msgid "Currently:"
+msgstr "Aktuálny:"
+
+#: contrib/admin/templates/widget/file.html:3
+msgid "Change:"
+msgstr "Zmeň:"
+
+#: contrib/admin/templates/widget/date_time.html:3
+msgid "Date:"
+msgstr "Dátum:"
+
+#: contrib/admin/templates/widget/date_time.html:4
+msgid "Time:"
+msgstr "Čas:"
+
#: 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: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
@@ -646,9 +910,9 @@ msgstr "Dokumentácia"
#: 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: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
@@ -662,14 +926,14 @@ msgstr "Dokumentácia"
#: contrib/admin/templates/admin_doc/index.html:4
#: contrib/admin/templates/admin_doc/model_index.html:5
msgid "Change password"
-msgstr "Zmena hesla"
+msgstr "Zmeň 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/500.html:4
+#: contrib/admin/templates/admin/change_form.html:13
#: 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
@@ -708,13 +972,15 @@ msgstr ""
"Tento object nemá históriu zmien. Možno nebol pridaný prostredníctvom tohoto "
"web admina"
-#: contrib/admin/templates/admin/base_site.html:4
-msgid "Django site admin"
-msgstr "Django web admin"
+#: contrib/admin/templates/admin/change_list.html:11
+#, python-format
+msgid "Add %(name)s"
+msgstr "Pridaj %(name)s"
-#: contrib/admin/templates/admin/base_site.html:7
-msgid "Django administration"
-msgstr "Administrácia Django"
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(title)s "
+msgstr " Od %(title)s "
#: contrib/admin/templates/admin/500.html:4
msgid "Server error"
@@ -733,22 +999,25 @@ 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 ""
-"Vznikla chyba. Prostredníctvom e-mailu bol o nej informovaný správca a "
-"chyba by mala byť o chviľu odstránená. Ďakujeme za vašu trpezlivosť."
+"Vznikla chyba. Prostredníctvom e-mailu bol o nej informovaný správca a táto "
+"by mala byť o chviľu odstránená. Ďakujeme za tvoju trpezlivosť."
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
-msgid "Page not found"
-msgstr "Stránka nebola nájdená"
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Go"
+msgstr "Choď"
-#: contrib/admin/templates/admin/404.html:10
-msgid "We're sorry, but the requested page could not be found."
-msgstr "Ľutujeme, ale požadovaná stránka nebola nájdená."
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django web admin"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administrácia Django"
#: contrib/admin/templates/admin/index.html:17
#, python-format
msgid "Models available in the %(name)s application."
-msgstr ""
+msgstr "Model je prístupný v %(name)s aplikácií."
#: contrib/admin/templates/admin/index.html:28
#: contrib/admin/templates/admin/change_form.html:15
@@ -761,7 +1030,7 @@ msgstr "Zmeň"
#: contrib/admin/templates/admin/index.html:44
msgid "You don't have permission to edit anything."
-msgstr "Nemáte povolenie na zmeny ."
+msgstr "Nemáš povolenie na zmeny ."
#: contrib/admin/templates/admin/index.html:52
msgid "Recent Actions"
@@ -775,14 +1044,36 @@ msgstr "Moje udalosti"
msgid "None available"
msgstr "Nepovolené"
-#: contrib/admin/templates/admin/change_list.html:11
-#, python-format
-msgid "Add %(name)s"
-msgstr "Pridaj %(name)s"
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Stránka nebola nájdená"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Ľutujeme, ale požadovaná stránka nebola nájdená."
#: contrib/admin/templates/admin/login.html:22
msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-msgstr "Zabudli ste<a href=\"/password_reset/\"> vaše heslo</a>?"
+msgstr "Zabudol si<a href=\"/password_reset/\"> svoje heslo</a>?"
+
+#: contrib/admin/templates/admin/change_form.html:21
+msgid "View on site"
+msgstr "Pozri na webe"
+
+#: contrib/admin/templates/admin/change_form.html:30
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Oprav chybu, čo je nižšie, prosím."
+msgstr[1] "Oprav chyby, čo sú nižšie, prosím."
+
+#: contrib/admin/templates/admin/change_form.html:48
+msgid "Ordering"
+msgstr "Určenie"
+
+#: contrib/admin/templates/admin/change_form.html:51
+msgid "Order:"
+msgstr "Poradie:"
#: contrib/admin/templates/admin/base.html:23
msgid "Welcome,"
@@ -800,8 +1091,8 @@ msgid ""
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
msgstr ""
-"Vymazaním objektu %(object_name)s '%(object)s' môžete spôsobiť vymazanie "
-"súvisiacich objektov, ale váš účet nemá povolenie na mazanie nasledujúcich "
+"Vymazaním objektu %(object_name)s '%(object)s' môžeš spôsobiť vymazanie "
+"súvisiacich objektov, ale tvoj účet nemá povolenie na mazanie nasledujúcich "
"typov objektov:"
#: contrib/admin/templates/admin/delete_confirmation.html:21
@@ -810,40 +1101,13 @@ msgid ""
"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
"the following related items will be deleted:"
msgstr ""
-"Ste si istý, že chcete vymazať %(object_name)s \"%(object)s\"? Všetky "
+"Si si istý, že chceš vymazať %(object_name)s \"%(object)s\"? Všetky "
"nasledujúce objekty budú tiež vymazané :"
#: contrib/admin/templates/admin/delete_confirmation.html:26
msgid "Yes, I'm sure"
msgstr "Ano, som si istý"
-#: contrib/admin/templates/admin/filter.html:2
-#, python-format
-msgid " By %(title)s "
-msgstr " Od %(title)s "
-
-#: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Choď"
-
-#: contrib/admin/templates/admin/change_form.html:21
-msgid "View on site"
-msgstr "Pozri na webe"
-
-#: contrib/admin/templates/admin/change_form.html:30
-msgid "Please correct the error below."
-msgid_plural "Please correct the errors below."
-msgstr[0] "Opravte chybu, čo je nižšie, prosím."
-msgstr[1] "Opravte chyby, čo sú nižšie, prosím."
-
-#: contrib/admin/templates/admin/change_form.html:48
-msgid "Ordering"
-msgstr "Určenie"
-
-#: contrib/admin/templates/admin/change_form.html:51
-msgid "Order:"
-msgstr "Poradie:"
-
#: contrib/admin/templates/admin/submit_line.html:4
msgid "Save as new"
msgstr "Zapísať ako nový"
@@ -865,7 +1129,7 @@ msgstr "Zápis"
#: contrib/admin/templates/registration/password_change_form.html:6
#: contrib/admin/templates/registration/password_change_form.html:10
msgid "Password change"
-msgstr "Zmena hesla"
+msgstr "Zmeň heslo"
#: contrib/admin/templates/registration/password_change_done.html:6
#: contrib/admin/templates/registration/password_change_done.html:10
@@ -874,21 +1138,21 @@ msgstr "Heslo bolo úspešne zmenené"
#: contrib/admin/templates/registration/password_change_done.html:12
msgid "Your password was changed."
-msgstr "Vaše heslo bolo zmenené."
+msgstr "Tvoje heslo bolo zmenené."
#: 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 "Obnova hesla"
+msgstr "Generácia nového hesla"
#: 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 ""
-"Zabudli ste vaše heslo? Vložte nižšie vašu e-mail adresu, a nové heslo vám "
+"Zabudol si svoje heslo? Vlož nižšie tvoju e-mail adresu, a nové heslo ti "
"bude na ňu zaslané ."
#: contrib/admin/templates/registration/password_reset_form.html:16
@@ -901,23 +1165,23 @@ msgstr "Obnova môjho hesla"
#: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Ďakujeme vám, za stráveny čas na našej stránke."
+msgstr "Ďakujeme ti, za stráveny čas na našej stránke."
#: contrib/admin/templates/registration/logged_out.html:10
msgid "Log in again"
-msgstr "Prihláste sa znovu"
+msgstr "Prihlás sa znovu"
#: contrib/admin/templates/registration/password_reset_done.html:6
#: contrib/admin/templates/registration/password_reset_done.html:10
msgid "Password reset successful"
-msgstr "Heslo bolo úspešne obnovené"
+msgstr "Heslo bolo úspešne vygenerované"
#: 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 ""
-"Poslali sme vám, nové heslo na vami uvedenú emailovú adresu.Mali by ste ho "
+"Poslali sme ti, nové heslo na tebou uvedenú emailovú adresu. Mal by si ho "
"dostať čo najskôr."
#: contrib/admin/templates/registration/password_change_form.html:12
@@ -925,7 +1189,7 @@ 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 ""
-"Kvôli bezpečnosti vložte prosím vaše staré heslo, a potom dvakrát vaše nové "
+"Kvôli bezpečnosti vlož prosím tvoje staré heslo, a potom dvakrát tvoje nové "
"heslo, tým môžeme skontrolovať jeho správnosť."
#: contrib/admin/templates/registration/password_change_form.html:17
@@ -942,33 +1206,33 @@ msgstr "Potvrdenie hesla:"
#: contrib/admin/templates/registration/password_change_form.html:23
msgid "Change my password"
-msgstr "Zmena môjho hesla"
+msgstr "Zmeň svoje heslo"
#: contrib/admin/templates/registration/password_reset_email.html:2
msgid "You're receiving this e-mail because you requested a password reset"
-msgstr "Dostali ste túto správu preto, lebo ste požadovali obnoviť vaše heslo"
+msgstr "Dostal si túto správu preto, lebo si požadoval vygenerovať tvoje heslo"
#: contrib/admin/templates/registration/password_reset_email.html:3
#, python-format
msgid "for your user account at %(site_name)s"
-msgstr "pre váš užívateľský účet na %(site_name)s"
+msgstr "pre tvoj užívateľský účet na %(site_name)s"
#: contrib/admin/templates/registration/password_reset_email.html:5
#, python-format
msgid "Your new password is: %(new_password)s"
-msgstr "Vaše nové heslo je: %(new_password)s"
+msgstr "Tvoje nové heslo je: %(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 "Môžete zmeniť toto heslo na nasledujúcej stránke:"
+msgstr "Môžeš zmeniť toto heslo na nasledujúcej stránke:"
#: contrib/admin/templates/registration/password_reset_email.html:11
msgid "Your username, in case you've forgotten:"
-msgstr "Vaše užívateľské meno, ak ste ho zabudli:"
+msgstr "Tvoje užívateľské meno, ak si ho zabudol:"
#: contrib/admin/templates/registration/password_reset_email.html:13
msgid "Thanks for using our site!"
-msgstr "Ďakujeme, že používate naše stránky!"
+msgstr "Ďakujeme, že používaš naše stránky!"
#: contrib/admin/templates/registration/password_reset_email.html:15
#, python-format
@@ -994,15 +1258,15 @@ msgid ""
"your computer is \"internal\").</p>\n"
msgstr ""
"\n"
-"<p class=\"help\">Na inštaláciu záložiek, potiahnite linku do vášho "
+"<p class=\"help\">Na inštaláciu záložiek, potiahni linku do tvojho "
"bookmarks\n"
-"toolbar, alebo kliknite pravou myšou na linku a pridajte ju do vášho "
+"toolbar, alebo klikni pravou myšou na linku a pridaj ju do tvojho "
"bookmarks.\n"
-"Teraz si môžete vybrať záložku pre ľubovoľnú stránku na webe. Poznámka:\n"
-"niektoré záložky vyžadujú aby ste prezerali web z počítača označeného \n"
-"ako \"internal\" (opýtajte sa vášho systémového administrátora ak nie ste si "
+"Teraz si môžeš vybrať záložku pre ľubovoľnú stránku na webe. Poznámka:\n"
+"niektoré záložky vyžadujú aby si prezeral web z počítača označeného \n"
+"ako \"internal\" (opýtaj sa vášho systémového administrátora ak si si nie "
"istý/á, \n"
-"že váš počítač je označený ako \"internal\").</p>\n"
+"že tvoj počítač je označený ako \"internal\").</p>\n"
#: contrib/admin/templates/admin_doc/bookmarklets.html:19
msgid "Documentation for this page"
@@ -1038,284 +1302,21 @@ msgstr "Skoč na stránku admina, ktorá zastupuje jednoduchý objekt"
#: contrib/admin/templates/admin_doc/bookmarklets.html:28
msgid "Edit this object (new window)"
-msgstr "Editujte tento objekt (nové okno)"
+msgstr "Edituj tento objekt (nové okno)"
#: contrib/admin/templates/admin_doc/bookmarklets.html:29
msgid "As above, but opens the admin page in a new window."
msgstr "Ako vyššie, ale stranka admina sa otvorí v novom okne."
-#: contrib/admin/templates/widget/date_time.html:3
-msgid "Date:"
-msgstr "Dátum:"
-
-#: contrib/admin/templates/widget/date_time.html:4
-msgid "Time:"
-msgstr "Čas"
-
-#: contrib/admin/templates/widget/file.html:2
-msgid "Currently:"
-msgstr "Aktuálny:"
-
-#: contrib/admin/templates/widget/file.html:3
-msgid "Change:"
-msgstr "Zmeň:"
-
-#: contrib/redirects/models.py:7
-msgid "redirect from"
-msgstr "presmerovaný z"
-
-#: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Tu by sa mala použiť absolútna cesta, bez domény. Napr.: '/events/search/'."
-
-#: contrib/redirects/models.py:9
-msgid "redirect to"
-msgstr "presmerovaný na "
-
-#: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Tu môže byť buď absolútna cesta (ako hore) alebo plné URL začínajúce s "
-"'http://'."
-
-#: contrib/redirects/models.py:12
-msgid "redirect"
-msgstr "presmerovanie"
-
-#: contrib/redirects/models.py:13
-msgid "redirects"
-msgstr "presmerovania"
-
-#: contrib/flatpages/models.py:8
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Príklad: '/about/contact/'. Uistite sa, že máte vložené ako úvodné tak aj "
-"záverečné lomítka."
-
-#: contrib/flatpages/models.py:9
-msgid "title"
-msgstr "názov"
-
-#: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "obsah"
-
-#: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "povolené komentáre"
-
-#: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "meno predlohy"
-
-#: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
-"use 'flatpages/default'."
-msgstr ""
-"Príklad: 'flatpages/contact_page'. Ak sa toto nevykonalo, systém použije "
-"'flatpages/default'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "musíte byť zaregistrovaný"
-
-#: contrib/flatpages/models.py:14
-msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ak je toto označené, potom len prihlásený užívateľ môže vidieť túto stránku."
-
-#: contrib/flatpages/models.py:18
-msgid "flat page"
-msgstr "plochá stránka"
-
-#: contrib/flatpages/models.py:19
-msgid "flat pages"
-msgstr "ploché stránky"
-
-#: contrib/auth/models.py:13 contrib/auth/models.py:26
-msgid "name"
-msgstr "meno"
-
-#: contrib/auth/models.py:15
-msgid "codename"
-msgstr "codename"
-
-#: contrib/auth/models.py:17
-msgid "permission"
-msgstr "povolenie"
-
-#: contrib/auth/models.py:18 contrib/auth/models.py:27
-msgid "permissions"
-msgstr "povolenia"
-
-#: contrib/auth/models.py:29
-msgid "group"
-msgstr "skupina"
-
-#: contrib/auth/models.py:30 contrib/auth/models.py:65
-msgid "groups"
-msgstr "skupiny"
-
-#: contrib/auth/models.py:55
-msgid "username"
-msgstr "užívateľské meno"
-
-#: contrib/auth/models.py:56
-msgid "first name"
-msgstr "krstné meno"
-
-#: contrib/auth/models.py:57
-msgid "last name"
-msgstr "priezvisko"
-
-#: contrib/auth/models.py:58
-msgid "e-mail address"
-msgstr "e-mailová adresa"
-
-#: contrib/auth/models.py:59
-msgid "password"
-msgstr "heslo"
-
-#: contrib/auth/models.py:59
-msgid "Use '[algo]$[salt]$[hexdigest]'"
-msgstr "Použi '[algo]$[salt]$[hexdigest]'"
-
-#: contrib/auth/models.py:60
-msgid "staff status"
-msgstr "štatút zamestnanca"
-
-#: contrib/auth/models.py:60
-msgid "Designates whether the user can log into this admin site."
-msgstr "Označenie, ak užívateľ má oprávnenie vstúpiť ako administrátor."
-
-#: contrib/auth/models.py:61
-msgid "active"
-msgstr "aktívny"
-
-#: contrib/auth/models.py:62
-msgid "superuser status"
-msgstr "štatút superužívateľa"
-
-#: contrib/auth/models.py:63
-msgid "last login"
-msgstr "posledné prihlásenie"
-
-#: contrib/auth/models.py:64
-msgid "date joined"
-msgstr "dátum registrácie"
-
-#: 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 ""
-"Okrem ručne vložených povolení, tento uživateľ dostane všetky povolenia "
-"skupin, v ktorých sa nachádza."
-
-#: contrib/auth/models.py:67
-msgid "user permissions"
-msgstr "pridelené povolenia"
-
-#: contrib/auth/models.py:70
-msgid "user"
-msgstr "Uživateľ"
-
-#: contrib/auth/models.py:71
-msgid "users"
-msgstr "Užívatelia"
-
-#: contrib/auth/models.py:76
-msgid "Personal info"
-msgstr "Osobné údaje"
-
-#: contrib/auth/models.py:77
-msgid "Permissions"
-msgstr "Povolenia"
-
-#: contrib/auth/models.py:78
-msgid "Important dates"
-msgstr "Dôležité údaje"
-
-#: contrib/auth/models.py:79
-msgid "Groups"
-msgstr "Skupiny"
-
-#: contrib/auth/models.py:219
-msgid "message"
-msgstr "zpráva"
-
-#: contrib/auth/forms.py:30
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Vyzerá, že váš web prehliadač nedovoľuje prístup ku cookies. Cookies sú "
-"nevýhnutné aby ste sa mohli prilásiť."
-
-#: contrib/contenttypes/models.py:25
-msgid "python model class name"
-msgstr "pythonové meno triedy modelu"
-
-#: contrib/contenttypes/models.py:28
-msgid "content type"
-msgstr "typ obsahu"
-
-#: contrib/contenttypes/models.py:29
-msgid "content types"
-msgstr "typy obsahu"
-
-#: contrib/sessions/models.py:35
-msgid "session key"
-msgstr "kľúč sedenia"
-
-#: contrib/sessions/models.py:36
-msgid "session data"
-msgstr "údaje sedenia"
-
-#: contrib/sessions/models.py:37
-msgid "expire date"
-msgstr "dátum konca platnosti"
-
-#: contrib/sessions/models.py:41
-msgid "session"
-msgstr "sedenie"
-
-#: contrib/sessions/models.py:42
-msgid "sessions"
-msgstr "sedenia"
-
-#: contrib/sites/models.py:10
-msgid "domain name"
-msgstr "meno domény"
-
-#: contrib/sites/models.py:11
-msgid "display name"
-msgstr "zobrazené meno"
-
-#: contrib/sites/models.py:15
-msgid "site"
-msgstr "web"
-
-#: contrib/sites/models.py:16
-msgid "sites"
-msgstr "weby"
-
-#: utils/translation.py:360
+#: utils/translation.py:363
msgid "DATE_FORMAT"
msgstr ""
-#: utils/translation.py:361
+#: utils/translation.py:364
msgid "DATETIME_FORMAT"
msgstr ""
-#: utils/translation.py:362
+#: utils/translation.py:365
msgid "TIME_FORMAT"
msgstr ""
@@ -1397,7 +1398,7 @@ msgstr "December"
#: utils/dates.py:19
msgid "jan"
-msgstr "a"
+msgstr ""
#: utils/dates.py:19
msgid "feb"
@@ -1529,7 +1530,7 @@ msgstr "Nemecký"
#: conf/global_settings.py:42
msgid "Greek"
-msgstr ""
+msgstr "Grécký"
#: conf/global_settings.py:43
msgid "English"
@@ -1540,81 +1541,177 @@ msgid "Spanish"
msgstr "Španielsky"
#: conf/global_settings.py:45
+msgid "Argentinean Spanish"
+msgstr "Argentínska španielčina"
+
+#: conf/global_settings.py:46
msgid "French"
msgstr "Francúzsky"
-#: conf/global_settings.py:46
+#: conf/global_settings.py:47
msgid "Galician"
msgstr "Galicijský"
-#: conf/global_settings.py:47
+#: conf/global_settings.py:48
msgid "Hungarian"
-msgstr ""
+msgstr "Maďarský"
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
msgid "Hebrew"
-msgstr ""
+msgstr "Hebrejský"
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
msgid "Icelandic"
msgstr "Islandský"
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
msgid "Italian"
msgstr "Taliansky"
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
msgid "Japanese"
msgstr "Japónsky"
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
msgid "Dutch"
msgstr "Holándsky"
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
msgid "Norwegian"
msgstr "Nórsky"
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
msgid "Brazilian"
msgstr "Brazílsky"
-#: conf/global_settings.py:55
+#: conf/global_settings.py:56
msgid "Romanian"
msgstr "Rumúnsky"
-#: conf/global_settings.py:56
+#: conf/global_settings.py:57
msgid "Russian"
msgstr "Ruský"
-#: conf/global_settings.py:57
+#: conf/global_settings.py:58
msgid "Slovak"
msgstr "Slovenský"
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
msgid "Slovenian"
msgstr "Slovinský"
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
msgid "Serbian"
msgstr "Srbský"
-#: conf/global_settings.py:60
+#: conf/global_settings.py:61
msgid "Swedish"
msgstr "Švédsky"
-#: conf/global_settings.py:61
+#: conf/global_settings.py:62
msgid "Ukrainian"
msgstr "Ukrajínsky"
-#: conf/global_settings.py:62
+#: conf/global_settings.py:63
msgid "Simplified Chinese"
msgstr "Zjednodušená činština "
-#: conf/global_settings.py:63
+#: conf/global_settings.py:64
msgid "Traditional Chinese"
msgstr "Tradičná čínština"
+#: db/models/manipulators.py:302
+#, python-format
+msgid "%(object)s with this %(type)s already exists for the given %(field)s."
+msgstr "%(object)s s %(type)s už existuje pre prvok %(field)s."
+
+#: db/models/fields/__init__.py:40
+#, python-format
+msgid "%(optname)s with this %(fieldname)s already exists."
+msgstr "%(optname)s s %(fieldname)s už 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
+#: forms/__init__.py:346
+msgid "This field is required."
+msgstr "Toto pole je nevyhnutné."
+
+#: db/models/fields/__init__.py:337
+msgid "This value must be an integer."
+msgstr "Táto hodnota musí byť integer."
+
+#: db/models/fields/__init__.py:369
+msgid "This value must be either True or False."
+msgstr "Táto hodnota musí byť buď True alebo False."
+
+#: db/models/fields/__init__.py:385
+msgid "This field cannot be null."
+msgstr "Toto pole nemôže obsahovať null."
+
+#: db/models/fields/__init__.py:468 core/validators.py:132
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Vlož platný dátum/čas vo formáte RRRR-MM-DD HH:MM"
+
+#: db/models/fields/__init__.py:562
+msgid "Enter a valid filename."
+msgstr "Vlož platné meno súboru."
+
+#: db/models/fields/related.py:43
+#, python-format
+msgid "Please enter a valid %s."
+msgstr "Prosím vlož platné %s."
+
+#: db/models/fields/related.py:579
+msgid "Separate multiple IDs with commas."
+msgstr "Oddeľ viacnásobné ID čiarkami."
+
+#: db/models/fields/related.py:581
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+" Podržte \"Control\", alebo \"Command\" na Mac_u, na výber viac ako jednej "
+"položky."
+
+#: 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] "Prosím vlož platné %(self)s IDs. Hodnota %(value)r je neplatná."
+msgstr[1] "Prosím vlož platné %(self)s IDs. Hodnoty %(value)r sú neplatné."
+
+#: 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] "Zabezpeč aby tvoj text bol menší ako %s znak."
+msgstr[1] "Zabezpeč aby tvoj text bol menší ako %s znakov."
+
+#: forms/__init__.py:385
+msgid "Line breaks are not allowed here."
+msgstr "Nový riadok tu nieje povolený."
+
+#: 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 "Vyber si platnú voľbu; '%(data)s' nie je v %(choices)s."
+
+#: forms/__init__.py:645
+msgid "The submitted file is empty."
+msgstr "Poslaný súbor je prázdný."
+
+#: forms/__init__.py:699
+msgid "Enter a whole number between -32,768 and 32,767."
+msgstr "Vlož celé číslo s hodnotou medzi -32768 a 32767."
+
+#: forms/__init__.py:708
+msgid "Enter a positive number."
+msgstr "Vlož celé kladné číslo."
+
+#: forms/__init__.py:717
+msgid "Enter a whole number between 0 and 32,767."
+msgstr "Vlož celé číslo s hodnotou medzi 0 a 32767."
+
#: core/validators.py:60
msgid "This value must contain only letters, numbers and underscores."
msgstr "Toto môže obsahovať len písmená, číslice a podčiarkovníky."
@@ -1636,15 +1733,15 @@ msgstr "Malé písmena tu nie sú povolené."
#: core/validators.py:83
msgid "Enter only digits separated by commas."
-msgstr "Vložte len číslice, oddelené čiarkami."
+msgstr "Vlož len číslice, oddelené čiarkami."
#: core/validators.py:95
msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Vložte platné e-mail adresy oddelené čiarkami."
+msgstr "Vlož platné e-mail adresy oddelené čiarkami."
#: core/validators.py:99
msgid "Please enter a valid IP address."
-msgstr "Prosím vložte platnú IP adresu."
+msgstr "Prosím vlož platnú IP adresu."
#: core/validators.py:103
msgid "Empty values are not allowed here."
@@ -1660,7 +1757,7 @@ msgstr "Tento údaj nemôže byť vytvorený len z číslic."
#: core/validators.py:116
msgid "Enter a whole number."
-msgstr "Vložte celé číslo."
+msgstr "Vlož celé číslo."
#: core/validators.py:120
msgid "Only alphabetical characters are allowed here."
@@ -1668,26 +1765,22 @@ msgstr "Tu sú povolené len alfanumerické znaky."
#: core/validators.py:124
msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Vložte platný dátum vo formáte RRRR-MM-DD."
+msgstr "Vlož platný dátum vo formáte RRRR-MM-DD."
#: core/validators.py:128
msgid "Enter a valid time in HH:MM format."
-msgstr "Vložte platný čas vo formáte 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 "Vlož platný dátum/čas vo formáte RRRR-MM-DD HH:MM"
+msgstr "Vlož platný čas vo formáte HH:MM."
#: core/validators.py:136
msgid "Enter a valid e-mail address."
-msgstr "Vložte platnú e-mail adresu."
+msgstr "Vlož platnú 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 ""
-"Nahrajte platný obrázok. Súbor, ktorý ste nahrali buď nebol obrázok alebo je "
+"Nahraj platný obrázok. Súbor, ktorý si nahral buď nebol obrázok alebo je "
"nahratý poškodený obrázok."
#: core/validators.py:155
@@ -1736,14 +1829,14 @@ msgstr "Odkaz na URL %s je neplatný."
#: core/validators.py:214
msgid "Enter a valid U.S. state abbreviation."
-msgstr "Vložte platnú skratku U.S. štátu."
+msgstr "Vlož platnú skratku U.S. štátu."
#: 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] "Vyjadrujte sa slušne! Slovo %s tu nie je dovolené použivať."
-msgstr[1] "Vyjadrujte sa slušne! Slová %s tu nie je dovolené použivať."
+msgstr[0] "Vyjadruj sa slušne! Slovo %s tu nie je dovolené použivať."
+msgstr[1] "Vyjadruj sa slušne! Slová %s tu nie je dovolené použivať."
#: core/validators.py:236
#, python-format
@@ -1752,11 +1845,11 @@ msgstr "Toto pole sa musí zhodovať s poľom '%s'. "
#: core/validators.py:255
msgid "Please enter something for at least one field."
-msgstr "Prosím vložte niečo aspoň pre jedno pole."
+msgstr "Prosím vlož niečo aspoň pre jedno pole."
#: core/validators.py:264 core/validators.py:275
msgid "Please enter both fields or leave them both empty."
-msgstr "Prosím vložte obidve polia, alebo nechajte ich obe prázdne. "
+msgstr "Prosím vlož obidve polia, alebo nechaj ich obe prázdne. "
#: core/validators.py:282
#, python-format
@@ -1780,35 +1873,34 @@ msgstr "Táto hodnota musí byť mocninou %s."
#: core/validators.py:347
msgid "Please enter a valid decimal number."
-msgstr "Prosím vložte platné desiatkové číslo. "
+msgstr "Prosím vlož platné desiatkové číslo. "
#: 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] "Prosím vložte platné desiatkové číslo s najviac %s číslicou."
-msgstr[1] "Prosím vložte platné desiatkové číslo s najviac %s číslicami."
+msgstr[0] "Prosím vlož platné desiatkové číslo s najviac %s číslicou."
+msgstr[1] "Prosím vlož platné desiatkové číslo s najviac %s číslicami."
#: 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] ""
-"Prosím vložte platné desatinné číslo s najviac %s desatinným miestom."
+msgstr[0] "Prosím vlož platné desatinné číslo s najviac %s desatinným miestom."
msgstr[1] ""
-"Prosím vložte platné desatinné číslo s najviac %s desatinnými miestami."
+"Prosím vlož platné desatinné číslo s najviac %s desatinnými miestami."
#: core/validators.py:362
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Presvedčte sa, že posielaný súbor nemá menej ako %s bytov."
+msgstr "Presvedč sa, že posielaný súbor nemá menej ako %s bytov."
#: core/validators.py:363
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr "Presvedčte sa, že posielaný súbor nemá viac ako %s bytov."
+msgstr "Presvedč sa, že posielaný súbor nemá viac ako %s bytov."
#: core/validators.py:376
msgid "The format for this field is wrong."
@@ -1836,8 +1928,8 @@ msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
"\"%(start)s\".)"
msgstr ""
-"Prosím zavrite nezavretý %(tag)s popisovač v riadku %(line)s. (Riadok "
-"začína s \"%(start)s\".)"
+"Prosím zavri nezavretý %(tag)s popisovač v riadku %(line)s. (Riadok začína "
+"s \"%(start)s\".)"
#: core/validators.py:466
#, python-format
@@ -1884,95 +1976,7 @@ msgstr ""
"Atribút \"%(attr)s\" na riadku %(line)s má neplatnú hodnotu. (Riadok začína "
"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 "%(object)s s %(type)s už existuje pre prvok %(field)s."
-
-#: db/models/fields/__init__.py:40
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s s %(fieldname)s už 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
-#: forms/__init__.py:346
-msgid "This field is required."
-msgstr "Toto pole je nevyhnutné."
-
-#: db/models/fields/__init__.py:337
-msgid "This value must be an integer."
-msgstr "Táto hodnota musí byť integer."
-
-#: db/models/fields/__init__.py:369
-msgid "This value must be either True or False."
-msgstr "Táto hodnota musí byť buď True alebo False."
-
-#: db/models/fields/__init__.py:385
-msgid "This field cannot be null."
-msgstr "Toto pole nemôže obsahovať null."
-
-#: db/models/fields/__init__.py:562
-msgid "Enter a valid filename."
-msgstr "Vložte platné meno súboru."
-
-#: db/models/fields/related.py:43
-#, python-format
-msgid "Please enter a valid %s."
-msgstr "Prosím vložte platné %s."
-
-#: db/models/fields/related.py:579
-msgid "Separate multiple IDs with commas."
-msgstr "Oddeľte viacnásobné ID čiarkami."
-
-#: db/models/fields/related.py:581
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-" Podržte \"Control\", alebo \"Command\" na Mac_u, na výber viac ako jednej "
-"položky."
-
-#: 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] "Prosím vložte platné %(self)s IDs. Hodnota %(value)r je neplatná."
-msgstr[1] "Prosím vložte platné %(self)s IDs. Hodnoty %(value)r sú neplatné."
-
-#: 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] "Zabezpečte aby váš text bol menší ako %s znak."
-msgstr[1] "Zabezpečte aby váš text bol menší ako %s znakov."
-
-#: forms/__init__.py:385
-msgid "Line breaks are not allowed here."
-msgstr "Nový riadok tu nieje povolený."
-
-#: 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 "Vyberte si platnú voľbu; '%(data)s' nie je v %(choices)s."
-
-#: forms/__init__.py:645
-msgid "The submitted file is empty."
-msgstr "Poslaný súbor je prázdný."
-
-#: forms/__init__.py:699
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Vložte celé číslo s hodnotou medzi -32768 a 32767."
-
-#: forms/__init__.py:708
-msgid "Enter a positive number."
-msgstr "Vložte celé kladné číslo."
-
-#: forms/__init__.py:717
-msgid "Enter a whole number between 0 and 32,767."
-msgstr "Vložte celé číslo s hodnotou medzi 0 a 32767."
-
-#: template/defaultfilters.py:379
+#: template/defaultfilters.py:383
msgid "yes,no,maybe"
msgstr "ano,nie,možno"
diff --git a/django/contrib/admin/filterspecs.py b/django/contrib/admin/filterspecs.py
index 0284f13114..25376be12a 100644
--- a/django/contrib/admin/filterspecs.py
+++ b/django/contrib/admin/filterspecs.py
@@ -11,18 +11,18 @@ import datetime
class FilterSpec(object):
filter_specs = []
- def __init__(self, f, request, params):
+ def __init__(self, f, request, params, model):
self.field = f
self.params = params
def register(cls, test, factory):
- cls.filter_specs.append( (test, factory) )
+ cls.filter_specs.append((test, factory))
register = classmethod(register)
- def create(cls, f, request, params):
+ def create(cls, f, request, params, model):
for test, factory in cls.filter_specs:
if test(f):
- return factory(f, request, params)
+ return factory(f, request, params, model)
create = classmethod(create)
def has_output(self):
@@ -48,8 +48,8 @@ class FilterSpec(object):
return "".join(t)
class RelatedFilterSpec(FilterSpec):
- def __init__(self, f, request, params):
- super(RelatedFilterSpec, self).__init__(f, request, params)
+ def __init__(self, f, request, params, model):
+ super(RelatedFilterSpec, self).__init__(f, request, params, model)
if isinstance(f, models.ManyToManyField):
self.lookup_title = f.rel.to._meta.verbose_name
else:
@@ -71,31 +71,31 @@ class RelatedFilterSpec(FilterSpec):
for val in self.lookup_choices:
pk_val = getattr(val, self.field.rel.to._meta.pk.attname)
yield {'selected': self.lookup_val == str(pk_val),
- 'query_string': cl.get_query_string( {self.lookup_kwarg: pk_val}),
+ 'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}),
'display': val}
FilterSpec.register(lambda f: bool(f.rel), RelatedFilterSpec)
class ChoicesFilterSpec(FilterSpec):
- def __init__(self, f, request, params):
- super(ChoicesFilterSpec, self).__init__(f, request, params)
+ def __init__(self, f, request, params, model):
+ super(ChoicesFilterSpec, self).__init__(f, request, params, model)
self.lookup_kwarg = '%s__exact' % f.name
self.lookup_val = request.GET.get(self.lookup_kwarg, None)
def choices(self, cl):
yield {'selected': self.lookup_val is None,
- 'query_string': cl.get_query_string( {}, [self.lookup_kwarg]),
+ 'query_string': cl.get_query_string({}, [self.lookup_kwarg]),
'display': _('All')}
for k, v in self.field.choices:
yield {'selected': str(k) == self.lookup_val,
- 'query_string': cl.get_query_string( {self.lookup_kwarg: k}),
+ 'query_string': cl.get_query_string({self.lookup_kwarg: k}),
'display': v}
FilterSpec.register(lambda f: bool(f.choices), ChoicesFilterSpec)
class DateFieldFilterSpec(FilterSpec):
- def __init__(self, f, request, params):
- super(DateFieldFilterSpec, self).__init__(f, request, params)
+ def __init__(self, f, request, params, model):
+ super(DateFieldFilterSpec, self).__init__(f, request, params, model)
self.field_generic = '%s__' % self.field.name
@@ -123,14 +123,14 @@ class DateFieldFilterSpec(FilterSpec):
def choices(self, cl):
for title, param_dict in self.links:
yield {'selected': self.date_params == param_dict,
- 'query_string': cl.get_query_string( param_dict, self.field_generic),
+ 'query_string': cl.get_query_string(param_dict, self.field_generic),
'display': title}
FilterSpec.register(lambda f: isinstance(f, models.DateField), DateFieldFilterSpec)
class BooleanFieldFilterSpec(FilterSpec):
- def __init__(self, f, request, params):
- super(BooleanFieldFilterSpec, self).__init__(f, request, params)
+ def __init__(self, f, request, params, model):
+ super(BooleanFieldFilterSpec, self).__init__(f, request, params, model)
self.lookup_kwarg = '%s__exact' % f.name
self.lookup_kwarg2 = '%s__isnull' % f.name
self.lookup_val = request.GET.get(self.lookup_kwarg, None)
@@ -142,11 +142,34 @@ class BooleanFieldFilterSpec(FilterSpec):
def choices(self, cl):
for k, v in ((_('All'), None), (_('Yes'), '1'), (_('No'), '0')):
yield {'selected': self.lookup_val == v and not self.lookup_val2,
- 'query_string': cl.get_query_string( {self.lookup_kwarg: v}, [self.lookup_kwarg2]),
+ 'query_string': cl.get_query_string({self.lookup_kwarg: v}, [self.lookup_kwarg2]),
'display': k}
if isinstance(self.field, models.NullBooleanField):
yield {'selected': self.lookup_val2 == 'True',
- 'query_string': cl.get_query_string( {self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]),
+ 'query_string': cl.get_query_string({self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]),
'display': _('Unknown')}
FilterSpec.register(lambda f: isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField), BooleanFieldFilterSpec)
+
+# This should be registered last, because it's a last resort. For example,
+# if a field is eligible to use the BooleanFieldFilterSpec, that'd be much
+# more appropriate, and the AllValuesFilterSpec won't get used for it.
+class AllValuesFilterSpec(FilterSpec):
+ def __init__(self, f, request, params, model):
+ super(AllValuesFilterSpec, self).__init__(f, request, params, model)
+ self.lookup_val = request.GET.get(f.name, None)
+ self.lookup_choices = model._meta.admin.manager.distinct().order_by(f.name).values(f.name)
+
+ def title(self):
+ return self.field.verbose_name
+
+ def choices(self, cl):
+ yield {'selected': self.lookup_val is None,
+ 'query_string': cl.get_query_string({}, [self.field.name]),
+ 'display': _('All')}
+ for val in self.lookup_choices:
+ val = str(val[self.field.name])
+ yield {'selected': self.lookup_val == val,
+ 'query_string': cl.get_query_string({self.field.name: val}),
+ 'display': val}
+FilterSpec.register(lambda f: True, AllValuesFilterSpec)
diff --git a/django/contrib/admin/media/css/rtl.css b/django/contrib/admin/media/css/rtl.css
new file mode 100644
index 0000000000..c29391cabf
--- /dev/null
+++ b/django/contrib/admin/media/css/rtl.css
@@ -0,0 +1,46 @@
+body { direction: rtl; }
+
+/* login styles */
+
+.login .form-row { float:right; }
+.login .form-row label { float:right; padding-left:0.5em; padding-right:0; text-align:left;}
+.login .submit-row { clear:both; padding:1em 9.4em 0 0; }
+
+
+/* global styles */
+th { text-align: right; }
+.module h2, .module caption { text-align: right; }
+.addlink, .changelink { padding-left:0px; padding-right:12px; background-position:100% 0.2em; }
+.deletelink { padding-left:0px; padding-right:12px; background-position:100% 0.25em; }
+.object-tools { float:left; }
+
+
+/* layout styles */
+#user-tools { right:auto; left:0; text-align:left; }
+div.breadcrumbs { text-align:right; }
+#content-main { float:right;}
+#content-related { float:left; margin-left:-19em; margin-right:auto;}
+.colMS { margin-left:20em !important; margin-right:10px !important;}
+
+/* dashboard styles */
+.dashboard .module table td a { padding-left:.6em; padding-right:12px; }
+
+/* changelists styles */
+.change-list .filtered { background:white url(../img/admin/changelist-bg_rtl.gif) top left repeat-y !important; }
+.change-list .filtered table { border-left:1px solid #ddd; border-right:0px none; }
+#changelist-filter { right:auto; left:0; border-left:0px none; border-right:1px solid #ddd;}
+.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { margin-right:0px !important; margin-left:160px !important; }
+#changelist-filter li.selected { border-left:0px none; padding-left:0px; margin-left:0; border-right:5px solid #ccc; padding-right:5px;margin-right:-10px; }
+
+/* fomrs styles */
+.aligned label { padding:0 0 3px 1em; float:right; }
+.submit-row { text-align: left }
+.vDateField, .vTimeField { margin-left:2px; }
+
+/* widget styles */
+.calendarnav-previous { top:0; left:auto; right:0; }
+.calendarnav-next { top:0; right:auto; left:0;}
+.calendar caption, .calendarbox h2 { text-align:center; }
+
+.selector { float: right;}
+.selector .selector-filter { text-align: right;}
diff --git a/django/contrib/admin/media/js/admin/CollapsedFieldsets.js b/django/contrib/admin/media/js/admin/CollapsedFieldsets.js
index 0b3ad9e421..97f0a68d04 100644
--- a/django/contrib/admin/media/js/admin/CollapsedFieldsets.js
+++ b/django/contrib/admin/media/js/admin/CollapsedFieldsets.js
@@ -31,7 +31,7 @@ var CollapsedFieldsets = {
collapse_link.id = 'fieldsetcollapser' + i;
collapse_link.onclick = new Function('CollapsedFieldsets.show('+i+'); return false;');
collapse_link.href = '#';
- collapse_link.innerHTML = 'Show';
+ collapse_link.innerHTML = gettext('Show');
var h2 = fs.getElementsByTagName('h2')[0];
h2.appendChild(document.createTextNode(' ('));
h2.appendChild(collapse_link);
@@ -60,7 +60,7 @@ var CollapsedFieldsets = {
// Toggle the "Show" link to a "Hide" link
var collapse_link = document.getElementById('fieldsetcollapser' + fieldset_index);
collapse_link.onclick = new Function('CollapsedFieldsets.hide('+fieldset_index+'); return false;');
- collapse_link.innerHTML = 'Hide';
+ collapse_link.innerHTML = gettext('Hide');
},
hide: function(fieldset_index) {
var fs = document.getElementsByTagName('fieldset')[fieldset_index];
@@ -69,9 +69,9 @@ var CollapsedFieldsets = {
// Toggle the "Hide" link to a "Show" link
var collapse_link = document.getElementById('fieldsetcollapser' + fieldset_index);
collapse_link.onclick = new Function('CollapsedFieldsets.show('+fieldset_index+'); return false;');
- collapse_link.innerHTML = 'Show';
+ collapse_link.innerHTML = gettext('Show');
},
-
+
uncollapse_all: function() {
var fieldsets = document.getElementsByTagName('fieldset');
for (var i=0; i<fieldsets.length; i++) {
diff --git a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
index 28511f76c6..ed99c6103d 100644
--- a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
+++ b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
@@ -69,7 +69,16 @@ var DateTimeShortcuts = {
var clock_box = document.createElement('div');
clock_box.style.display = 'none';
clock_box.style.position = 'absolute';
- clock_box.style.left = findPosX(clock_link) + 17 + 'px';
+ if (getStyle(document.body,'direction')!='rtl') {
+ clock_box.style.left = findPosX(clock_link) + 17 + 'px';
+ }
+ else {
+ // since style's width is in em, it'd be tough to calculate
+ // px value of it. let's use an estimated px for now
+ // TODO: IE returns wrong value for findPosX when in rtl mode
+ // (it returns as it was left aligned), needs to be fixed.
+ clock_box.style.left = findPosX(clock_link) - 110 + 'px';
+ }
clock_box.style.top = findPosY(clock_link) - 30 + 'px';
clock_box.className = 'clockbox module';
clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num);
@@ -140,7 +149,17 @@ var DateTimeShortcuts = {
var cal_box = document.createElement('div');
cal_box.style.display = 'none';
cal_box.style.position = 'absolute';
- cal_box.style.left = findPosX(cal_link) + 17 + 'px';
+ // is it left-to-right or right-to-left layout ?
+ if (getStyle(document.body,'direction')!='rtl') {
+ cal_box.style.left = findPosX(cal_link) + 17 + 'px';
+ }
+ else {
+ // since style's width is in em, it'd be tough to calculate
+ // px value of it. let's use an estimated px for now
+ // TODO: IE returns wrong value for findPosX when in rtl mode
+ // (it returns as it was left aligned), needs to be fixed.
+ cal_box.style.left = findPosX(cal_link) - 180 + 'px';
+ }
cal_box.style.top = findPosY(cal_link) - 75 + 'px';
cal_box.className = 'calendarbox module';
cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num);
diff --git a/django/contrib/admin/media/js/core.js b/django/contrib/admin/media/js/core.js
index 1c8f678773..8eba69c9bb 100644
--- a/django/contrib/admin/media/js/core.js
+++ b/django/contrib/admin/media/js/core.js
@@ -135,4 +135,21 @@ String.prototype.pad_left = function(pad_length, pad_string) {
new_string = pad_string + new_string;
}
return new_string;
-} \ No newline at end of file
+}
+
+// ----------------------------------------------------------------------------
+// Get the computed style for and element
+// ----------------------------------------------------------------------------
+function getStyle(oElm, strCssRule){
+ var strValue = "";
+ if(document.defaultView && document.defaultView.getComputedStyle){
+ strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
+ }
+ else if(oElm.currentStyle){
+ strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
+ return p1.toUpperCase();
+ });
+ strValue = oElm.currentStyle[strCssRule];
+ }
+ return strValue;
+}
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html
index a8c1c9c101..e7f1c7e5a9 100644
--- a/django/contrib/admin/templates/admin/base.html
+++ b/django/contrib/admin/templates/admin/base.html
@@ -1,8 +1,9 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />
+{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
{% block extrastyle %}{% endblock %}
{% block extrahead %}{% endblock %}
</head>
@@ -20,7 +21,7 @@
{% block branding %}{% endblock %}
</div>
{% if not user.is_anonymous %}{% if user.is_staff %}
- <div id="user-tools">{% trans 'Welcome,' %} <strong>{% if user.first_name %}{{ user.first_name }}{% else %}{{ user.username }}{% endif %}</strong>. {% block userlinks %}<a href="doc/">{% trans 'Documentation' %}</a> / <a href="password_change/">{% trans 'Change password' %}</a> / <a href="logout/">{% trans 'Log out' %}</a>{% endblock %}</div>
+ <div id="user-tools">{% trans 'Welcome,' %} <strong>{% if user.first_name %}{{ user.first_name|escape }}{% else %}{{ user.username }}{% endif %}</strong>. {% block userlinks %}<a href="doc/">{% trans 'Documentation' %}</a> / <a href="password_change/">{% trans 'Change password' %}</a> / <a href="logout/">{% trans 'Log out' %}</a>{% endblock %}</div>
{% endif %}{% endif %}
{% block nav-global %}{% endblock %}
</div>
diff --git a/django/contrib/admin/templates/admin/filters.html b/django/contrib/admin/templates/admin/filters.html
index 93c2f65b15..3ca763cce3 100644
--- a/django/contrib/admin/templates/admin/filters.html
+++ b/django/contrib/admin/templates/admin/filters.html
@@ -1,6 +1,7 @@
{% load admin_list %}
+{% load i18n %}
{% if cl.has_filters %}<div id="changelist-filter">
-<h2>Filter</h2>
+<h2>{% trans 'Filter' %}</h2>
{% for spec in cl.filter_specs %}
{% filter cl spec %}
{% endfor %}</div>{% endif %}
diff --git a/django/contrib/admin/templates/admin/pagination.html b/django/contrib/admin/templates/admin/pagination.html
index 64b1b1a3dd..7694e4c5b0 100644
--- a/django/contrib/admin/templates/admin/pagination.html
+++ b/django/contrib/admin/templates/admin/pagination.html
@@ -1,4 +1,5 @@
{% load admin_list %}
+{% load i18n %}
<p class="paginator">
{% if pagination_required %}
{% for i in page_range %}
@@ -6,5 +7,5 @@
{% endfor %}
{% endif %}
{{ cl.result_count }} {% ifequal cl.result_count 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endifequal %}
-{% if show_all_url %}&nbsp;&nbsp;<a href="{{ show_all_url }}" class="showall">Show all</a>{% endif %}
+{% if show_all_url %}&nbsp;&nbsp;<a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
</p>
diff --git a/django/contrib/admin/templates/admin/search_form.html b/django/contrib/admin/templates/admin/search_form.html
index 24eced9ef9..d9126c3ec5 100644
--- a/django/contrib/admin/templates/admin/search_form.html
+++ b/django/contrib/admin/templates/admin/search_form.html
@@ -7,7 +7,7 @@
<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query|escape }}" id="searchbar" />
<input type="submit" value="{% trans 'Go' %}" />
{% if show_result_count %}
- <span class="small quiet">{{ cl.result_count }} result{{ cl.result_count|pluralize }} (<a href="?">{{ cl.full_result_count }} total</a>)</span>
+ <span class="small quiet">{% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} (<a href="?">{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</a>)</span>
{% endif %}
{% for pair in cl.params.items %}
{% ifnotequal pair.0 search_var %}<input type="hidden" name="{{ pair.0|escape }}" value="{{ pair.1|escape }}"/>{% endifnotequal %}
diff --git a/django/contrib/admin/templates/registration/password_reset_email.html b/django/contrib/admin/templates/registration/password_reset_email.html
index b7f31e484c..f765dd0670 100644
--- a/django/contrib/admin/templates/registration/password_reset_email.html
+++ b/django/contrib/admin/templates/registration/password_reset_email.html
@@ -1,6 +1,6 @@
{% load i18n %}
{% trans "You're receiving this e-mail because you requested a password reset" %}
-{% trans "for your user account at %(site_name)s" %}.
+{% blocktrans %}for your user account at {{ site_name }}{% endblocktrans %}.
{% blocktrans %}Your new password is: {{ new_password }}{% endblocktrans %}
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index d5f8df9dfd..0e550dd471 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -131,7 +131,7 @@ def items_for_result(cl, result):
if isinstance(f.rel, models.ManyToOneRel):
if field_val is not None:
- result_repr = getattr(result, f.name)
+ result_repr = escape(getattr(result, f.name))
else:
result_repr = EMPTY_CHANGELIST_VALUE
# Dates and times are special: They're formatted in a certain way.
diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py
index 9f646214ce..2d34452f52 100644
--- a/django/contrib/admin/templatetags/admin_modify.py
+++ b/django/contrib/admin/templatetags/admin_modify.py
@@ -18,6 +18,19 @@ def class_name_to_underscored(name):
return '_'.join([s.lower() for s in word_re.findall(name)[:-1]])
def include_admin_script(script_path):
+ """
+ Returns an HTML script element for including a script from the admin
+ media url.
+
+ Example usage::
+
+ {% include_admin_script js/calendar.js %}
+
+ could return::
+
+ <script type="text/javascript" src="/media/admin/js/calendar.js">
+ """
+
return '<script type="text/javascript" src="%s%s"></script>' % (settings.ADMIN_MEDIA_PREFIX, script_path)
include_admin_script = register.simple_tag(include_admin_script)
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index af55587d23..ea7aeb490b 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -574,7 +574,7 @@ class ChangeList(object):
filter_fields = [self.lookup_opts.get_field(field_name) \
for field_name in self.lookup_opts.admin.list_filter]
for f in filter_fields:
- spec = FilterSpec.create(f, request, self.params)
+ spec = FilterSpec.create(f, request, self.params, self.model)
if spec and spec.has_output():
filter_specs.append(spec)
return filter_specs, bool(filter_specs)
diff --git a/django/contrib/auth/management.py b/django/contrib/auth/management.py
index fe3399edbb..c4c315eb21 100644
--- a/django/contrib/auth/management.py
+++ b/django/contrib/auth/management.py
@@ -23,8 +23,6 @@ def create_permissions(app, created_models):
if not app_models:
return
for klass in app_models:
- if not klass._meta.admin:
- continue
ctype = ContentType.objects.get_for_model(klass)
for codename, name in _get_all_permissions(klass._meta):
try:
diff --git a/django/contrib/auth/middleware.py b/django/contrib/auth/middleware.py
index 5630f7ea81..a6a60780a7 100644
--- a/django/contrib/auth/middleware.py
+++ b/django/contrib/auth/middleware.py
@@ -8,7 +8,7 @@ class LazyUser(object):
self._user = get_user(request)
return self._user
-class AuthenticationMiddleware:
+class AuthenticationMiddleware(object):
def process_request(self, request):
assert hasattr(request, 'session'), "The Django authentication middleware requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
request.__class__.user = LazyUser()
diff --git a/django/contrib/auth/views.py b/django/contrib/auth/views.py
index 96c97241c1..97ecd6a3fd 100644
--- a/django/contrib/auth/views.py
+++ b/django/contrib/auth/views.py
@@ -8,7 +8,7 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import LOGIN_URL, REDIRECT_FIELD_NAME
-def login(request):
+def login(request, template_name='registration/login.html'):
"Displays the login form and handles the login action."
manipulator = AuthenticationForm(request)
redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
@@ -25,19 +25,19 @@ def login(request):
else:
errors = {}
request.session.set_test_cookie()
- return render_to_response('registration/login.html', {
+ return render_to_response(template_name, {
'form': forms.FormWrapper(manipulator, request.POST, errors),
REDIRECT_FIELD_NAME: redirect_to,
'site_name': Site.objects.get_current().name,
}, context_instance=RequestContext(request))
-def logout(request, next_page=None):
+def logout(request, next_page=None, template_name='registration/logged_out.html'):
"Logs out the user and displays 'You are logged out' message."
from django.contrib.auth import logout
try:
logout(request)
except KeyError:
- return render_to_response('registration/logged_out.html', {'title': 'Logged out'}, context_instance=RequestContext(request))
+ return render_to_response(template_name, {'title': _('Logged out')}, context_instance=RequestContext(request))
else:
# Redirect to this page until the session has been cleared.
return HttpResponseRedirect(next_page or request.path)
@@ -50,7 +50,7 @@ def redirect_to_login(next, login_url=LOGIN_URL):
"Redirects the user to the login page, passing the given 'next' page"
return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, next))
-def password_reset(request, is_admin_site=False):
+def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html'):
new_data, errors = {}, {}
form = PasswordResetForm()
if request.POST:
@@ -62,13 +62,13 @@ def password_reset(request, is_admin_site=False):
else:
form.save()
return HttpResponseRedirect('%sdone/' % request.path)
- return render_to_response('registration/password_reset_form.html', {'form': forms.FormWrapper(form, new_data, errors)},
+ return render_to_response(template_name, {'form': forms.FormWrapper(form, new_data, errors)},
context_instance=RequestContext(request))
-def password_reset_done(request):
- return render_to_response('registration/password_reset_done.html', context_instance=RequestContext(request))
+def password_reset_done(request, template_name='registration/password_reset_done.html'):
+ return render_to_response(template_name, context_instance=RequestContext(request))
-def password_change(request):
+def password_change(request, template_name='registration/password_change_form.html'):
new_data, errors = {}, {}
form = PasswordChangeForm(request.user)
if request.POST:
@@ -77,9 +77,9 @@ def password_change(request):
if not errors:
form.save(new_data)
return HttpResponseRedirect('%sdone/' % request.path)
- return render_to_response('registration/password_change_form.html', {'form': forms.FormWrapper(form, new_data, errors)},
+ return render_to_response(template_name, {'form': forms.FormWrapper(form, new_data, errors)},
context_instance=RequestContext(request))
password_change = login_required(password_change)
-def password_change_done(request):
- return render_to_response('registration/password_change_done.html', context_instance=RequestContext(request))
+def password_change_done(request, template_name='registration/password_change_done.html'):
+ return render_to_response(template_name, context_instance=RequestContext(request))
diff --git a/django/contrib/contenttypes/management.py b/django/contrib/contenttypes/management.py
new file mode 100644
index 0000000000..a9174584bc
--- /dev/null
+++ b/django/contrib/contenttypes/management.py
@@ -0,0 +1,24 @@
+"""
+Creates content types for all installed models.
+"""
+
+from django.dispatch import dispatcher
+from django.db.models import get_models, signals
+
+def create_contenttypes(app, created_models):
+ from django.contrib.contenttypes.models import ContentType
+ app_models = get_models(app)
+ if not app_models:
+ return
+ for klass in app_models:
+ opts = klass._meta
+ try:
+ ContentType.objects.get(app_label=opts.app_label,
+ model=opts.object_name.lower())
+ except ContentType.DoesNotExist:
+ 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)
+
+dispatcher.connect(create_contenttypes, signal=signals.post_syncdb)
diff --git a/django/contrib/flatpages/middleware.py b/django/contrib/flatpages/middleware.py
index 074e4ea735..231b5fdd5c 100644
--- a/django/contrib/flatpages/middleware.py
+++ b/django/contrib/flatpages/middleware.py
@@ -2,7 +2,7 @@ from django.contrib.flatpages.views import flatpage
from django.http import Http404
from django.conf import settings
-class FlatpageFallbackMiddleware:
+class FlatpageFallbackMiddleware(object):
def process_response(self, request, response):
if response.status_code != 404:
return response # No need to check for a flatpage for non-404 responses.
diff --git a/django/contrib/redirects/middleware.py b/django/contrib/redirects/middleware.py
index 1960bffa12..32f2760c45 100644
--- a/django/contrib/redirects/middleware.py
+++ b/django/contrib/redirects/middleware.py
@@ -2,7 +2,7 @@ from django.contrib.redirects.models import Redirect
from django import http
from django.conf import settings
-class RedirectFallbackMiddleware:
+class RedirectFallbackMiddleware(object):
def process_response(self, request, response):
if response.status_code != 404:
return response # No need to check for a redirect for non-404 responses.
diff --git a/django/contrib/redirects/models.py b/django/contrib/redirects/models.py
index 3f01996b9c..60205e29f3 100644
--- a/django/contrib/redirects/models.py
+++ b/django/contrib/redirects/models.py
@@ -8,15 +8,17 @@ class Redirect(models.Model):
help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
new_path = models.CharField(_('redirect to'), maxlength=200, blank=True,
help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
+
class Meta:
verbose_name = _('redirect')
verbose_name_plural = _('redirects')
db_table = 'django_redirect'
unique_together=(('site', 'old_path'),)
ordering = ('old_path',)
+
class Admin:
list_filter = ('site',)
search_fields = ('old_path', 'new_path')
- def __repr__(self):
+ def __str__(self):
return "%s ---> %s" % (self.old_path, self.new_path)
diff --git a/django/contrib/sessions/middleware.py b/django/contrib/sessions/middleware.py
index da1130f560..dde4f1a6c0 100644
--- a/django/contrib/sessions/middleware.py
+++ b/django/contrib/sessions/middleware.py
@@ -64,7 +64,7 @@ class SessionWrapper(object):
_session = property(_get_session)
-class SessionMiddleware:
+class SessionMiddleware(object):
def process_request(self, request):
request.session = SessionWrapper(request.COOKIES.get(settings.SESSION_COOKIE_NAME, None))
diff --git a/django/contrib/syndication/feeds.py b/django/contrib/syndication/feeds.py
index 367af4f9ff..3deefc5866 100644
--- a/django/contrib/syndication/feeds.py
+++ b/django/contrib/syndication/feeds.py
@@ -12,7 +12,7 @@ def add_domain(domain, url):
class FeedDoesNotExist(ObjectDoesNotExist):
pass
-class Feed:
+class Feed(object):
item_pubdate = None
item_enclosure_url = None
feed_type = feedgenerator.DefaultFeed
@@ -73,6 +73,7 @@ class Feed:
author_name = self.__get_dynamic_attr('author_name', obj),
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),
)
try:
@@ -110,5 +111,6 @@ class Feed:
author_name = author_name,
author_email = author_email,
author_link = author_link,
+ categories = self.__get_dynamic_attr('item_categories', item),
)
return feed
diff --git a/django/core/cache/backends/base.py b/django/core/cache/backends/base.py
index ad8941204e..ef5f6a6b3e 100644
--- a/django/core/cache/backends/base.py
+++ b/django/core/cache/backends/base.py
@@ -5,7 +5,7 @@ from django.core.exceptions import ImproperlyConfigured
class InvalidCacheBackendError(ImproperlyConfigured):
pass
-class BaseCache:
+class BaseCache(object):
def __init__(self, params):
timeout = params.get('timeout', 300)
try:
diff --git a/django/core/context_processors.py b/django/core/context_processors.py
index 1ab0768776..2ae9a6d972 100644
--- a/django/core/context_processors.py
+++ b/django/core/context_processors.py
@@ -36,6 +36,10 @@ def i18n(request):
context_extras['LANGUAGE_CODE'] = request.LANGUAGE_CODE
else:
context_extras['LANGUAGE_CODE'] = settings.LANGUAGE_CODE
+
+ from django.utils import translation
+ context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
+
return context_extras
def request(request):
@@ -44,7 +48,7 @@ def request(request):
# PermWrapper and PermLookupDict proxy the permissions system into objects that
# the template system can understand.
-class PermLookupDict:
+class PermLookupDict(object):
def __init__(self, user, module_name):
self.user, self.module_name = user, module_name
def __repr__(self):
@@ -54,7 +58,7 @@ class PermLookupDict:
def __nonzero__(self):
return self.user.has_module_perms(self.module_name)
-class PermWrapper:
+class PermWrapper(object):
def __init__(self, user):
self.user = user
def __getitem__(self, module_name):
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index 20f0d04669..c25ff2b14e 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -3,7 +3,7 @@ from django.dispatch import dispatcher
from django import http
import sys
-class BaseHandler:
+class BaseHandler(object):
def __init__(self):
self._request_middleware = self._view_middleware = self._response_middleware = self._exception_middleware = None
diff --git a/django/core/management.py b/django/core/management.py
index 931372cc5e..61213d0965 100644
--- a/django/core/management.py
+++ b/django/core/management.py
@@ -211,35 +211,38 @@ def _get_sql_for_pending_references(klass, pending_references):
def _get_many_to_many_sql_for_model(klass):
from django.db import backend, get_creation_module
+ from django.db.models import GenericRel
+
data_types = get_creation_module().DATA_TYPES
opts = klass._meta
final_output = []
for f in opts.many_to_many:
- table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \
- style.SQL_TABLE(backend.quote_name(f.m2m_db_table())) + ' (']
- table_output.append(' %s %s %s,' % \
- (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),' % \
- (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(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))))
- table_output.append(' %s (%s, %s)' % \
- (style.SQL_KEYWORD('UNIQUE'),
- style.SQL_FIELD(backend.quote_name(f.m2m_column_name())),
- style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name()))))
- table_output.append(');')
- final_output.append('\n'.join(table_output))
+ if not isinstance(f.rel, GenericRel):
+ table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \
+ style.SQL_TABLE(backend.quote_name(f.m2m_db_table())) + ' (']
+ table_output.append(' %s %s %s,' % \
+ (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),' % \
+ (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(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))))
+ table_output.append(' %s (%s, %s)' % \
+ (style.SQL_KEYWORD('UNIQUE'),
+ style.SQL_FIELD(backend.quote_name(f.m2m_column_name())),
+ style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name()))))
+ table_output.append(');')
+ final_output.append('\n'.join(table_output))
return final_output
def get_sql_delete(app):
@@ -815,10 +818,8 @@ def get_validation_errors(outfile, app=None):
# Do field-specific validation.
for f in opts.fields:
- # Check for deprecated args
- dep_args = getattr(f, 'deprecated_args', None)
- if dep_args:
- e.add(opts, "'%s' Initialized with deprecated args:%s" % (f.name, ",".join(dep_args)))
+ if f.name == 'id' and not f.primary_key and opts.pk.name == 'id':
+ e.add(opts, '"%s": You can\'t use "id" as a field name, because each model automatically gets an "id" field if none of the fields have primary_key=True. You need to either remove/rename your "id" field or add primary_key=True to a field.' % f.name)
if isinstance(f, models.CharField) and f.maxlength in (None, 0):
e.add(opts, '"%s": CharFields require a "maxlength" attribute.' % f.name)
if isinstance(f, models.FloatField):
@@ -836,8 +837,8 @@ def get_validation_errors(outfile, app=None):
if f.prepopulate_from is not None and type(f.prepopulate_from) not in (list, tuple):
e.add(opts, '"%s": prepopulate_from should be a list or tuple.' % f.name)
if f.choices:
- if not type(f.choices) in (tuple, list):
- e.add(opts, '"%s": "choices" should be either a tuple or list.' % f.name)
+ if not hasattr(f.choices, '__iter__'):
+ e.add(opts, '"%s": "choices" should be iterable (e.g., a tuple or list).' % f.name)
else:
for c in f.choices:
if not type(c) in (tuple, list) or len(c) != 2:
@@ -923,6 +924,7 @@ def get_validation_errors(outfile, app=None):
field_name = field_name[1:]
if opts.order_with_respect_to and field_name == '_order':
continue
+ if '.' in field_name: continue # Skip ordering in the format 'table.field'.
try:
opts.get_field(field_name, many_to_many=False)
except models.FieldDoesNotExist:
diff --git a/django/core/paginator.py b/django/core/paginator.py
index f4941cb678..195ad1009e 100644
--- a/django/core/paginator.py
+++ b/django/core/paginator.py
@@ -4,7 +4,7 @@ from math import ceil
class InvalidPage(Exception):
pass
-class ObjectPaginator:
+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
diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py
index 5772912031..259a931594 100644
--- a/django/core/servers/basehttp.py
+++ b/django/core/servers/basehttp.py
@@ -21,7 +21,7 @@ software_version = server_version + ' ' + sys_version
class WSGIServerException(Exception):
pass
-class FileWrapper:
+class FileWrapper(object):
"""Wrapper to convert file-like objects to iterables"""
def __init__(self, filelike, blksize=8192):
@@ -63,7 +63,7 @@ def _formatparam(param, value=None, quote=1):
else:
return param
-class Headers:
+class Headers(object):
"""Manage a collection of HTTP response headers"""
def __init__(self,headers):
if type(headers) is not ListType:
@@ -218,7 +218,7 @@ def is_hop_by_hop(header_name):
"""Return true if 'header_name' is an HTTP/1.1 "Hop-by-Hop" header"""
return _hoppish(header_name.lower())
-class ServerHandler:
+class ServerHandler(object):
"""Manage the invocation of a WSGI application"""
# Configuration parameters; can override per-subclass or per-instance
@@ -591,7 +591,7 @@ class WSGIRequestHandler(BaseHTTPRequestHandler):
return
sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format % args))
-class AdminMediaHandler:
+class AdminMediaHandler(object):
"""
WSGI middleware that intercepts calls to the admin media directory, as
defined by the ADMIN_MEDIA_PREFIX setting, and serves those images.
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index 91e999f802..a1661a2ecd 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -83,7 +83,7 @@ class MatchChecker(object):
raise NoReverseMatch("Value %r didn't match regular expression %r" % (value, test_regex))
return str(value) # TODO: Unicode?
-class RegexURLPattern:
+class RegexURLPattern(object):
def __init__(self, regex, callback, default_args=None):
# regex is a string representing a regular expression.
# callback is something like 'foo.views.news.stories.story_detail',
diff --git a/django/core/validators.py b/django/core/validators.py
index a2e9bfaf89..f98589578e 100644
--- a/django/core/validators.py
+++ b/django/core/validators.py
@@ -237,7 +237,7 @@ def hasNoProfanities(field_data, all_data):
"Watch your mouth! The words %s are not allowed here.", plural) % \
get_text_list(['"%s%s%s"' % (i[0], '-'*(len(i)-2), i[-1]) for i in words_seen], 'and')
-class AlwaysMatchesOtherField:
+class AlwaysMatchesOtherField(object):
def __init__(self, other_field_name, error_message=None):
self.other = other_field_name
self.error_message = error_message or lazy_inter(gettext_lazy("This field must match the '%s' field."), self.other)
@@ -247,7 +247,7 @@ class AlwaysMatchesOtherField:
if field_data != all_data[self.other]:
raise ValidationError, self.error_message
-class ValidateIfOtherFieldEquals:
+class ValidateIfOtherFieldEquals(object):
def __init__(self, other_field, other_value, validator_list):
self.other_field, self.other_value = other_field, other_value
self.validator_list = validator_list
@@ -258,7 +258,7 @@ class ValidateIfOtherFieldEquals:
for v in self.validator_list:
v(field_data, all_data)
-class RequiredIfOtherFieldNotGiven:
+class RequiredIfOtherFieldNotGiven(object):
def __init__(self, other_field_name, error_message=gettext_lazy("Please enter something for at least one field.")):
self.other, self.error_message = other_field_name, error_message
self.always_test = True
@@ -267,7 +267,7 @@ class RequiredIfOtherFieldNotGiven:
if not all_data.get(self.other, False) and not field_data:
raise ValidationError, self.error_message
-class RequiredIfOtherFieldsGiven:
+class RequiredIfOtherFieldsGiven(object):
def __init__(self, other_field_names, error_message=gettext_lazy("Please enter both fields or leave them both empty.")):
self.other, self.error_message = other_field_names, error_message
self.always_test = True
@@ -282,7 +282,7 @@ class RequiredIfOtherFieldGiven(RequiredIfOtherFieldsGiven):
def __init__(self, other_field_name, error_message=gettext_lazy("Please enter both fields or leave them both empty.")):
RequiredIfOtherFieldsGiven.__init__(self, [other_field_name], error_message)
-class RequiredIfOtherFieldEquals:
+class RequiredIfOtherFieldEquals(object):
def __init__(self, other_field, other_value, error_message=None):
self.other_field = other_field
self.other_value = other_value
@@ -294,7 +294,7 @@ class RequiredIfOtherFieldEquals:
if all_data.has_key(self.other_field) and all_data[self.other_field] == self.other_value and not field_data:
raise ValidationError(self.error_message)
-class RequiredIfOtherFieldDoesNotEqual:
+class RequiredIfOtherFieldDoesNotEqual(object):
def __init__(self, other_field, other_value, error_message=None):
self.other_field = other_field
self.other_value = other_value
@@ -306,7 +306,7 @@ class RequiredIfOtherFieldDoesNotEqual:
if all_data.has_key(self.other_field) and all_data[self.other_field] != self.other_value and not field_data:
raise ValidationError(self.error_message)
-class IsLessThanOtherField:
+class IsLessThanOtherField(object):
def __init__(self, other_field_name, error_message):
self.other, self.error_message = other_field_name, error_message
@@ -314,7 +314,7 @@ class IsLessThanOtherField:
if field_data > all_data[self.other]:
raise ValidationError, self.error_message
-class UniqueAmongstFieldsWithPrefix:
+class UniqueAmongstFieldsWithPrefix(object):
def __init__(self, field_name, prefix, error_message):
self.field_name, self.prefix = field_name, prefix
self.error_message = error_message or gettext_lazy("Duplicate values are not allowed.")
@@ -324,7 +324,7 @@ class UniqueAmongstFieldsWithPrefix:
if field_name != self.field_name and value == field_data:
raise ValidationError, self.error_message
-class IsAPowerOf:
+class IsAPowerOf(object):
"""
>>> v = IsAPowerOf(2)
>>> v(4, None)
@@ -342,7 +342,7 @@ class IsAPowerOf:
if val != int(val):
raise ValidationError, gettext("This value must be a power of %s.") % self.power_of
-class IsValidFloat:
+class IsValidFloat(object):
def __init__(self, max_digits, decimal_places):
self.max_digits, self.decimal_places = max_digits, decimal_places
@@ -355,11 +355,14 @@ class IsValidFloat:
if len(data) > (self.max_digits + 1):
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)):
+ 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:
raise ValidationError, ngettext("Please enter a valid decimal number with at most %s decimal place.",
"Please enter a valid decimal number with at most %s decimal places.", self.decimal_places) % self.decimal_places
-class HasAllowableSize:
+class HasAllowableSize(object):
"""
Checks that the file-upload field data is a certain size. min_size and
max_size are measurements in bytes.
@@ -379,7 +382,7 @@ class HasAllowableSize:
if self.max_size is not None and len(content) > self.max_size:
raise ValidationError, self.max_error_message
-class MatchesRegularExpression:
+class MatchesRegularExpression(object):
"""
Checks that the field matches the given regular-expression. The regex
should be in string format, not already compiled.
@@ -392,7 +395,7 @@ class MatchesRegularExpression:
if not self.regexp.search(field_data):
raise ValidationError(self.error_message)
-class AnyValidator:
+class AnyValidator(object):
"""
This validator tries all given validators. If any one of them succeeds,
validation passes. If none of them succeeds, the given message is thrown
@@ -416,7 +419,7 @@ class AnyValidator:
pass
raise ValidationError(self.error_message)
-class URLMimeTypeCheck:
+class URLMimeTypeCheck(object):
"Checks that the provided URL points to a document with a listed mime type"
class CouldNotRetrieve(ValidationError):
pass
@@ -441,7 +444,7 @@ class URLMimeTypeCheck:
raise URLMimeTypeCheck.InvalidContentType, gettext("The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'.") % {
'url': field_data, 'contenttype': content_type}
-class RelaxNGCompact:
+class RelaxNGCompact(object):
"Validate against a Relax NG compact schema"
def __init__(self, schema_path, additional_root_element=None):
self.schema_path = schema_path
diff --git a/django/db/backends/ado_mssql/base.py b/django/db/backends/ado_mssql/base.py
index b645b053bf..afe2d19981 100644
--- a/django/db/backends/ado_mssql/base.py
+++ b/django/db/backends/ado_mssql/base.py
@@ -131,6 +131,9 @@ def get_fulltext_search_sql(field_name):
def get_drop_foreignkey_sql():
return "DROP CONSTRAINT"
+def get_pk_default_value():
+ return "DEFAULT"
+
OPERATOR_MAPPING = {
'exact': '= %s',
'iexact': 'LIKE %s',
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index 4a13450c67..a522f24f2f 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -158,6 +158,9 @@ def get_fulltext_search_sql(field_name):
def get_drop_foreignkey_sql():
return "DROP FOREIGN KEY"
+def get_pk_default_value():
+ return "DEFAULT"
+
OPERATOR_MAPPING = {
'exact': '= %s',
'iexact': 'LIKE %s',
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index e981805108..9943ac9610 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -114,6 +114,9 @@ def get_fulltext_search_sql(field_name):
def get_drop_foreignkey_sql():
return "DROP FOREIGN KEY"
+def get_pk_default_value():
+ return "DEFAULT"
+
OPERATOR_MAPPING = {
'exact': '= %s',
'iexact': 'LIKE %s',
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index decb160ee9..5355781e81 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -108,6 +108,9 @@ def get_fulltext_search_sql(field_name):
def get_drop_foreignkey_sql():
return "DROP CONSTRAINT"
+def get_pk_default_value():
+ return "DEFAULT"
+
# 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.
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
index 697a33bb76..55cba81b70 100644
--- a/django/db/backends/postgresql_psycopg2/base.py
+++ b/django/db/backends/postgresql_psycopg2/base.py
@@ -114,6 +114,9 @@ def get_fulltext_search_sql(field_name):
def get_drop_foreignkey_sql():
return "DROP CONSTRAINT"
+def get_pk_default_value():
+ return "DEFAULT"
+
OPERATOR_MAPPING = {
'exact': '= %s',
'iexact': 'ILIKE %s',
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index 7b51967416..68452e1363 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -130,6 +130,9 @@ def get_fulltext_search_sql(field_name):
def get_drop_foreignkey_sql():
return ""
+def get_pk_default_value():
+ return "NULL"
+
def _sqlite_date_trunc(lookup_type, dt):
try:
dt = util.typecast_timestamp(dt)
diff --git a/django/db/backends/util.py b/django/db/backends/util.py
index 3098a53556..74d33f42ca 100644
--- a/django/db/backends/util.py
+++ b/django/db/backends/util.py
@@ -1,7 +1,7 @@
import datetime
from time import time
-class CursorDebugWrapper:
+class CursorDebugWrapper(object):
def __init__(self, cursor, db):
self.cursor = cursor
self.db = db
diff --git a/django/db/models/__init__.py b/django/db/models/__init__.py
index d708fa60bc..82b1238723 100644
--- a/django/db/models/__init__.py
+++ b/django/db/models/__init__.py
@@ -8,6 +8,7 @@ from django.db.models.manager import Manager
from django.db.models.base import Model, AdminOptions
from django.db.models.fields import *
from django.db.models.fields.related import ForeignKey, OneToOneField, ManyToManyField, ManyToOneRel, ManyToManyRel, OneToOneRel, TABULAR, STACKED
+from django.db.models.fields.generic import GenericRelation, GenericRel, GenericForeignKey
from django.db.models import signals
from django.utils.functional import curry
from django.utils.text import capfirst
@@ -15,7 +16,7 @@ from django.utils.text import capfirst
# Admin stages.
ADD, CHANGE, BOTH = 1, 2, 3
-class LazyDate:
+class LazyDate(object):
"""
Use in limit_choices_to to compare the field to dates calculated at run time
instead of when the model is loaded. For example::
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 3538826356..7242e6baa7 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -107,6 +107,12 @@ class Model(object):
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
if kwargs:
raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
for i, arg in enumerate(args):
@@ -165,7 +171,7 @@ class Model(object):
cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
(backend.quote_name(self._meta.db_table),
','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]),
- backend.quote_name(self._meta.pk.attname)),
+ backend.quote_name(self._meta.pk.column)),
db_values + [pk_val])
else:
record_exists = False
@@ -183,9 +189,16 @@ class Model(object):
placeholders.append('(SELECT COUNT(*) FROM %s WHERE %s = %%s)' % \
(backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.order_with_respect_to.column)))
db_values.append(getattr(self, self._meta.order_with_respect_to.attname))
- cursor.execute("INSERT INTO %s (%s) VALUES (%s)" % \
- (backend.quote_name(self._meta.db_table), ','.join(field_names),
- ','.join(placeholders)), db_values)
+ if db_values:
+ cursor.execute("INSERT INTO %s (%s) VALUES (%s)" % \
+ (backend.quote_name(self._meta.db_table), ','.join(field_names),
+ ','.join(placeholders)), db_values)
+ else:
+ # Create a new record with defaults for everything.
+ cursor.execute("INSERT INTO %s (%s) VALUES (%s)" %
+ (backend.quote_name(self._meta.db_table),
+ backend.quote_name(self._meta.pk.column),
+ backend.get_pk_default_value()))
if self._meta.has_auto_field and not pk_set:
setattr(self, self._meta.pk.attname, backend.get_last_insert_id(cursor, self._meta.db_table, self._meta.pk.column))
transaction.commit_unless_managed()
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 2f8a8651a1..720737efcf 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -535,7 +535,7 @@ class FileField(Field):
if not self.blank:
if rel:
# This validator makes sure FileFields work in a related context.
- class RequiredFileField:
+ class RequiredFileField(object):
def __init__(self, other_field_names, other_file_field_name):
self.other_field_names = other_field_names
self.other_file_field_name = other_file_field_name
diff --git a/django/db/models/fields/generic.py b/django/db/models/fields/generic.py
new file mode 100644
index 0000000000..5f4de40e69
--- /dev/null
+++ b/django/db/models/fields/generic.py
@@ -0,0 +1,259 @@
+"""
+Classes allowing "generic" relations through ContentType and object-id fields.
+"""
+
+from django import forms
+from django.core.exceptions import ObjectDoesNotExist
+from django.db import backend
+from django.db.models import signals
+from django.db.models.fields.related import RelatedField, Field, ManyToManyRel
+from django.db.models.loading import get_model
+from django.dispatch import dispatcher
+from django.utils.functional import curry
+
+class GenericForeignKey(object):
+ """
+ Provides a generic relation to any object through content-type/object-id
+ fields.
+ """
+
+ def __init__(self, ct_field="content_type", fk_field="object_id"):
+ self.ct_field = ct_field
+ self.fk_field = fk_field
+
+ def contribute_to_class(self, cls, name):
+ # Make sure the fields exist (these raise FieldDoesNotExist,
+ # which is a fine error to raise here)
+ self.name = name
+ self.model = cls
+ self.cache_attr = "_%s_cache" % name
+
+ # For some reason I don't totally understand, using weakrefs here doesn't work.
+ dispatcher.connect(self.instance_pre_init, signal=signals.pre_init, sender=cls, weak=False)
+
+ # Connect myself as the descriptor for this field
+ setattr(cls, name, self)
+
+ def instance_pre_init(self, signal, sender, args, kwargs):
+ # Handle initalizing an object with the generic FK instaed of
+ # content-type/object-id fields.
+ if kwargs.has_key(self.name):
+ value = kwargs.pop(self.name)
+ kwargs[self.ct_field] = self.get_content_type(value)
+ kwargs[self.fk_field] = value._get_pk_val()
+
+ def get_content_type(self, obj):
+ # Convenience function using get_model avoids a circular import when using this model
+ ContentType = get_model("contenttypes", "contenttype")
+ return ContentType.objects.get_for_model(obj)
+
+ def __get__(self, instance, instance_type=None):
+ if instance is None:
+ raise AttributeError, "%s must be accessed via instance" % self.name
+
+ try:
+ return getattr(instance, self.cache_attr)
+ except AttributeError:
+ rel_obj = None
+ ct = getattr(instance, self.ct_field)
+ if ct:
+ try:
+ rel_obj = ct.get_object_for_this_type(pk=getattr(instance, self.fk_field))
+ except ObjectDoesNotExist:
+ pass
+ setattr(instance, self.cache_attr, rel_obj)
+ return rel_obj
+
+ def __set__(self, instance, value):
+ if instance is None:
+ raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name
+
+ ct = None
+ fk = None
+ if value is not None:
+ ct = self.get_content_type(value)
+ fk = value._get_pk_val()
+
+ setattr(instance, self.ct_field, ct)
+ setattr(instance, self.fk_field, fk)
+ setattr(instance, self.cache_attr, value)
+
+class GenericRelation(RelatedField, Field):
+ """Provides an accessor to generic related objects (i.e. comments)"""
+
+ def __init__(self, to, **kwargs):
+ kwargs['verbose_name'] = kwargs.get('verbose_name', None)
+ kwargs['rel'] = GenericRel(to,
+ related_name=kwargs.pop('related_name', None),
+ limit_choices_to=kwargs.pop('limit_choices_to', None),
+ symmetrical=kwargs.pop('symmetrical', True))
+
+ # Override content-type/object-id field names on the related class
+ self.object_id_field_name = kwargs.pop("object_id_field", "object_id")
+ self.content_type_field_name = kwargs.pop("content_type_field", "content_type")
+
+ kwargs['blank'] = True
+ kwargs['editable'] = False
+ Field.__init__(self, **kwargs)
+
+ def get_manipulator_field_objs(self):
+ choices = self.get_choices_default()
+ return [curry(forms.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)]
+
+ def get_choices_default(self):
+ return Field.get_choices(self, include_blank=False)
+
+ def flatten_data(self, follow, obj = None):
+ new_data = {}
+ if obj:
+ instance_ids = [instance._get_pk_val() for instance in getattr(obj, self.name).all()]
+ new_data[self.name] = instance_ids
+ return new_data
+
+ def m2m_db_table(self):
+ return self.rel.to._meta.db_table
+
+ def m2m_column_name(self):
+ return self.object_id_field_name
+
+ def m2m_reverse_name(self):
+ return self.model._meta.pk.attname
+
+ def contribute_to_class(self, cls, name):
+ super(GenericRelation, self).contribute_to_class(cls, name)
+
+ # Save a reference to which model this class is on for future use
+ self.model = cls
+
+ # Add the descriptor for the m2m relation
+ setattr(cls, self.name, ReverseGenericRelatedObjectsDescriptor(self))
+
+ def contribute_to_related_class(self, cls, related):
+ pass
+
+ def set_attributes_from_rel(self):
+ pass
+
+ def get_internal_type(self):
+ return "ManyToManyField"
+
+class ReverseGenericRelatedObjectsDescriptor(object):
+ """
+ This class provides the functionality that makes the related-object
+ managers available as attributes on a model class, for fields that have
+ multiple "remote" values and have a GenericRelation defined in their model
+ (rather than having another model pointed *at* them). In the example
+ "article.publications", the publications attribute is a
+ ReverseGenericRelatedObjectsDescriptor instance.
+ """
+ def __init__(self, field):
+ self.field = field
+
+ def __get__(self, instance, instance_type=None):
+ if instance is None:
+ raise AttributeError, "Manager must be accessed via instance"
+
+ # This import is done here to avoid circular import importing this module
+ from django.contrib.contenttypes.models import ContentType
+
+ # Dynamically create a class that subclasses the related model's
+ # default manager.
+ rel_model = self.field.rel.to
+ superclass = rel_model._default_manager.__class__
+ RelatedManager = create_generic_related_manager(superclass)
+
+ manager = RelatedManager(
+ model = rel_model,
+ instance = instance,
+ symmetrical = (self.field.rel.symmetrical and instance.__class__ == rel_model),
+ join_table = backend.quote_name(self.field.m2m_db_table()),
+ source_col_name = backend.quote_name(self.field.m2m_column_name()),
+ target_col_name = backend.quote_name(self.field.m2m_reverse_name()),
+ content_type = ContentType.objects.get_for_model(self.field.model),
+ content_type_field_name = self.field.content_type_field_name,
+ object_id_field_name = self.field.object_id_field_name
+ )
+
+ return manager
+
+ def __set__(self, instance, value):
+ if instance is None:
+ raise AttributeError, "Manager must be accessed via instance"
+
+ manager = self.__get__(instance)
+ manager.clear()
+ for obj in value:
+ manager.add(obj)
+
+def create_generic_related_manager(superclass):
+ """
+ Factory function for a manager that subclasses 'superclass' (which is a
+ Manager) and adds behavior for generic related objects.
+ """
+
+ class GenericRelatedObjectManager(superclass):
+ def __init__(self, model=None, core_filters=None, instance=None, symmetrical=None,
+ join_table=None, source_col_name=None, target_col_name=None, content_type=None,
+ content_type_field_name=None, object_id_field_name=None):
+
+ super(GenericRelatedObjectManager, self).__init__()
+ self.core_filters = core_filters or {}
+ self.model = model
+ self.content_type = content_type
+ self.symmetrical = symmetrical
+ self.instance = instance
+ self.join_table = join_table
+ self.join_table = model._meta.db_table
+ self.source_col_name = source_col_name
+ self.target_col_name = target_col_name
+ self.content_type_field_name = content_type_field_name
+ self.object_id_field_name = object_id_field_name
+ self.pk_val = self.instance._get_pk_val()
+
+ def get_query_set(self):
+ query = {
+ '%s__pk' % self.content_type_field_name : self.content_type.id,
+ '%s__exact' % self.object_id_field_name : self.pk_val,
+ }
+ return superclass.get_query_set(self).filter(**query)
+
+ def add(self, *objs):
+ for obj in objs:
+ setattr(obj, self.content_type_field_name, self.content_type)
+ setattr(obj, self.object_id_field_name, self.pk_val)
+ obj.save()
+ add.alters_data = True
+
+ def remove(self, *objs):
+ for obj in objs:
+ obj.delete()
+ remove.alters_data = True
+
+ def clear(self):
+ for obj in self.all():
+ obj.delete()
+ clear.alters_data = True
+
+ def create(self, **kwargs):
+ kwargs[self.content_type_field_name] = self.content_type
+ kwargs[self.object_id_field_name] = self.pk_val
+ obj = self.model(**kwargs)
+ obj.save()
+ return obj
+ create.alters_data = True
+
+ return GenericRelatedObjectManager
+
+class GenericRel(ManyToManyRel):
+ def __init__(self, to, related_name=None, limit_choices_to=None, symmetrical=True):
+ self.to = to
+ self.num_in_admin = 0
+ self.related_name = related_name
+ self.filter_interface = None
+ self.limit_choices_to = limit_choices_to or {}
+ self.edit_inline = False
+ self.raw_id_admin = False
+ self.symmetrical = symmetrical
+ self.multiple = True
+ assert not (self.raw_id_admin and self.filter_interface), \
+ "Generic relations may not use both raw_id_admin and filter_interface"
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 6e0fb6d2a8..f9750217a2 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -667,7 +667,7 @@ class ManyToManyField(RelatedField, Field):
def set_attributes_from_rel(self):
pass
-class ManyToOneRel:
+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,
related_name=None, limit_choices_to=None, lookup_overrides=None, raw_id_admin=False):
@@ -704,7 +704,7 @@ class OneToOneRel(ManyToOneRel):
self.raw_id_admin = raw_id_admin
self.multiple = False
-class ManyToManyRel:
+class ManyToManyRel(object):
def __init__(self, to, num_in_admin=0, related_name=None,
filter_interface=None, limit_choices_to=None, raw_id_admin=False, symmetrical=True):
self.to = to
diff --git a/django/db/models/manager.py b/django/db/models/manager.py
index 93de4a6adc..f679c5492c 100644
--- a/django/db/models/manager.py
+++ b/django/db/models/manager.py
@@ -3,6 +3,7 @@ from django.db import backend, connection
from django.db.models.query import QuerySet
from django.dispatch import dispatcher
from django.db.models import signals
+from django.db.models.fields import FieldDoesNotExist
from django.utils.datastructures import SortedDict
# Size of each "chunk" for get_iterator calls.
@@ -13,8 +14,11 @@ def ensure_default_manager(sender):
cls = sender
if not hasattr(cls, '_default_manager'):
# Create the default manager, if needed.
- if hasattr(cls, 'objects'):
- raise ValueError, "Model %s must specify a custom Manager, because it has a field named 'objects'" % name
+ try:
+ cls._meta.get_field('objects')
+ raise ValueError, "Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__
+ except FieldDoesNotExist:
+ pass
cls.add_to_class('objects', Manager())
dispatcher.connect(ensure_default_manager, signal=signals.class_prepared)
@@ -65,6 +69,9 @@ class Manager(object):
def get(self, *args, **kwargs):
return self.get_query_set().get(*args, **kwargs)
+ def get_or_create(self, *args, **kwargs):
+ return self.get_query_set().get_or_create(*args, **kwargs)
+
def filter(self, *args, **kwargs):
return self.get_query_set().filter(*args, **kwargs)
diff --git a/django/db/models/options.py b/django/db/models/options.py
index 1023689a86..f8149bdf5c 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -15,7 +15,7 @@ DEFAULT_NAMES = ('verbose_name', 'db_table', 'ordering',
'unique_together', 'permissions', 'get_latest_by',
'order_with_respect_to', 'app_label')
-class Options:
+class Options(object):
def __init__(self, meta):
self.fields, self.many_to_many = [], []
self.module_name, self.verbose_name = None, None
@@ -195,7 +195,7 @@ class Options:
self._field_types[field_type] = False
return self._field_types[field_type]
-class AdminOptions:
+class AdminOptions(object):
def __init__(self, fields=None, js=None, list_display=None, list_filter=None,
date_hierarchy=None, save_as=False, ordering=None, search_fields=None,
save_on_top=False, list_select_related=False, manager=None, list_per_page=100):
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 4bd9b3b9fe..e826efa779 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -205,6 +205,23 @@ class QuerySet(object):
assert len(obj_list) == 1, "get() returned more than one %s -- it returned %s! Lookup parameters were %s" % (self.model._meta.object_name, len(obj_list), kwargs)
return obj_list[0]
+ def get_or_create(self, **kwargs):
+ """
+ Looks up an object with the given kwargs, creating one if necessary.
+ Returns a tuple of (object, created), where created is a boolean
+ specifying whether an object was created.
+ """
+ assert len(kwargs), 'get_or_create() must be passed at least one keyword argument'
+ defaults = kwargs.pop('defaults', {})
+ try:
+ return self.get(**kwargs), False
+ except self.model.DoesNotExist:
+ params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
+ params.update(defaults)
+ obj = self.model(**params)
+ obj.save()
+ return obj, True
+
def latest(self, field_name=None):
"""
Returns the latest object, according to the model's 'get_latest_by'
@@ -529,7 +546,7 @@ class DateQuerySet(QuerySet):
c._order = self._order
return c
-class QOperator:
+class QOperator(object):
"Base class for QAnd and QOr"
def __init__(self, *args):
self.args = args
diff --git a/django/db/transaction.py b/django/db/transaction.py
index 60a743c42a..4a0658e1c3 100644
--- a/django/db/transaction.py
+++ b/django/db/transaction.py
@@ -114,7 +114,7 @@ def is_managed():
def managed(flag=True):
"""
Puts the transaction manager into a manual state: managed transactions have
- to be committed explicitely by the user. If you switch off transaction
+ to be committed explicitly by the user. If you switch off transaction
management and there is a pending commit/rollback, the data will be
commited.
"""
diff --git a/django/forms/__init__.py b/django/forms/__init__.py
index cea3d22310..fab7a6da7a 100644
--- a/django/forms/__init__.py
+++ b/django/forms/__init__.py
@@ -101,7 +101,7 @@ class Manipulator(object):
for field in self.fields:
field.convert_post_data(new_data)
-class FormWrapper:
+class FormWrapper(object):
"""
A wrapper linking a Manipulator to the template system.
This allows dictionary-style lookups of formfields. It also handles feeding
@@ -150,7 +150,7 @@ class FormWrapper:
fields = property(_get_fields)
-class FormFieldWrapper:
+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
@@ -211,7 +211,7 @@ class FormFieldCollection(FormFieldWrapper):
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:
+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
@@ -269,7 +269,7 @@ class InlineObjectCollection:
self._collections = collections
-class FormField:
+class FormField(object):
"""Abstract class representing a form field.
Classes that extend FormField should define the following attributes:
@@ -613,9 +613,10 @@ class CheckboxSelectMultipleField(SelectMultipleField):
back into the single list that validators, renderers and save() expect.
"""
requires_data_list = True
- def __init__(self, field_name, choices=None, validator_list=None):
+ 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):
@@ -628,7 +629,7 @@ class CheckboxSelectMultipleField(SelectMultipleField):
new_data.setlist(self.field_name, data_list)
def render(self, data):
- output = ['<ul>']
+ output = ['<ul%s>' % (self.ul_class and ' class="%s"' % self.ul_class or '')]
str_data_list = map(str, data) # normalize to strings
for value, choice in self.choices:
checked_html = ''
@@ -897,10 +898,11 @@ 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 = []
+ choices = not is_required and BLANK_CHOICE_DASH[:] or []
if recursive:
for root, dirs, files in os.walk(path):
for f in files:
diff --git a/django/http/__init__.py b/django/http/__init__.py
index bb03ab8ea5..178510c94c 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -265,6 +265,12 @@ class HttpResponseForbidden(HttpResponse):
HttpResponse.__init__(self, *args, **kwargs)
self.status_code = 403
+class HttpResponseNotAllowed(HttpResponse):
+ def __init__(self, permitted_methods):
+ HttpResponse.__init__(self)
+ self['Allow'] = ', '.join(permitted_methods)
+ self.status_code = 405
+
class HttpResponseGone(HttpResponse):
def __init__(self, *args, **kwargs):
HttpResponse.__init__(self, *args, **kwargs)
diff --git a/django/middleware/cache.py b/django/middleware/cache.py
index b5e142a383..5510eba714 100644
--- a/django/middleware/cache.py
+++ b/django/middleware/cache.py
@@ -3,7 +3,7 @@ from django.core.cache import cache
from django.utils.cache import get_cache_key, learn_cache_key, patch_response_headers
from django.http import HttpResponseNotModified
-class CacheMiddleware:
+class CacheMiddleware(object):
"""
Cache middleware. If this is enabled, each Django-powered page will be
cached for CACHE_MIDDLEWARE_SECONDS seconds. Cache is based on URLs.
diff --git a/django/middleware/common.py b/django/middleware/common.py
index 763918878a..acd3233e1d 100644
--- a/django/middleware/common.py
+++ b/django/middleware/common.py
@@ -3,7 +3,7 @@ from django import http
from django.core.mail import mail_managers
import md5, os
-class CommonMiddleware:
+class CommonMiddleware(object):
"""
"Common" middleware for taking care of some basic operations:
@@ -39,6 +39,8 @@ class CommonMiddleware:
# trailing slash or a file extension.
if settings.APPEND_SLASH and (old_url[1][-1] != '/') and ('.' not in old_url[1].split('/')[-1]):
new_url[1] = new_url[1] + '/'
+ if settings.DEBUG and request.META['REQUEST_METHOD'].lower() == 'post':
+ raise RuntimeError, "You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to %s%s (note the trailing slash), or set APPEND_SLASH=False in your Django settings." % (new_url[0], new_url[1])
if new_url != old_url:
# Redirect
if new_url[0]:
diff --git a/django/middleware/doc.py b/django/middleware/doc.py
index 6376fe4d5c..01c09e9c15 100644
--- a/django/middleware/doc.py
+++ b/django/middleware/doc.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django import http
-class XViewMiddleware:
+class XViewMiddleware(object):
"""
Adds an X-View header to internal HEAD requests -- used by the documentation system.
"""
diff --git a/django/middleware/gzip.py b/django/middleware/gzip.py
index 201bec2000..cc8a68406c 100644
--- a/django/middleware/gzip.py
+++ b/django/middleware/gzip.py
@@ -4,7 +4,7 @@ from django.utils.cache import patch_vary_headers
re_accepts_gzip = re.compile(r'\bgzip\b')
-class GZipMiddleware:
+class GZipMiddleware(object):
"""
This middleware compresses content if the browser allows gzip compression.
It sets the Vary header accordingly, so that caches will base their storage
diff --git a/django/middleware/http.py b/django/middleware/http.py
index 2bccd60903..0a8cd67dfa 100644
--- a/django/middleware/http.py
+++ b/django/middleware/http.py
@@ -1,6 +1,6 @@
import datetime
-class ConditionalGetMiddleware:
+class ConditionalGetMiddleware(object):
"""
Handles conditional GET operations. If the response has a ETag or
Last-Modified header, and the request has If-None-Match or
diff --git a/django/middleware/locale.py b/django/middleware/locale.py
index e3c95766c9..dd154e1280 100644
--- a/django/middleware/locale.py
+++ b/django/middleware/locale.py
@@ -3,7 +3,7 @@
from django.utils.cache import patch_vary_headers
from django.utils import translation
-class LocaleMiddleware:
+class LocaleMiddleware(object):
"""
This is a very simple middleware that parses a request
and decides what translation object to install in the current
diff --git a/django/middleware/transaction.py b/django/middleware/transaction.py
index da218ac31a..4128e012f2 100644
--- a/django/middleware/transaction.py
+++ b/django/middleware/transaction.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django.db import transaction
-class TransactionMiddleware:
+class TransactionMiddleware(object):
"""
Transaction middleware. If this is enabled, each view function will be run
with commit_on_response activated - that way a save() doesn't do a direct
diff --git a/django/template/__init__.py b/django/template/__init__.py
index b526863fbf..08f433fec9 100644
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -56,9 +56,10 @@ times with multiple contexts)
"""
import re
from inspect import getargspec
-from django.utils.functional import curry
from django.conf import settings
from django.template.context import Context, RequestContext, ContextPopException
+from django.utils.functional import curry
+from django.utils.text import smart_split
__all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
@@ -74,6 +75,8 @@ BLOCK_TAG_START = '{%'
BLOCK_TAG_END = '%}'
VARIABLE_TAG_START = '{{'
VARIABLE_TAG_END = '}}'
+SINGLE_BRACE_START = '{'
+SINGLE_BRACE_END = '}'
ALLOWED_VARIABLE_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.'
@@ -133,7 +136,7 @@ class StringOrigin(Origin):
def reload(self):
return self.source
-class Template:
+class Template(object):
def __init__(self, template_string, origin=None):
"Compilation stage"
if settings.TEMPLATE_DEBUG and origin == None:
@@ -157,22 +160,18 @@ def compile_string(template_string, origin):
parser = parser_factory(lexer.tokenize())
return parser.parse()
-class Token:
+class Token(object):
def __init__(self, token_type, contents):
"The token_type must be TOKEN_TEXT, TOKEN_VAR or TOKEN_BLOCK"
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],
- self.contents[:20].replace('\n', '')
- )
+ return '<%s token: "%s...">' % \
+ ({TOKEN_TEXT: 'Text', TOKEN_VAR: 'Var', TOKEN_BLOCK: 'Block'}[self.token_type],
+ self.contents[:20].replace('\n', ''))
- def __repr__(self):
- return '<%s token: "%s">' % (
- {TOKEN_TEXT: 'Text', TOKEN_VAR: 'Var', TOKEN_BLOCK: 'Block'}[self.token_type],
- self.contents[:].replace('\n', '')
- )
+ def split_contents(self):
+ return smart_split(self.contents)
class Lexer(object):
def __init__(self, template_string, origin):
@@ -367,7 +366,6 @@ class DebugParser(Parser):
if not hasattr(e, 'source'):
e.source = token.source
-
def lexer_factory(*args, **kwargs):
if settings.TEMPLATE_DEBUG:
return DebugLexer(*args, **kwargs)
@@ -380,8 +378,7 @@ def parser_factory(*args, **kwargs):
else:
return Parser(*args, **kwargs)
-
-class TokenParser:
+class TokenParser(object):
"""
Subclass this and implement the top() method to parse a template line. When
instantiating the parser, pass in the line from the Django template parser.
@@ -544,7 +541,7 @@ class FilterExpression(object):
upto = match.end()
if upto != len(token):
raise TemplateSyntaxError, "Could not parse the remainder: %s" % token[upto:]
- self.var , self.filters = var, filters
+ self.var, self.filters = var, filters
def resolve(self, context):
try:
@@ -564,7 +561,7 @@ class FilterExpression(object):
def args_check(name, func, provided):
provided = list(provided)
plen = len(provided)
- (args, varargs, varkw, defaults) = getargspec(func)
+ args, varargs, varkw, defaults = getargspec(func)
# First argument is filter input.
args.pop(0)
if defaults:
@@ -614,7 +611,7 @@ def resolve_variable(path, context):
(The example assumes VARIABLE_ATTRIBUTE_SEPARATOR is '.')
"""
- if path[0] in '0123456789':
+ if path[0].isdigit():
number_type = '.' in path and float or int
try:
current = number_type(path)
@@ -655,11 +652,11 @@ def resolve_variable(path, context):
if getattr(e, 'silent_variable_failure', False):
current = settings.TEMPLATE_STRING_IF_INVALID
else:
- raise
+ raise
del bits[0]
return current
-class Node:
+class Node(object):
def render(self, context):
"Return the node rendered as a string"
pass
@@ -820,7 +817,7 @@ class Library(object):
return func
def simple_tag(self,func):
- (params, xx, xxx, defaults) = getargspec(func)
+ params, xx, xxx, defaults = getargspec(func)
class SimpleNode(Node):
def __init__(self, vars_to_resolve):
@@ -837,7 +834,7 @@ class Library(object):
def inclusion_tag(self, file_name, context_class=Context, takes_context=False):
def dec(func):
- (params, xx, xxx, defaults) = getargspec(func)
+ params, xx, xxx, defaults = getargspec(func)
if takes_context:
if params[0] == 'context':
params = params[1:]
diff --git a/django/template/context.py b/django/template/context.py
index f50fb07598..44a97f95a8 100644
--- a/django/template/context.py
+++ b/django/template/context.py
@@ -7,7 +7,7 @@ class ContextPopException(Exception):
"pop() has been called more times than push()"
pass
-class Context:
+class Context(object):
"A stack container for variable context"
def __init__(self, dict_=None):
dict_ = dict_ or {}
diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
index 03069121ee..453c34b0bd 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -330,6 +330,8 @@ def get_digit(value, arg):
def date(value, arg=None):
"Formats a date according to the given format"
from django.utils.dateformat import format
+ if not value:
+ return ''
if arg is None:
arg = settings.DATE_FORMAT
return format(value, arg)
@@ -337,6 +339,8 @@ def date(value, arg=None):
def time(value, arg=None):
"Formats a time according to the given format"
from django.utils.dateformat import time_format
+ if not value:
+ return ''
if arg is None:
arg = settings.TIME_FORMAT
return time_format(value, arg)
@@ -344,6 +348,8 @@ def time(value, arg=None):
def timesince(value):
'Formats a date as the time since that date (i.e. "4 days, 6 hours")'
from django.utils.timesince import timesince
+ if not value:
+ return ''
return timesince(value)
###################
diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py
index 18f1b9ab30..8b52b70cda 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
+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 get_library, Library, InvalidTemplateLibrary
from django.conf import settings
import sys
@@ -149,9 +149,10 @@ class IfEqualNode(Node):
return self.nodelist_false.render(context)
class IfNode(Node):
- def __init__(self, bool_exprs, nodelist_true, nodelist_false):
+ def __init__(self, bool_exprs, nodelist_true, nodelist_false, link_type):
self.bool_exprs = bool_exprs
self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
+ self.link_type = link_type
def __repr__(self):
return "<If node>"
@@ -171,14 +172,28 @@ class IfNode(Node):
return nodes
def render(self, context):
- for ifnot, bool_expr in self.bool_exprs:
- try:
- value = bool_expr.resolve(context)
- except VariableDoesNotExist:
- value = None
- if (value and not ifnot) or (ifnot and not value):
- return self.nodelist_true.render(context)
- return self.nodelist_false.render(context)
+ if self.link_type == IfNode.LinkTypes.or_:
+ for ifnot, bool_expr in self.bool_exprs:
+ try:
+ value = bool_expr.resolve(context)
+ except VariableDoesNotExist:
+ value = None
+ if (value and not ifnot) or (ifnot and not value):
+ return self.nodelist_true.render(context)
+ return self.nodelist_false.render(context)
+ else:
+ for ifnot, bool_expr in self.bool_exprs:
+ try:
+ value = bool_expr.resolve(context)
+ except VariableDoesNotExist:
+ value = None
+ if not ((value and not ifnot) or (ifnot and not value)):
+ return self.nodelist_false.render(context)
+ return self.nodelist_true.render(context)
+
+ class LinkTypes:
+ and_ = 0,
+ or_ = 1
class RegroupNode(Node):
def __init__(self, target, expression, var_name):
@@ -260,7 +275,10 @@ class TemplateTagNode(Node):
mapping = {'openblock': BLOCK_TAG_START,
'closeblock': BLOCK_TAG_END,
'openvariable': VARIABLE_TAG_START,
- 'closevariable': VARIABLE_TAG_END}
+ 'closevariable': VARIABLE_TAG_END,
+ 'openbrace': SINGLE_BRACE_START,
+ 'closebrace': SINGLE_BRACE_END,
+ }
def __init__(self, tagtype):
self.tagtype = tagtype
@@ -487,7 +505,7 @@ def do_ifequal(parser, token, negate):
...
{% endifnotequal %}
"""
- bits = token.contents.split()
+ bits = list(token.split_contents())
if len(bits) != 3:
raise TemplateSyntaxError, "%r takes two arguments" % bits[0]
end_tag = 'end' + bits[0]
@@ -561,11 +579,22 @@ def do_if(parser, token):
if not bits:
raise TemplateSyntaxError, "'if' statement requires at least one argument"
# bits now looks something like this: ['a', 'or', 'not', 'b', 'or', 'c.d']
- boolpairs = ' '.join(bits).split(' or ')
+ bitstr = ' '.join(bits)
+ boolpairs = bitstr.split(' and ')
boolvars = []
+ if len(boolpairs) == 1:
+ link_type = IfNode.LinkTypes.or_
+ boolpairs = bitstr.split(' or ')
+ else:
+ link_type = IfNode.LinkTypes.and_
+ if ' or ' in bitstr:
+ raise TemplateSyntaxError, "'if' tags can't mix 'and' and 'or'"
for boolpair in boolpairs:
if ' ' in boolpair:
- not_, boolvar = boolpair.split()
+ try:
+ not_, boolvar = boolpair.split()
+ except ValueError:
+ raise TemplateSyntaxError, "'if' statement improperly formatted"
if not_ != 'not':
raise TemplateSyntaxError, "Expected 'not' in if statement"
boolvars.append((True, parser.compile_filter(boolvar)))
@@ -578,7 +607,7 @@ def do_if(parser, token):
parser.delete_first_token()
else:
nodelist_false = NodeList()
- return IfNode(boolvars, nodelist_true, nodelist_false)
+ return IfNode(boolvars, nodelist_true, nodelist_false, link_type)
do_if = register.tag("if", do_if)
#@register.tag
@@ -783,6 +812,8 @@ def templatetag(parser, token):
``closeblock`` ``%}``
``openvariable`` ``{{``
``closevariable`` ``}}``
+ ``openbrace`` ``{``
+ ``closebrace`` ``}``
================== =======
"""
bits = token.contents.split()
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 3d7c4275bb..632e804f26 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -1,4 +1,4 @@
-class MergeDict:
+class MergeDict(object):
"""
A simple class for creating new "virtual" dictionaries that actualy look
up values in more than one dictionary, passed in the constructor.
diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py
index 4e5f2bc8c0..0890a81a81 100644
--- a/django/utils/dateformat.py
+++ b/django/utils/dateformat.py
@@ -19,7 +19,7 @@ import re, time
re_formatchars = re.compile(r'(?<!\\)([aABdDfFgGhHiIjlLmMnNOPrsStTUwWyYzZ])')
re_escaped = re.compile(r'\\(.)')
-class Formatter:
+class Formatter(object):
def format(self, formatstr):
pieces = []
for i, piece in enumerate(re_formatchars.split(formatstr)):
diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py
index 4c5d515f41..2eb27a40b7 100644
--- a/django/utils/feedgenerator.py
+++ b/django/utils/feedgenerator.py
@@ -36,7 +36,7 @@ def get_tag_uri(url, date):
tag = re.sub('#', '/', tag)
return 'tag:' + tag
-class SyndicationFeed:
+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,
@@ -108,7 +108,7 @@ class SyndicationFeed:
else:
return datetime.datetime.now()
-class Enclosure:
+class Enclosure(object):
"Represents an RSS enclosure"
def __init__(self, url, length, mime_type):
"All args are expected to be Python Unicode objects"
@@ -126,6 +126,8 @@ class RssFeed(SyndicationFeed):
handler.addQuickElement(u"description", self.feed['description'])
if self.feed['language'] is not None:
handler.addQuickElement(u"language", self.feed['language'])
+ for cat in self.feed['categories']:
+ handler.addQuickElement(u"category", cat)
self.write_items(handler)
self.endChannelElement(handler)
handler.endElement(u"rss")
diff --git a/django/utils/text.py b/django/utils/text.py
index 7b6e1182ab..7df9bc03b7 100644
--- a/django/utils/text.py
+++ b/django/utils/text.py
@@ -109,3 +109,21 @@ def javascript_quote(s):
s = s.replace("'", "\\'")
return str(ustring_re.sub(fix, s))
+smart_split_re = re.compile('("(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'|[^\\s]+)')
+def smart_split(text):
+ """
+ Generator that splits a string by spaces, leaving quoted phrases together.
+ Supports both single and double quotes, and supports escaping quotes with
+ backslashes. In the output, strings will keep their initial and trailing
+ quote marks.
+ >>> list(smart_split('This is "a person\'s" test.'))
+ ['This', 'is', '"a person\'s"', 'test.']
+ """
+ for bit in smart_split_re.finditer(text):
+ bit = bit.group(0)
+ if bit[0] == '"':
+ yield '"' + bit[1:-1].replace('\\"', '"').replace('\\\\', '\\') + '"'
+ elif bit[0] == "'":
+ yield "'" + bit[1:-1].replace("\\'", "'").replace("\\\\", "\\") + "'"
+ else:
+ yield bit
diff --git a/django/views/debug.py b/django/views/debug.py
index 16cf937d80..6cbbde987b 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -111,6 +111,12 @@ def technical_500_response(request, exc_type, exc_value, tb):
})
tb = tb.tb_next
+ if not frames:
+ frames = [{
+ 'filename': '&lt;unknown&gt;',
+ 'function': '?',
+ 'lineno': '?',
+ }]
t = Template(TECHNICAL_500_TEMPLATE)
c = Context({
'exception_type': exc_type.__name__,
diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py
index 0804cdf30b..c6d7db7af5 100644
--- a/django/views/generic/create_update.py
+++ b/django/views/generic/create_update.py
@@ -106,6 +106,8 @@ def update_object(request, model, object_id=None, slug=None,
if request.POST:
new_data = request.POST.copy()
+ if model._meta.has_field_type(FileField):
+ new_data.update(request.FILES)
errors = manipulator.get_validation_errors(new_data)
manipulator.do_html2python(new_data)
if not errors:
diff --git a/docs/add_ons.txt b/docs/add_ons.txt
index 9f5dc640da..d72e92b018 100644
--- a/docs/add_ons.txt
+++ b/docs/add_ons.txt
@@ -49,8 +49,8 @@ humanize
========
A set of Django template filters useful for adding a "human touch" to data.
-To activate these filters, add ``'django.contrib.english'`` to your
-``INSTALLED_APPS`` setting. Once you've done that, use ``{% load english %}``
+To activate these filters, add ``'django.contrib.humanize'`` to your
+``INSTALLED_APPS`` setting. Once you've done that, use ``{% load humanize %}``
in a template, and you'll have access to these filters:
apnumber
diff --git a/docs/authentication.txt b/docs/authentication.txt
index c1a1f8494d..3edbc21f7a 100644
--- a/docs/authentication.txt
+++ b/docs/authentication.txt
@@ -355,8 +355,8 @@ Here's what ``django.contrib.auth.views.login`` does::
form.
It's your responsibility to provide the login form in a template called
-``registration/login.html``. This template gets passed three template context
-variables:
+``registration/login.html`` by default. This template gets passed three
+template context variables:
* ``form``: A ``FormWrapper`` object representing the login form. See the
`forms documentation`_ for more on ``FormWrapper`` objects.
@@ -365,6 +365,13 @@ variables:
* ``site_name``: The name of the current ``Site``, according to the
``SITE_ID`` setting. See the `site framework docs`_.
+If you'd prefer not to call the template ``registration/login.html``, you can
+pass the ``template_name`` parameter via the extra arguments to the view in
+your URLconf. For example, this URLconf line would use ``myapp/login.html``
+instead::
+
+ (r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'}),
+
Here's a sample ``registration/login.html`` template you can use as a starting
point. It assumes you have a ``base.html`` template that defines a ``content``
block::
diff --git a/docs/db-api.txt b/docs/db-api.txt
index 3624620609..5108949184 100644
--- a/docs/db-api.txt
+++ b/docs/db-api.txt
@@ -559,7 +559,7 @@ following models::
# ...
hometown = models.ForeignKey(City)
- class Book(meta.Model):
+ class Book(models.Model):
# ...
author = models.ForeignKey(Person)
@@ -705,6 +705,64 @@ The ``DoesNotExist`` exception inherits from
except ObjectDoesNotExist:
print "Either the entry or blog doesn't exist."
+``get_or_create(**kwargs)``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A convenience method for looking up an object with the given kwargs, creating
+one if necessary.
+
+Returns a tuple of ``(object, created)``, where ``object`` is the retrieved or
+created object and ``created`` is a boolean specifying whether a new object was
+created.
+
+This is meant as a shortcut to boilerplatish code and is mostly useful for
+data-import scripts. For example::
+
+ try:
+ obj = Person.objects.get(first_name='John', last_name='Lennon')
+ except Person.DoesNotExist:
+ obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
+ obj.save()
+
+This pattern gets quite unwieldy as the number of fields in a model goes up.
+The above example can be rewritten using ``get_or_create()`` like so::
+
+ obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
+ defaults={'birthday': date(1940, 10, 9)})
+
+Any keyword arguments passed to ``get_or_create()`` -- *except* an optional one
+called ``defaults`` -- will be used in a ``get()`` call. If an object is found,
+``get_or_create()`` returns a tuple of that object and ``False``. If an object
+is *not* found, ``get_or_create()`` will instantiate and save a new object,
+returning a tuple of the new object and ``True``. The new object will be
+created according to this algorithm::
+
+ defaults = kwargs.pop('defaults', {})
+ params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
+ params.update(defaults)
+ obj = self.model(**params)
+ obj.save()
+
+In English, that means start with any non-``'defaults'`` keyword argument that
+doesn't contain a double underscore (which would indicate a non-exact lookup).
+Then add the contents of ``defaults``, overriding any keys if necessary, and
+use the result as the keyword arguments to the model class.
+
+If you have a field named ``defaults`` and want to use it as an exact lookup in
+``get_or_create()``, just use ``'defaults__exact'``, like so::
+
+ Foo.objects.get_or_create(defaults__exact='bar', defaults={'defaults': 'baz'})
+
+Finally, a word on using ``get_or_create()`` in Django views. As mentioned
+earlier, ``get_or_create()`` is mostly useful in scripts that need to parse
+data and create new records if existing ones aren't available. But if you need
+to use ``get_or_create()`` in a view, please make sure to use it only in
+``POST`` requests unless you have a good reason not to. ``GET`` requests
+shouldn't have any effect on data; use ``POST`` whenever a request to a page
+has a side effect on your data. For more, see `Safe methods`_ in the HTTP spec.
+
+.. _Safe methods: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
+
``count()``
~~~~~~~~~~~
diff --git a/docs/faq.txt b/docs/faq.txt
index a2c069f0ca..7238a0aef7 100644
--- a/docs/faq.txt
+++ b/docs/faq.txt
@@ -200,6 +200,23 @@ In the meantime, though, check out this `unofficial Django screencast`_.
.. _unofficial Django screencast: http://www.throwingbeans.org/django_screencasts.html
+Is Django a content-management-system (CMS)?
+--------------------------------------------
+
+No, Django is not a CMS, or any sort of "turnkey product" in and of itself.
+It's a Web framework; it's a programming tool that lets you build Web sites.
+
+For example, it doesn't make much sense to compare Django to something like
+Drupal_, because Django is something you use to *create* things like Drupal.
+
+Of course, Django's automatic admin site is fantastic and timesaving -- but
+the admin site is one module of Django the framework. Furthermore, although
+Django has special conveniences for building "CMS-y" apps, that doesn't mean
+it's not just as appropriate for building "non-CMS-y" apps (whatever that
+means!).
+
+.. _Drupal: http://drupal.org/
+
When will you release Django 1.0?
---------------------------------
@@ -222,7 +239,7 @@ How can I download the Django documentation to read it offline?
---------------------------------------------------------------
The Django docs are available in the ``docs`` directory of each Django tarball
-release. These docs are in ReST (restructured text) format, and each text file
+release. These docs are in ReST (ReStructured Text) format, and each text file
corresponds to a Web page on the official Django site.
Because the documentation is `stored in revision control`_, you can browse
@@ -297,13 +314,16 @@ as long as that server has WSGI_ hooks. See the `server arrangements wiki page`_
How do I install mod_python on Windows?
---------------------------------------
- * For Python 2.4, check out this `guide to mod_python & Python 2.3`_.
+ * For Python 2.4, grab mod_python from `win32 build of mod_python for
+ Python 2.4`_.
+ * For Python 2.4, check out this `Django on Windows howto`_.
* For Python 2.3, grab mod_python from http://www.modpython.org/ and read
`Running mod_python on Apache on Windows2000`_.
* Also, try this (not Windows-specific) `guide to getting mod_python
working`_.
-.. _`guide to mod_python & Python 2.3`: http://www.lehuen.com/nicolas/index.php/2005/02/21/39-win32-build-of-mod_python-314-for-python-24
+.. _`win32 build of mod_python for Python 2.4`: http://www.lehuen.com/nicolas/index.php/2005/02/21/39-win32-build-of-mod_python-314-for-python-24
+.. _`Django on Windows howto`: http://thinkhole.org/wp/2006/04/03/django-on-windows-howto/
.. _`Running mod_python on Apache on Windows2000`: http://groups-beta.google.com/group/comp.lang.python/msg/139af8c83a5a9d4f
.. _`guide to getting mod_python working`: http://www.dscpl.com.au/articles/modpython-001.html
@@ -388,19 +408,12 @@ Using a ``FileField`` or an ``ImageField`` in a model takes a few steps:
If I make changes to a model, how do I update the database?
-----------------------------------------------------------
-If you don't mind clearing data, just pipe the output of the appropriate
-``django-admin.py sqlreset`` command into your database's command-line utility.
-For example::
-
- django-admin.py sqlreset appname | psql dbname
+If you don't mind clearing data, your project's ``manage.py`` utility has an
+option to reset the SQL for a particular application::
-That "psql" assumes you're using PostgreSQL. If you're using MySQL, use the
-appropriate command-line utility, ``mysql``.
+ manage.py reset appname
-``django-admin.py sqlreset`` outputs SQL that clears the app's database
-table(s) and creates new ones. The above command uses a Unix pipe to send the
-SQL directly to the PostgreSQL command-line utility, which accepts SQL as
-input.
+This drops any tables associated with ``appname`` and recreates them.
If you do care about deleting data, you'll have to execute the ``ALTER TABLE``
statements manually in your database. That's the way we've always done it,
diff --git a/docs/forms.txt b/docs/forms.txt
index 2f8a3106fc..5026bc1bab 100644
--- a/docs/forms.txt
+++ b/docs/forms.txt
@@ -15,6 +15,8 @@ We'll take a top-down approach to examining Django's form validation framework,
because much of the time you won't need to use the lower-level APIs. Throughout
this document, we'll be working with the following model, a "place" object::
+ from django.db import models
+
PLACE_TYPES = (
(1, 'Bar'),
(2, 'Restaurant'),
@@ -22,13 +24,13 @@ this document, we'll be working with the following model, a "place" object::
(4, 'Secret Hideout'),
)
- class Place(meta.Model):
- name = meta.CharField(maxlength=100)
- address = meta.CharField(maxlength=100, blank=True)
- city = meta.CharField(maxlength=50, blank=True)
- state = meta.USStateField()
- zip_code = meta.CharField(maxlength=5, blank=True)
- place_type = meta.IntegerField(choices=PLACE_TYPES)
+ class Place(models.Model):
+ name = models.CharField(maxlength=100)
+ address = models.CharField(maxlength=100, blank=True)
+ city = models.CharField(maxlength=50, blank=True)
+ state = models.USStateField()
+ zip_code = models.CharField(maxlength=5, blank=True)
+ place_type = models.IntegerField(choices=PLACE_TYPES)
class Admin:
pass
diff --git a/docs/i18n.txt b/docs/i18n.txt
index e6660f939d..1220ea95b3 100644
--- a/docs/i18n.txt
+++ b/docs/i18n.txt
@@ -133,8 +133,8 @@ For example, to translate a model's ``help_text``, do the following::
from django.utils.translation import gettext_lazy
- class MyThing(meta.Model):
- name = meta.CharField(help_text=gettext_lazy('This is the help text'))
+ class MyThing(models.Model):
+ name = models.CharField(help_text=gettext_lazy('This is the help text'))
In this example, ``gettext_lazy()`` stores a lazy reference to the string --
not the actual translation. The translation itself will be done when the string
@@ -145,8 +145,8 @@ If you don't like the verbose name ``gettext_lazy``, you can just alias it as
from django.utils.translation import gettext_lazy as _
- class MyThing(meta.Model):
- name = meta.CharField(help_text=_('This is the help text'))
+ class MyThing(models.Model):
+ name = models.CharField(help_text=_('This is the help text'))
Always use lazy translations in `Django models`_. And it's a good idea to add
translations for the field names and table names, too. This means writing
@@ -155,8 +155,8 @@ class, though::
from django.utils.translation import gettext_lazy as _
- class MyThing(meta.Model):
- name = meta.CharField(_('name'), help_text=_('This is the help text'))
+ class MyThing(models.Model):
+ name = models.CharField(_('name'), help_text=_('This is the help text'))
class Meta:
verbose_name = _('my thing')
verbose_name_plural = _('mythings')
@@ -230,12 +230,17 @@ Each ``RequestContext`` has access to two translation-specific variables:
language code and the second is the language name (in that language).
* ``LANGUAGE_CODE`` is the current user's preferred language, as a string.
Example: ``en-us``. (See "How language preference is discovered", below.)
+ * ``LANGUAGE_BIDI`` is the current language's direction. If True, it's a
+ right-to-left language, e.g: Hebrew, Arabic. If False it's a
+ left-to-right language, e.g: English, French, German etc.
+
If you don't use the ``RequestContext`` extension, you can get those values with
-two tags::
+three tags::
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
+ {% get_current_language_bidi as LANGUAGE_BIDI %}
These tags also require a ``{% load i18n %}``.
diff --git a/docs/model-api.txt b/docs/model-api.txt
index c6707a691b..0dc98416a3 100644
--- a/docs/model-api.txt
+++ b/docs/model-api.txt
@@ -445,7 +445,8 @@ empty value. If a field has ``blank=False``, the field will be required.
``choices``
~~~~~~~~~~~
-A list of 2-tuples to use as choices for this field.
+An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this
+field.
If this is given, Django's admin will use a select box instead of the
standard text field and will limit choices to the choices given.
@@ -481,6 +482,12 @@ or outside your model class altogether::
class Foo(models.Model):
gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
+Finally, note that choices can be any iterable object -- not necessarily a
+list or tuple. This lets you construct choices dynamically. But if you find
+yourself hacking ``choices`` to be dynamic, you're probably better off using
+a proper database table with a ``ForeignKey``. ``choices`` is meant for static
+data that doesn't change much, if ever.
+
``core``
~~~~~~~~
@@ -1627,10 +1634,10 @@ to happen whenever you save an object. For example::
name = models.CharField(maxlength=100)
tagline = models.TextField()
- def save(self):
- do_something()
- super(Blog, self).save() # Call the "real" save() method.
- do_something_else()
+ def save(self):
+ do_something()
+ super(Blog, self).save() # Call the "real" save() method.
+ do_something_else()
You can also prevent saving::
@@ -1638,11 +1645,11 @@ You can also prevent saving::
name = models.CharField(maxlength=100)
tagline = models.TextField()
- def save(self):
- if self.name == "Yoko Ono's blog":
- return # Yoko shall never have her own blog!
- else:
- super(Blog, self).save() # Call the "real" save() method.
+ def save(self):
+ if self.name == "Yoko Ono's blog":
+ return # Yoko shall never have her own blog!
+ else:
+ super(Blog, self).save() # Call the "real" save() method.
.. _database API docs: http://www.djangoproject.com/documentation/db_api/
diff --git a/docs/request_response.txt b/docs/request_response.txt
index 33e5ef4d84..4939cac76f 100644
--- a/docs/request_response.txt
+++ b/docs/request_response.txt
@@ -400,6 +400,10 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in
``HttpResponseForbidden``
Acts just like ``HttpResponse`` but uses a 403 status code.
+``HttpResponseNotAllowed``
+ Like ``HttpResponse``, but uses a 405 status code. Takes a single,
+ required argument: a list of permitted methods (e.g. ``['GET', 'POST']``).
+
``HttpResponseGone``
Acts just like ``HttpResponse`` but uses a 410 status code.
diff --git a/docs/syndication_feeds.txt b/docs/syndication_feeds.txt
index b7b0a9047b..4f77c4ff21 100644
--- a/docs/syndication_feeds.txt
+++ b/docs/syndication_feeds.txt
@@ -439,6 +439,23 @@ This example illustrates all possible attributes and methods for a ``Feed`` clas
author_link = 'http://www.example.com/' # Hard-coded author URL.
+ # CATEGORIES -- One of the following three is optional. The framework
+ # looks for them in this order. In each case, the method/attribute
+ # should return an iterable object that returns strings.
+
+ def categories(self, obj):
+ """
+ Takes the object returned by get_object() and returns the feed's
+ categories as iterable over strings.
+ """
+
+ def categories(self):
+ """
+ Returns the feed's categories as iterable over strings.
+ """
+
+ categories = ("python", "django") # Hard-coded list of categories.
+
# ITEMS -- One of the following three is required. The framework looks
# for them in this order.
@@ -602,6 +619,25 @@ This example illustrates all possible attributes and methods for a ``Feed`` clas
item_pubdate = datetime.datetime(2005, 5, 3) # Hard-coded pubdate.
+ # ITEM CATEGORIES -- It's optional to use one of these three. This is
+ # a hook that specifies how to get the list of categories for a given
+ # item. In each case, the method/attribute should return an iterable
+ # object that returns strings.
+
+ def item_categories(self, item):
+ """
+ Takes an item, as returned by items(), and returns the item's
+ categories.
+ """
+
+ def item_categories(self):
+ """
+ Returns the categories for every item in the feed.
+ """
+
+ item_categories = ("python", "django") # Hard-coded categories.
+
+
The low-level framework
=======================
diff --git a/docs/templates.txt b/docs/templates.txt
index c191b409f4..5f397c5a60 100644
--- a/docs/templates.txt
+++ b/docs/templates.txt
@@ -454,8 +454,12 @@ displayed by the ``{{ athlete_list|length }}`` variable.
As you can see, the ``if`` tag can take an option ``{% else %}`` clause that
will be displayed if the test fails.
-``if`` tags may use ``or`` or ``not`` to test a number of variables or to negate
-a given variable::
+``if`` tags may use ``and``, ``or`` or ``not`` to test a number of variables or
+to negate a given variable::
+
+ {% if athlete_list and coach_list %}
+ Both athletes and coaches are available.
+ {% endif %}
{% if not athlete_list %}
There are no athletes.
@@ -468,16 +472,24 @@ a given variable::
{% if not athlete_list or coach_list %}
There are no athletes or there are some coaches (OK, so
writing English translations of boolean logic sounds
- stupid; it's not my fault).
+ stupid; it's not our fault).
+ {% endif %}
+
+ {% if athlete_list and not coach_list %}
+ There are some athletes and absolutely no coaches.
{% endif %}
-For simplicity, ``if`` tags do not allow ``and`` clauses; use nested ``if``
-tags instead::
+``if`` tags don't allow ``and`` and ``or`` clauses within the same tag, because
+the order of logic would be ambiguous. For example, this is invalid::
+
+ {% if athlete_list and coach_list or cheerleader_list %}
+
+If you need to combine ``and`` and ``or`` to do advanced logic, just use nested
+``if`` tags. For example::
{% if athlete_list %}
- {% if coach_list %}
- Number of athletes: {{ athlete_list|length }}.
- Number of coaches: {{ coach_list|length }}.
+ {% if coach_list or cheerleader_list %}
+ We have athletes, and either coaches or cheerleaders!
{% endif %}
{% endif %}
@@ -754,6 +766,8 @@ The argument tells which template bit to output:
``closeblock`` ``%}``
``openvariable`` ``{{``
``closevariable`` ``}}``
+ ``openbrace`` ``{``
+ ``closebrace`` ``}``
================== =======
widthratio
diff --git a/docs/templates_python.txt b/docs/templates_python.txt
index dea5bcbee6..5e3038ebb4 100644
--- a/docs/templates_python.txt
+++ b/docs/templates_python.txt
@@ -502,12 +502,13 @@ Although the Django template language comes with several default tags and
filters, you might want to write your own. It's easy to do.
First, create a ``templatetags`` package in the appropriate Django app's
-package. It should be on the same level as ``models``, ``views.py``, etc. For
+package. It should be on the same level as ``models.py``, ``views.py``, etc. For
example::
polls/
- models/
+ models.py
templatetags/
+ views.py
Add two files to the ``templatetags`` package: an ``__init__.py`` file and a
file that will contain your custom tag/filter definitions. The name of the
diff --git a/tests/modeltests/custom_pk/models.py b/tests/modeltests/custom_pk/models.py
index 6193852adf..f7b790ca21 100644
--- a/tests/modeltests/custom_pk/models.py
+++ b/tests/modeltests/custom_pk/models.py
@@ -8,7 +8,8 @@ this behavior by explicitly adding ``primary_key=True`` to a field.
from django.db import models
class Employee(models.Model):
- employee_code = models.CharField(maxlength=10, primary_key=True)
+ employee_code = models.CharField(maxlength=10, primary_key=True,
+ db_column = 'code')
first_name = models.CharField(maxlength=20)
last_name = models.CharField(maxlength=20)
class Meta:
diff --git a/tests/modeltests/empty/__init__.py b/tests/modeltests/empty/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/modeltests/empty/__init__.py
diff --git a/tests/modeltests/empty/models.py b/tests/modeltests/empty/models.py
new file mode 100644
index 0000000000..c50878398d
--- /dev/null
+++ b/tests/modeltests/empty/models.py
@@ -0,0 +1,24 @@
+"""
+Empty model tests
+
+These test that things behave sensibly for the rare corner-case of a model with
+no fields.
+"""
+
+from django.db import models
+
+class Empty(models.Model):
+ pass
+
+API_TESTS = """
+>>> m = Empty()
+>>> m.id
+>>> m.save()
+>>> m2 = Empty()
+>>> m2.save()
+>>> len(Empty.objects.all())
+2
+>>> m.id is not None
+True
+
+"""
diff --git a/tests/modeltests/generic_relations/__init__.py b/tests/modeltests/generic_relations/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/modeltests/generic_relations/__init__.py
diff --git a/tests/modeltests/generic_relations/models.py b/tests/modeltests/generic_relations/models.py
new file mode 100644
index 0000000000..a9a775ad6e
--- /dev/null
+++ b/tests/modeltests/generic_relations/models.py
@@ -0,0 +1,108 @@
+"""
+33. Generic relations
+
+Generic relations let an object have a foreign key to any object through a
+content-type/object-id field. A generic foreign key can point to any object,
+be it animal, vegetable, or mineral.
+
+The cannonical example is tags (although this example implementation is *far*
+from complete).
+"""
+
+from django.db import models
+from django.contrib.contenttypes.models import ContentType
+
+class TaggedItem(models.Model):
+ """A tag on an item."""
+ tag = models.SlugField()
+ content_type = models.ForeignKey(ContentType)
+ object_id = models.PositiveIntegerField()
+
+ content_object = models.GenericForeignKey()
+
+ class Meta:
+ ordering = ["tag"]
+
+ def __str__(self):
+ return self.tag
+
+class Animal(models.Model):
+ common_name = models.CharField(maxlength=150)
+ latin_name = models.CharField(maxlength=150)
+
+ tags = models.GenericRelation(TaggedItem)
+
+ def __str__(self):
+ return self.common_name
+
+class Vegetable(models.Model):
+ name = models.CharField(maxlength=150)
+ is_yucky = models.BooleanField(default=True)
+
+ tags = models.GenericRelation(TaggedItem)
+
+ def __str__(self):
+ return self.name
+
+class Mineral(models.Model):
+ name = models.CharField(maxlength=150)
+ hardness = models.PositiveSmallIntegerField()
+
+ # note the lack of an explicit GenericRelation here...
+
+ def __str__(self):
+ return self.name
+
+API_TESTS = """
+# Create the world in 7 lines of code...
+>>> lion = Animal(common_name="Lion", latin_name="Panthera leo")
+>>> platypus = Animal(common_name="Platypus", latin_name="Ornithorhynchus anatinus")
+>>> eggplant = Vegetable(name="Eggplant", is_yucky=True)
+>>> bacon = Vegetable(name="Bacon", is_yucky=False)
+>>> quartz = Mineral(name="Quartz", hardness=7)
+>>> for o in (lion, platypus, eggplant, bacon, quartz):
+... o.save()
+
+# Objects with declared GenericRelations can be tagged directly -- the API
+# mimics the many-to-many API
+>>> lion.tags.create(tag="yellow")
+<TaggedItem: yellow>
+>>> lion.tags.create(tag="hairy")
+<TaggedItem: hairy>
+>>> bacon.tags.create(tag="fatty")
+<TaggedItem: fatty>
+>>> bacon.tags.create(tag="salty")
+<TaggedItem: salty>
+
+>>> lion.tags.all()
+[<TaggedItem: hairy>, <TaggedItem: yellow>]
+>>> bacon.tags.all()
+[<TaggedItem: fatty>, <TaggedItem: salty>]
+
+# You can easily access the content object like a foreign key
+>>> t = TaggedItem.objects.get(tag="salty")
+>>> t.content_object
+<Vegetable: Bacon>
+
+# Recall that the Mineral class doesn't have an explicit GenericRelation
+# defined. That's OK since you can create TaggedItems explicitally.
+>>> tag1 = TaggedItem(content_object=quartz, tag="shiny")
+>>> tag2 = TaggedItem(content_object=quartz, tag="clearish")
+>>> tag1.save()
+>>> tag2.save()
+
+# However, not having the convience takes a small toll when it comes
+# to do lookups
+>>> from django.contrib.contenttypes.models import ContentType
+>>> ctype = ContentType.objects.get_for_model(quartz)
+>>> TaggedItem.objects.filter(content_type__pk=ctype.id, object_id=quartz.id)
+[<TaggedItem: clearish>, <TaggedItem: shiny>]
+
+# You can set a generic foreign key in the way you'd expect
+>>> tag1.content_object = platypus
+>>> tag1.save()
+>>> platypus.tags.all()
+[<TaggedItem: shiny>]
+>>> TaggedItem.objects.filter(content_type__pk=ctype.id, object_id=quartz.id)
+[<TaggedItem: clearish>]
+""" \ No newline at end of file
diff --git a/tests/modeltests/get_or_create/__init__.py b/tests/modeltests/get_or_create/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/modeltests/get_or_create/__init__.py
diff --git a/tests/modeltests/get_or_create/models.py b/tests/modeltests/get_or_create/models.py
new file mode 100644
index 0000000000..10a8721afc
--- /dev/null
+++ b/tests/modeltests/get_or_create/models.py
@@ -0,0 +1,52 @@
+"""
+32. get_or_create()
+
+get_or_create() does what it says: it tries to look up an object with the given
+parameters. If an object isn't found, it creates one with the given parameters.
+"""
+
+from django.db import models
+
+class Person(models.Model):
+ first_name = models.CharField(maxlength=100)
+ last_name = models.CharField(maxlength=100)
+ birthday = models.DateField()
+
+ def __str__(self):
+ return '%s %s' % (self.first_name, self.last_name)
+
+API_TESTS = """
+# Acting as a divine being, create an Person.
+>>> from datetime import date
+>>> p = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
+>>> p.save()
+
+# Only one Person is in the database at this point.
+>>> Person.objects.count()
+1
+
+# get_or_create() a person with similar first names.
+>>> p, created = Person.objects.get_or_create(first_name='John', last_name='Lennon', defaults={'birthday': date(1940, 10, 9)})
+
+# get_or_create() didn't have to create an object.
+>>> created
+False
+
+# There's still only one Person in the database.
+>>> Person.objects.count()
+1
+
+# get_or_create() a Person with a different name.
+>>> p, created = Person.objects.get_or_create(first_name='George', last_name='Harrison', defaults={'birthday': date(1943, 2, 25)})
+>>> created
+True
+>>> Person.objects.count()
+2
+
+# If we execute the exact same statement, it won't create a Person.
+>>> p, created = Person.objects.get_or_create(first_name='George', last_name='Harrison', defaults={'birthday': date(1943, 2, 25)})
+>>> created
+False
+>>> Person.objects.count()
+2
+"""
diff --git a/tests/modeltests/invalid_models/models.py b/tests/modeltests/invalid_models/models.py
index 127cc9e0d2..1720dd96d3 100644
--- a/tests/modeltests/invalid_models/models.py
+++ b/tests/modeltests/invalid_models/models.py
@@ -74,7 +74,7 @@ invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places"
invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute.
invalid_models.fielderrors: "filefield": FileFields require an "upload_to" attribute.
invalid_models.fielderrors: "prepopulate": prepopulate_from should be a list or tuple.
-invalid_models.fielderrors: "choices": "choices" should be either a tuple or list.
+invalid_models.fielderrors: "choices": "choices" should be iterable (e.g., a tuple or list).
invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
invalid_models.fielderrors: "index": "db_index" should be either None, True or False.
diff --git a/tests/modeltests/properties/models.py b/tests/modeltests/properties/models.py
index e9d8da9594..3b0133bf8a 100644
--- a/tests/modeltests/properties/models.py
+++ b/tests/modeltests/properties/models.py
@@ -12,8 +12,14 @@ class Person(models.Model):
def _get_full_name(self):
return "%s %s" % (self.first_name, self.last_name)
+
+ def _set_full_name(self, combined_name):
+ self.first_name, self.last_name = combined_name.split(' ', 1)
+
full_name = property(_get_full_name)
+ full_name_2 = property(_get_full_name, _set_full_name)
+
API_TESTS = """
>>> a = Person(first_name='John', last_name='Lennon')
>>> a.save()
@@ -25,4 +31,10 @@ API_TESTS = """
Traceback (most recent call last):
...
AttributeError: can't set attribute
+
+# But "full_name_2" has, and it can be used to initialise the class.
+>>> a2 = Person(full_name_2 = 'Paul McCartney')
+>>> a2.save()
+>>> a2.first_name
+'Paul'
"""
diff --git a/tests/othertests/templates.py b/tests/othertests/templates.py
index ed7105bb71..96ad330917 100644
--- a/tests/othertests/templates.py
+++ b/tests/othertests/templates.py
@@ -169,8 +169,7 @@ TEMPLATE_TESTS = {
'comment-tag05': ("foo{% comment %} {% somerandomtag %} {% endcomment %}", {}, "foo"),
### CYCLE TAG #############################################################
- #'cycleXX': ('', {}, ''),
- 'cycle01': ('{% cycle a, %}', {}, 'a'),
+ 'cycle01': ('{% cycle a %}', {}, template.TemplateSyntaxError),
'cycle02': ('{% cycle a,b,c as abc %}{% cycle abc %}', {}, 'ab'),
'cycle03': ('{% cycle a,b,c as abc %}{% cycle abc %}{% cycle abc %}', {}, 'abc'),
'cycle04': ('{% cycle a,b,c as abc %}{% cycle abc %}{% cycle abc %}{% cycle abc %}', {}, 'abca'),
@@ -193,13 +192,11 @@ TEMPLATE_TESTS = {
'exception04': ("{% extends 'inheritance17' %}{% block first %}{% echo 400 %}5678{% endblock %}", {}, template.TemplateSyntaxError),
### FILTER TAG ############################################################
- #'filterXX': ('', {}, ''),
'filter01': ('{% filter upper %}{% endfilter %}', {}, ''),
'filter02': ('{% filter upper %}django{% endfilter %}', {}, 'DJANGO'),
'filter03': ('{% filter upper|lower %}django{% endfilter %}', {}, 'django'),
### FIRSTOF TAG ###########################################################
- #'firstofXX': ('', {}, ''),
'firstof01': ('{% firstof a b c %}', {'a':0,'b':0,'c':0}, ''),
'firstof02': ('{% firstof a b c %}', {'a':1,'b':0,'c':0}, '1'),
'firstof03': ('{% firstof a b c %}', {'a':0,'b':2,'c':0}, '2'),
@@ -220,8 +217,79 @@ TEMPLATE_TESTS = {
'if-tag02': ("{% if foo %}yes{% else %}no{% endif %}", {"foo": False}, "no"),
'if-tag03': ("{% if foo %}yes{% else %}no{% endif %}", {}, "no"),
+ # AND
+ 'if-tag-and01': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+ 'if-tag-and02': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+ 'if-tag-and03': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+ 'if-tag-and04': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+ 'if-tag-and05': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': False}, 'no'),
+ 'if-tag-and06': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'bar': False}, 'no'),
+ 'if-tag-and07': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True}, 'no'),
+ 'if-tag-and08': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'bar': True}, 'no'),
+
+ # OR
+ 'if-tag-or01': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+ 'if-tag-or02': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+ 'if-tag-or03': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+ 'if-tag-or04': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+ 'if-tag-or05': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': False}, 'no'),
+ 'if-tag-or06': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': False}, 'no'),
+ 'if-tag-or07': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True}, 'yes'),
+ 'if-tag-or08': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': True}, 'yes'),
+
+ # TODO: multiple ORs
+
+ # NOT
+ 'if-tag-not01': ("{% if not foo %}no{% else %}yes{% endif %}", {'foo': True}, 'yes'),
+ 'if-tag-not02': ("{% if not %}yes{% else %}no{% endif %}", {'foo': True}, 'no'),
+ 'if-tag-not03': ("{% if not %}yes{% else %}no{% endif %}", {'not': True}, 'yes'),
+ 'if-tag-not04': ("{% if not not %}no{% else %}yes{% endif %}", {'not': True}, 'yes'),
+ 'if-tag-not05': ("{% if not not %}no{% else %}yes{% endif %}", {}, 'no'),
+
+ 'if-tag-not06': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {}, 'no'),
+ 'if-tag-not07': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+ 'if-tag-not08': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+ 'if-tag-not09': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+ 'if-tag-not10': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+
+ 'if-tag-not11': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {}, 'no'),
+ 'if-tag-not12': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+ 'if-tag-not13': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+ 'if-tag-not14': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+ 'if-tag-not15': ("{% if not foo and bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'no'),
+
+ 'if-tag-not16': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+ 'if-tag-not17': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+ 'if-tag-not18': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+ 'if-tag-not19': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+ 'if-tag-not20': ("{% if foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+ 'if-tag-not21': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+ 'if-tag-not22': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'),
+ 'if-tag-not23': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+ 'if-tag-not24': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+ 'if-tag-not25': ("{% if not foo or bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+ 'if-tag-not26': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+ 'if-tag-not27': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+ 'if-tag-not28': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'),
+ 'if-tag-not29': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'no'),
+ 'if-tag-not30': ("{% if not foo and not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+ 'if-tag-not31': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {}, 'yes'),
+ 'if-tag-not32': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'),
+ 'if-tag-not33': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'yes'),
+ 'if-tag-not34': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'),
+ 'if-tag-not35': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'),
+
+ # AND and OR raises a TemplateSyntaxError
+ 'if-tag-error01': ("{% if foo or bar and baz %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, template.TemplateSyntaxError),
+ 'if-tag-error02': ("{% if foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+ 'if-tag-error03': ("{% if foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+ 'if-tag-error04': ("{% if not foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+ 'if-tag-error05': ("{% if not foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
+
### IFCHANGED TAG #########################################################
- #'ifchangedXX': ('', {}, ''),
'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,2,3) }, '123'),
'ifchanged02': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,3) }, '13'),
'ifchanged03': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,1) }, '1'),
@@ -238,6 +306,18 @@ TEMPLATE_TESTS = {
'ifequal09': ('{% ifequal a "test" %}yes{% else %}no{% endifequal %}', {}, "no"),
'ifequal10': ('{% ifequal a b %}yes{% else %}no{% endifequal %}', {}, "yes"),
+ # SMART SPLITTING
+ 'ifequal-split01': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {}, "no"),
+ 'ifequal-split02': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {'a': 'foo'}, "no"),
+ 'ifequal-split03': ('{% ifequal a "test man" %}yes{% else %}no{% endifequal %}', {'a': 'test man'}, "yes"),
+ 'ifequal-split04': ("{% ifequal a 'test man' %}yes{% else %}no{% endifequal %}", {'a': 'test man'}, "yes"),
+ 'ifequal-split05': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': ''}, "no"),
+ 'ifequal-split06': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': 'i "love" you'}, "yes"),
+ 'ifequal-split07': ("{% ifequal a 'i \"love\" you' %}yes{% else %}no{% endifequal %}", {'a': 'i love you'}, "no"),
+ 'ifequal-split08': (r"{% ifequal a 'I\'m happy' %}yes{% else %}no{% endifequal %}", {'a': "I'm happy"}, "yes"),
+ 'ifequal-split09': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slash\man"}, "yes"),
+ 'ifequal-split10': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slashman"}, "no"),
+
### IFNOTEQUAL TAG ########################################################
'ifnotequal01': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 2}, "yes"),
'ifnotequal02': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 1}, ""),
@@ -388,7 +468,6 @@ TEMPLATE_TESTS = {
"""),
### REGROUP TAG ###########################################################
- #'regroupXX': ('', {}, ''),
'regroup01': ('{% regroup data by bar as grouped %}' + \
'{% for group in grouped %}' + \
'{{ group.grouper }}:' + \
@@ -414,16 +493,18 @@ TEMPLATE_TESTS = {
{}, ''),
### TEMPLATETAG TAG #######################################################
- #'templatetagXX': ('', {}, ''),
'templatetag01': ('{% templatetag openblock %}', {}, '{%'),
'templatetag02': ('{% templatetag closeblock %}', {}, '%}'),
'templatetag03': ('{% templatetag openvariable %}', {}, '{{'),
'templatetag04': ('{% templatetag closevariable %}', {}, '}}'),
'templatetag05': ('{% templatetag %}', {}, template.TemplateSyntaxError),
'templatetag06': ('{% templatetag foo %}', {}, template.TemplateSyntaxError),
+ 'templatetag07': ('{% templatetag openbrace %}', {}, '{'),
+ 'templatetag08': ('{% templatetag closebrace %}', {}, '}'),
+ 'templatetag09': ('{% templatetag openbrace %}{% templatetag openbrace %}', {}, '{{'),
+ 'templatetag10': ('{% templatetag closebrace %}{% templatetag closebrace %}', {}, '}}'),
### WIDTHRATIO TAG ########################################################
- #'widthratioXX': ('', {}, ''),
'widthratio01': ('{% widthratio a b 0 %}', {'a':50,'b':100}, '0'),
'widthratio02': ('{% widthratio a b 100 %}', {'a':0,'b':0}, ''),
'widthratio03': ('{% widthratio a b 100 %}', {'a':0,'b':100}, '0'),
@@ -440,11 +521,11 @@ TEMPLATE_TESTS = {
'widthratio08': ('{% widthratio %}', {}, template.TemplateSyntaxError),
'widthratio09': ('{% widthratio a b %}', {'a':50,'b':100}, template.TemplateSyntaxError),
'widthratio10': ('{% widthratio a b 100.0 %}', {'a':50,'b':100}, template.TemplateSyntaxError),
-
+
### NOW TAG ########################################################
# Simple case
'now01' : ('{% now "j n Y"%}', {}, str(datetime.now().day) + ' ' + str(datetime.now().month) + ' ' + str(datetime.now().year)),
-
+
# Check parsing of escaped and special characters
'now02' : ('{% now "j "n" Y"%}', {}, template.TemplateSyntaxError),
# 'now03' : ('{% now "j \"n\" Y"%}', {}, str(datetime.now().day) + '"' + str(datetime.now().month) + '"' + str(datetime.now().year)),
diff --git a/tests/runtests.py b/tests/runtests.py
index f0eee97ec5..87cad83124 100755
--- a/tests/runtests.py
+++ b/tests/runtests.py
@@ -21,14 +21,14 @@ def log_error(model_name, title, description):
MODEL_TEST_DIR = os.path.join(os.path.dirname(__file__), MODEL_TESTS_DIR_NAME)
ALWAYS_INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.comments',
'django.contrib.contenttypes',
+ 'django.contrib.auth',
+ 'django.contrib.sites',
'django.contrib.flatpages',
'django.contrib.redirects',
'django.contrib.sessions',
- 'django.contrib.sites',
+ 'django.contrib.comments',
+ 'django.contrib.admin',
]
def get_test_models():
@@ -148,6 +148,12 @@ class TestRunner:
# Initialize the test database.
cursor = connection.cursor()
+
+ # Install the core always installed apps
+ for app in ALWAYS_INSTALLED_APPS:
+ self.output(1, "Installing contrib app %s" % app)
+ mod = __import__(app + ".models", '', '', [''])
+ management.install(mod)
# Run the tests for each test model.
self.output(1, "Running app tests")