From adf4b9311d5d64a2bdd58da50271c121ea22e397 Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Mon, 19 Jun 2006 15:23:57 +0000 Subject: [PATCH] multi-auth: Merged to [3151] git-svn-id: http://code.djangoproject.com/svn/django/branches/multi-auth@3152 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- AUTHORS | 1 + django/conf/__init__.py | 6 +- django/conf/locale/fr/LC_MESSAGES/django.mo | Bin 32926 -> 32921 bytes django/conf/locale/fr/LC_MESSAGES/django.po | 4 +- django/conf/locale/he/LC_MESSAGES/django.mo | Bin 35143 -> 36826 bytes django/conf/locale/he/LC_MESSAGES/django.po | 3249 +++++++++-------- django/conf/locale/he/LC_MESSAGES/djangojs.mo | Bin 1625 -> 1626 bytes django/conf/locale/he/LC_MESSAGES/djangojs.po | 3 +- django/conf/locale/pl/LC_MESSAGES/django.mo | Bin 13525 -> 23926 bytes django/conf/locale/pl/LC_MESSAGES/django.po | 305 +- django/conf/locale/ru/LC_MESSAGES/django.mo | Bin 29509 -> 31822 bytes django/conf/locale/ru/LC_MESSAGES/django.po | 76 +- django/conf/locale/sk/LC_MESSAGES/django.mo | Bin 32226 -> 32375 bytes django/conf/locale/sk/LC_MESSAGES/django.po | 1090 +++--- django/contrib/admin/filterspecs.py | 59 +- django/contrib/admin/media/css/rtl.css | 46 + .../media/js/admin/CollapsedFieldsets.js | 8 +- .../admin/media/js/admin/DateTimeShortcuts.js | 23 +- django/contrib/admin/media/js/core.js | 19 +- .../contrib/admin/templates/admin/base.html | 5 +- .../admin/templates/admin/filters.html | 3 +- .../admin/templates/admin/pagination.html | 3 +- .../admin/templates/admin/search_form.html | 2 +- .../registration/password_reset_email.html | 2 +- .../contrib/admin/templatetags/admin_list.py | 2 +- .../admin/templatetags/admin_modify.py | 13 + django/contrib/admin/views/main.py | 2 +- django/contrib/auth/management.py | 2 - django/contrib/auth/middleware.py | 2 +- django/contrib/auth/views.py | 24 +- django/contrib/contenttypes/management.py | 24 + django/contrib/flatpages/middleware.py | 2 +- django/contrib/redirects/middleware.py | 2 +- django/contrib/redirects/models.py | 4 +- django/contrib/sessions/middleware.py | 2 +- django/contrib/syndication/feeds.py | 4 +- django/core/cache/backends/base.py | 2 +- django/core/context_processors.py | 8 +- django/core/handlers/base.py | 2 +- django/core/management.py | 62 +- django/core/paginator.py | 2 +- django/core/servers/basehttp.py | 8 +- django/core/urlresolvers.py | 2 +- django/core/validators.py | 33 +- django/db/backends/ado_mssql/base.py | 3 + django/db/backends/mysql/base.py | 3 + django/db/backends/oracle/base.py | 3 + django/db/backends/postgresql/base.py | 3 + .../db/backends/postgresql_psycopg2/base.py | 3 + django/db/backends/sqlite3/base.py | 3 + django/db/backends/util.py | 2 +- django/db/models/__init__.py | 3 +- django/db/models/base.py | 21 +- django/db/models/fields/__init__.py | 2 +- django/db/models/fields/generic.py | 259 ++ django/db/models/fields/related.py | 4 +- django/db/models/manager.py | 11 +- django/db/models/options.py | 4 +- django/db/models/query.py | 19 +- django/db/transaction.py | 2 +- django/forms/__init__.py | 16 +- django/http/__init__.py | 6 + django/middleware/cache.py | 2 +- django/middleware/common.py | 4 +- django/middleware/doc.py | 2 +- django/middleware/gzip.py | 2 +- django/middleware/http.py | 2 +- django/middleware/locale.py | 2 +- django/middleware/transaction.py | 2 +- django/template/__init__.py | 41 +- django/template/context.py | 2 +- django/template/defaultfilters.py | 6 + django/template/defaulttags.py | 61 +- django/utils/datastructures.py | 2 +- django/utils/dateformat.py | 2 +- django/utils/feedgenerator.py | 6 +- django/utils/text.py | 18 + django/views/debug.py | 6 + django/views/generic/create_update.py | 2 + docs/add_ons.txt | 4 +- docs/authentication.txt | 11 +- docs/db-api.txt | 60 +- docs/faq.txt | 41 +- docs/forms.txt | 16 +- docs/i18n.txt | 19 +- docs/model-api.txt | 27 +- docs/request_response.txt | 4 + docs/syndication_feeds.txt | 36 + docs/templates.txt | 30 +- docs/templates_python.txt | 5 +- tests/modeltests/custom_pk/models.py | 3 +- tests/modeltests/empty/__init__.py | 0 tests/modeltests/empty/models.py | 24 + .../modeltests/generic_relations/__init__.py | 0 tests/modeltests/generic_relations/models.py | 108 + tests/modeltests/get_or_create/__init__.py | 0 tests/modeltests/get_or_create/models.py | 52 + tests/modeltests/invalid_models/models.py | 2 +- tests/modeltests/properties/models.py | 12 + tests/othertests/templates.py | 101 +- tests/runtests.py | 14 +- 101 files changed, 3639 insertions(+), 2565 deletions(-) create mode 100644 django/contrib/admin/media/css/rtl.css create mode 100644 django/contrib/contenttypes/management.py create mode 100644 django/db/models/fields/generic.py create mode 100644 tests/modeltests/empty/__init__.py create mode 100644 tests/modeltests/empty/models.py create mode 100644 tests/modeltests/generic_relations/__init__.py create mode 100644 tests/modeltests/generic_relations/models.py create mode 100644 tests/modeltests/get_or_create/__init__.py create mode 100644 tests/modeltests/get_or_create/models.py 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 Garth Kidd Sune Kirkeby + Cameron Knight (ckknight) Bruce Kroeze 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 38d7fab7bb37167e626629dec5f7788043d106de..d678225f2faf6762af89389a90408dfc74f76140 100644 GIT binary patch delta 3225 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\n" "Language-Team: français \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 e2101a527bc7cc71f95990e6ea83b57046d2a79b..0f8b07e5bbc3e97d13050b7ebff01878da6a549e 100644 GIT binary patch delta 10698 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 Nt9N9}c86=M{{!eTT_gYi delta 9402 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\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" -#: contrib/comments/models.py:67 contrib/comments/models.py:166 -msgid "object ID" -msgstr "מזהה אובייקט" +#: template/defaultfilters.py:389 +msgid "yes,no,maybe" +msgstr "כן,לא,אולי" -#: contrib/comments/models.py:68 -msgid "headline" -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 "יש להזין תוכן בשדה זה." -#: contrib/comments/models.py:69 contrib/comments/models.py:90 -#: contrib/comments/models.py:167 -msgid "comment" -msgstr "תגובה" - -#: contrib/comments/models.py:70 -msgid "rating #1" -msgstr "דירוג #1" - -#: contrib/comments/models.py:71 -msgid "rating #2" -msgstr "דירוג #2" - -#: contrib/comments/models.py:72 -msgid "rating #3" -msgstr "דירוג #3" - -#: contrib/comments/models.py:73 -msgid "rating #4" -msgstr "דירוג #4" - -#: contrib/comments/models.py:74 -msgid "rating #5" -msgstr "דירוג #5" - -#: contrib/comments/models.py:75 -msgid "rating #6" -msgstr "דירוג #6" - -#: contrib/comments/models.py:76 -msgid "rating #7" -msgstr "דירוג #7" - -#: contrib/comments/models.py:77 -msgid "rating #8" -msgstr "דירוג #8" - -#: contrib/comments/models.py:82 -msgid "is valid rating" -msgstr "האם דירוג חוקי" - -#: contrib/comments/models.py:83 contrib/comments/models.py:169 -msgid "date/time submitted" -msgstr "תאריך/שעת הגשה" - -#: contrib/comments/models.py:84 contrib/comments/models.py:170 -msgid "is public" -msgstr "ציבורי" - -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -msgid "IP address" -msgstr "כתובת IP" - -#: contrib/comments/models.py:86 -msgid "is removed" -msgstr "האם הוסר" - -#: contrib/comments/models.py:86 -msgid "" -"Check this box if the comment is inappropriate. A \"This comment has been " -"removed\" message will be displayed instead." -msgstr "" -"יש לסמן תיבה זו עבור תגובה לא נאותה. הודעת \"תגובה זו נמחקה\" תוצג במקום." - -#: contrib/comments/models.py:91 -msgid "comments" -msgstr "תגובות" - -#: contrib/comments/models.py:131 contrib/comments/models.py:207 -msgid "Content object" -msgstr "אובייקט תוכן" - -#: contrib/comments/models.py:159 +#: forms/__init__.py:381 #, python-format -msgid "" -"Posted by %(user)s at %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" -msgstr "" -"הוגש ע\"י %(user)s ב %(date)s\n" -"\n" -"%(comment)s\n" -"\n" -"http://%(domain)s%(url)s" +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 תווים." -#: contrib/comments/models.py:168 -msgid "person's name" -msgstr "שם" +#: forms/__init__.py:386 +msgid "Line breaks are not allowed here." +msgstr "מעברי שורה אסורים כאן." -#: contrib/comments/models.py:171 -msgid "ip address" -msgstr "כתובת IP" - -#: contrib/comments/models.py:173 -msgid "approved by staff" -msgstr "אושר ע\"י הצוות" - -#: contrib/comments/models.py:176 -msgid "free comment" -msgstr "הערה אנונימית" - -#: contrib/comments/models.py:177 -msgid "free comments" -msgstr "הערות אנונימיות" - -#: contrib/comments/models.py:233 -msgid "score" -msgstr "ציון" - -#: contrib/comments/models.py:234 -msgid "score date" -msgstr "תאריך ציון" - -#: contrib/comments/models.py:237 -msgid "karma score" -msgstr "ניקוד קארמה" - -#: contrib/comments/models.py:238 -msgid "karma scores" -msgstr "ניקודי קארמה" - -#: contrib/comments/models.py:242 +#: forms/__init__.py:485 forms/__init__.py:558 forms/__init__.py:597 #, python-format -msgid "%(score)d rating by %(user)s" -msgstr "%(score)d·דירוג ע\"י·%(user)s" +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "יש לבחור אפשרות חוקית; '%(data)s' אינו בין %(choices)s." -#: contrib/comments/models.py:258 -#, python-format -msgid "" -"This comment was flagged by %(user)s:\n" -"\n" -"%(text)s" -msgstr "" -"התגובה סומנה ע\"י %(user)s:\n" -"\n" -"%(text)s" +#: 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 "לא נשלח שום קובץ. נא לבדוק את סוג הקידוד של הטופס." -#: contrib/comments/models.py:265 -msgid "flag date" -msgstr "תאריך סימון" +#: forms/__init__.py:661 +msgid "The submitted file is empty." +msgstr "הקובץ שנשלח ריק." -#: contrib/comments/models.py:268 -msgid "user flag" -msgstr "סימון ע\"י משתמש" +#: forms/__init__.py:717 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "חש להזין מספר שלם בין ‎-32,768 ל- 32,767." -#: contrib/comments/models.py:269 -msgid "user flags" -msgstr "סימונים ע\"י משתמש" +#: forms/__init__.py:727 +msgid "Enter a positive number." +msgstr "יש להזין מספר חיובי." -#: contrib/comments/models.py:273 -#, python-format -msgid "Flag by %r" -msgstr "סימון ע\"י %r" +#: forms/__init__.py:737 +msgid "Enter a whole number between 0 and 32,767." +msgstr "יש להזין מספר שלם בין 0 ל- 32,767." -#: contrib/comments/models.py:278 -msgid "deletion date" -msgstr "תאריך מחיקה" - -#: contrib/comments/models.py:280 -msgid "moderator deletion" -msgstr "מחיקת מודרטור" - -#: contrib/comments/models.py:281 -msgid "moderator deletions" -msgstr "מחיקות מודרטור" - -#: contrib/comments/models.py:285 -#, python-format -msgid "Moderator deletion by %r" -msgstr "מחיקת מודרציה ע\"י %r" - -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "משתמשים אנונימיים אינם יכולים להצביע" - -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "מזהה תגובה שגוי" - -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "לא ניתן להצביע לעצמך" - -#: contrib/comments/views/comments.py:28 -msgid "" -"This rating is required because you've entered at least one other rating." -msgstr "הדירוג נדרש מאחר והזנת לפחות דרוג אחד אחר." - -#: contrib/comments/views/comments.py:112 -#, python-format -msgid "" -"This comment was posted by a user who has posted fewer than %(count)s " -"comment:\n" -"\n" -"%(text)s" -"This comment was posted by a user who has posted fewer than %(count)s " -"comments:\n" -"\n" -"%(text)s" -msgstr "" -"תגובה זו נשלחה ע\"י משתמש אשר שלח פחות מ %(count)s " -"תגובה:\n" -"\n" -"%(text)s" -"תגובה זו נשלחה ע\"י משתמש אשר שלח פחות מ %(count)s " -"תגובות:\n" -"\n" -"%(text)s" - -#: contrib/comments/views/comments.py:117 -#, python-format -msgid "" -"This comment was posted by a sketchy user:\n" -"\n" -"%(text)s" -msgstr "" -"ההודעה נשלחה ע\"י משתמש מפוקפק:\n" -"\n" -"%(text)s" - -#: contrib/comments/views/comments.py:189 -#: contrib/comments/views/comments.py:280 -msgid "Only POSTs are allowed" -msgstr "רק פעולות POST מותרות" - -#: contrib/comments/views/comments.py:193 -#: contrib/comments/views/comments.py:284 -msgid "One or more of the required fields wasn't submitted" -msgstr "אחד או יותר מהשדות הנדרשים אינו נשלח." - -#: contrib/comments/views/comments.py:197 -#: contrib/comments/views/comments.py:286 -msgid "Somebody tampered with the comment form (security violation)" -msgstr "מישהו התעסק עם טופס התגובה (הפרת אבטחה)" - -#: contrib/comments/views/comments.py:207 -#: contrib/comments/views/comments.py:292 -msgid "" -"The comment form had an invalid 'target' parameter -- the object ID was " -"invalid" -msgstr "טופס התגובה הכיל פרמטר target לא חוקי -- מזהה האובייקט אינו חוקי" - -#: contrib/comments/views/comments.py:257 -#: contrib/comments/views/comments.py:321 -msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "טופס התגובה לא הכיל '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/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -msgid "Preview comment" -msgstr "תצוגה מקדימה של התגובה" - -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "שמך:" - -#: contrib/admin/filterspecs.py:40 -#, python-format -msgid "" -"

By %s:

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

    ע\"י %s:

    \n" -"
      \n" - -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -msgid "All" -msgstr "הכל" - -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "כל תאריך" - -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "היום" - -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "בשבוע האחרון" - -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "החודש" - -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "השנה" - -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "כן" - -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "לא" - -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "לא ידוע" - -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "זמן פעולה" - -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "מזהה אובייקט" - -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "ייצוג אובייקט" - -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "דגל פעולה" - -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "הערה לשינוי" - -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "רישום יומן" - -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "רישומי יומן" - -#: contrib/admin/templatetags/admin_list.py:228 -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/views/main.py:272 contrib/admin/views/main.py:357 -#, python-format -msgid "You may add another %s below." -msgstr "ניתן להוסיף %s נוסף מתחת." - -#: contrib/admin/views/main.py:290 -#, python-format -msgid "Add %s" -msgstr "הוספת %s" - -#: contrib/admin/views/main.py:336 -#, python-format -msgid "Added %s." -msgstr "%s התווסף." - -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "ו" - -#: contrib/admin/views/main.py:338 -#, python-format -msgid "Changed %s." -msgstr "%s שונה." - -#: contrib/admin/views/main.py:340 -#, python-format -msgid "Deleted %s." -msgstr "%s נמחק." - -#: contrib/admin/views/main.py:343 -msgid "No fields changed." -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/views/main.py:354 -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה. ניתן לערוך אותו שוב מתחת." - -#: contrib/admin/views/main.py:392 -#, python-format -msgid "Change %s" -msgstr "שינוי %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 לשינוי" - -#: 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/views/doc.py:278 -msgid "Boolean (Either True or False)" -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/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "מספרים שלמים מופרדים בפסיקים" - -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "תאריך (ללא שעה)" - -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "תאריך (כולל שעה)" - -#: contrib/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "כתובת דוא\"ל" - -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "נתיב קובץ" - -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "מספר עשרוני" - -#: contrib/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "בוליאני (אמת, שקר או כלום)" - -#: contrib/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "יחס למודל אב" - -#: contrib/admin/views/doc.py:293 -msgid "Phone number" -msgstr "מספר טלפון" - -#: contrib/admin/views/doc.py:298 -msgid "Text" -msgstr "טקסט" - -#: contrib/admin/views/doc.py:299 -msgid "Time" -msgstr "זמן" - -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" - -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "מדינה בארה\"ב (שתי אותיות גדולות)" - -#: contrib/admin/views/doc.py:302 -msgid "XML text" -msgstr "טקסט XML" - -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Documentation" -msgstr "תיעוד" - -#: 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/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/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "היסטוריה" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "תאריך/שעה" - -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "משתמש" - -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "פעולה" - -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "l d.m.y H:i:s" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול להוספתו." - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "ניהול אתר Django" - -#: contrib/admin/templates/admin/base_site.html:7 -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 (500)" -msgstr "שגיאת שרת (500)" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "דף לא קיים" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "אנו מצטערים, לא ניתן למצוא את הדף המבוקש." - -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "מודלים זמינים ביישום %(name)s." - -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "הוספה" - -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "שינוי" - -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "אין לך הרשאות לעריכה" - -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "פעולות אחרונות" - -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "הפעולות שלי" - -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "לא נמצאו" - -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "הוספת %(name)s" - -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "האם שכחת את הסיסמה שלך?" - -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "שלום" - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "מחיקה" - -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, python-format -msgid "" -"Deleting the %(object_name)s '%(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/filter.html:2 -#, 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 "סידור" - -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "סדר:" - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "שמירה כחדש" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "שמירה והוספת אחר" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "שמירה והמשך עריכה" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "שמירה" - -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/registration/password_change_form.html:6 -#: contrib/admin/templates/registration/password_change_form.html:10 -msgid "Password change" -msgstr "שינוי סיסמה" - -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "הסיסמה שונתה בהצלחה" - -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "סיסמתך שונתה." - -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:6 -#: contrib/admin/templates/registration/password_reset_form.html:10 -#: contrib/admin/templates/registration/password_reset_done.html:4 -msgid "Password reset" -msgstr "איפוס סיסמה" - -#: contrib/admin/templates/registration/password_reset_form.html:12 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." -msgstr "" -"שכחת את סיסמתך ? נא להזין את כתובת הדוא\"ל מתחת, אנו נאפסאת הסיסמה ונשלח את " -"החדשה אליך." - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "כתובת דוא\"ל:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "אפס את סיסמתי" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "תודה על בילוי זמן איכות עם האתר." - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "התחבר/י שוב" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "הסיסמה אופסה בהצלחה" - -#: contrib/admin/templates/registration/password_reset_done.html:12 -msgid "" -"We've e-mailed a new password to the e-mail address you submitted. You " -"should be receiving it shortly." -msgstr "" -"שלחנו את הסיסמה החדשה לכתובת הדוא\"ל שהזנת. היא אמורה להתקבלתוך זמן קצר." - -#: contrib/admin/templates/registration/password_change_form.html:12 -msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" -"נא להזין את סיסמתך הישנה, למען האבטחה, ולאחר מכן את סיסמתךהחדשה פעמיים כדי " -"שנוכל לוודא שהקלדת אותה כראוי." - -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "סיסמה ישנה:" - -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "סיסמה חדשה:" - -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "אימות סיסמה:" - -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "שנה את סיסמתי" - -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "הודעה זו התקבלה כי ביקשת איפוס סיסמה" - -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "עבור חשבון המשתמש שלך ב %(site_name)s" - -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "סיסמתך החדשה: %(new_password)s" - -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "ניתן לשנות את הסיסמה בכל עת ע\"י פניה לדף זה:" - -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "שם המשתמש שלך, במקרה ששכחת:" - -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "תודה על השימוש באתר שלנו!" - -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "צוות %(site_name)s" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "ייסומניות" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "ייסומוניות תיעוד" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

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

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

      כדי להתקין ייסומניות, יש לגרור את הקישור לסרגל הסימניות\n" -"שלך, או קליק ימני והוספה לסימניות. כעת ניתן\n" -"לבחור את הייסומניה מכל עמוד באתר. יש לשים לב כי חלק מהייסומניות\n" -"ניתנות לצפיה רק ממחשב שמסווג\n" -"כ\"פנימי\" (יש לדבר עם מנהל המערכת שלך אם אינך בטוח/ה\n" -"שהמחשב מסווג ככזה).

      \n" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "תיעוד לדף זה" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 -msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." -msgstr "מקפיץ אותך מכל עמוד לתיעוד התצוגה שייצרה אותו." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "הצג מזהה אובייקט" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "מציג את סוג התוכן והמזהה הייחודי לעמודים המייצגים אובייקט בודד." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "עריכת אובייקט זה (בחלון הנוכחי)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "קופץ לעמוד הניהול לעמודים אשר מייצגים אובייקטים בודד." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "עריכת אובייקט זה (בחלון חדש)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "כנ\"ל, אך דף הניהול ייפתח בחלון חדש." - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "תאריך:" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "שעה:" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "הנוכחי." - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "שינוי:" - -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "הפניה מ" - -#: contrib/redirects/models.py:8 -msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "זה אמור להיות נתיב מלא, ללא שם המתחם. לדוגמא: '‎/events/search'." - -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "הפניה אל" - -#: contrib/redirects/models.py:10 -msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." -msgstr "יכול להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב'http://'." - -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "הפניה" - -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "הפניות" - -#: contrib/flatpages/models.py:8 -msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" -"לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף." - -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "כותרת" - -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "תוכן" - -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "אפשר תגובות" - -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "שם תבנית" - -#: contrib/flatpages/models.py:13 -msgid "" -"Example: 'flatpages/contact_page'. 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 "אם זה מסומך, רק משתמשים מחוברים יוכלו לצפות בדף." - -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "דף פשוט" - -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "דפים פשוטים" - -#: contrib/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "שם" - -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "שם קוד" - -#: contrib/auth/models.py:17 -msgid "permission" -msgstr "הרשאה" - -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -msgid "permissions" -msgstr "הרשאות" - -#: contrib/auth/models.py:29 -msgid "group" -msgstr "קבוצה" - -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -msgid "groups" -msgstr "קבוצות" - -#: contrib/auth/models.py:55 -msgid "username" -msgstr "שם משתמש" - -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "שם פרטי" - -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "שם משפחה" - -#: contrib/auth/models.py:58 -msgid "e-mail address" -msgstr "כתובת דוא\"ל" - -#: contrib/auth/models.py:59 -msgid "password" -msgstr "סיסמה" - -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "השתמש ב '[algo]$[salt]$[hexdigest]'" - -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "סטטוס איש צוות" - -#: contrib/auth/models.py:60 -msgid "Designates whether the user can log into this admin site." -msgstr "מציין האם המשתמש יכול להתחבר לאתר הניהול." - -#: contrib/auth/models.py:61 -msgid "active" -msgstr "פעיל" - -#: contrib/auth/models.py:62 -msgid "superuser status" -msgstr "סטטוס משתמש על" - -#: contrib/auth/models.py:63 -msgid "last login" -msgstr "כניסה אחרונה" - -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "תאריך הצטרפות" - -#: contrib/auth/models.py:66 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." -msgstr "" -"בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש/ת גם כל ההרשאות של כל קבוצה " -"המשוייכת אליו/ה." - -#: contrib/auth/models.py:67 -msgid "user permissions" -msgstr "הרשאות משתמש" - -#: contrib/auth/models.py:70 -msgid "user" -msgstr "משתמש" - -#: contrib/auth/models.py:71 -msgid "users" -msgstr "משתמשים" - -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "מידע אישי" - -#: contrib/auth/models.py:77 -msgid "Permissions" -msgstr "הרשאות" - -#: contrib/auth/models.py:78 -msgid "Important dates" -msgstr "תאריכים חשובים" - -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "קבוצות" - -#: contrib/auth/models.py:219 -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 +#: utils/translation.py:363 msgid "DATE_FORMAT" msgstr "d.m.Y" -#: utils/translation.py:361 +#: utils/translation.py:364 msgid "DATETIME_FORMAT" msgstr "d.m.y H:i:s" -#: utils/translation.py:362 +#: 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 "שני" @@ -1440,29 +269,312 @@ msgstr "נוב'" msgid "Dec." msgstr "דצמ'" -#: utils/timesince.py:12 -msgid "year" -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 נתון." -#: utils/timesince.py:13 -msgid "month" -msgstr "חודש" +#: db/models/fields/__init__.py:40 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "%(optname)s·עם·%(fieldname)s·זה קיימת כבר." -#: utils/timesince.py:14 -msgid "week" -msgstr "שבוע" +#: db/models/fields/__init__.py:337 +msgid "This value must be an integer." +msgstr "ערך זה חייב להיות מספר שלם." -#: utils/timesince.py:15 -msgid "day" -msgstr "יום" +#: db/models/fields/__init__.py:369 +msgid "This value must be either True or False." +msgstr "ערך זה חייב להיות אמת או שקר." -#: utils/timesince.py:16 -msgid "hour" -msgstr "שעה" +#: db/models/fields/__init__.py:385 +msgid "This field cannot be null." +msgstr "שדה זה אינו יכול להכיל null." -#: utils/timesince.py:17 -msgid "minute" -msgstr "דקה" +#: 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" @@ -1497,418 +609,1391 @@ 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:46 +#: conf/global_settings.py:47 msgid "Galician" msgstr "גאליצית - Galician" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Hungarian" msgstr "הונגרית (Hungarian)" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Hebrew" msgstr "עברית - Hebrew" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Icelandic" msgstr "איסלנדית - Icelandic" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Italian" msgstr "איטלקית - Italian" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Japanese" msgstr "יפנית - Japanese" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Dutch" msgstr "הולנדית - Dutch" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Norwegian" msgstr "נורווגית - Norwegian" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Brazilian" msgstr "ברזילאית - Brazilian" -#: conf/global_settings.py:55 +#: conf/global_settings.py:56 msgid "Romanian" msgstr "רומנית - Romanian" -#: conf/global_settings.py:56 +#: conf/global_settings.py:57 msgid "Russian" msgstr "רוסית - Russian" -#: conf/global_settings.py:57 +#: conf/global_settings.py:58 msgid "Slovak" msgstr "סלובקית - Slovak" -#: conf/global_settings.py:58 +#: conf/global_settings.py:59 msgid "Slovenian" msgstr "סלובנית - Slovenian" -#: conf/global_settings.py:59 +#: conf/global_settings.py:60 msgid "Serbian" msgstr "סרבית - Serbian" -#: conf/global_settings.py:60 +#: conf/global_settings.py:61 msgid "Swedish" msgstr "שוודית - Swedish" -#: conf/global_settings.py:61 +#: conf/global_settings.py:62 msgid "Ukrainian" msgstr "אוקראינית - Ukrainian" -#: conf/global_settings.py:62 +#: conf/global_settings.py:63 msgid "Simplified Chinese" msgstr "סינית פשוטה - Simplified·Chinese" -#: conf/global_settings.py:63 +#: conf/global_settings.py:64 msgid "Traditional Chinese" msgstr "סינית מסורתית - Traditional·Chinese" -#: core/validators.py:60 -msgid "This value must contain only letters, numbers and underscores." -msgstr "ערך זה חייב להכיל אותיות, ספרות וקווים תחתונים בלבד." +#: contrib/sessions/models.py:35 +msgid "session key" +msgstr "מפתח התחברות (session key)" -#: core/validators.py:64 +#: 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" +msgstr "מזהה אובייקט" + +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "כותרת" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "תגובה" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "דירוג #1" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "דירוג #2" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "דירוג #3" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "דירוג #4" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "דירוג #5" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "דירוג #6" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "דירוג #7" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "דירוג #8" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "האם דירוג חוקי" + +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "תאריך/שעת הגשה" + +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "ציבורי" + +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:292 +msgid "IP address" +msgstr "כתובת IP" + +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "האם הוסר" + +#: contrib/comments/models.py:86 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" +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." msgstr "" -"יש להזין HTML חוקי. שגיאות ספציפיות:\n" -"%s" +"יש לסמן תיבה זו עבור תגובה לא נאותה. הודעת \"תגובה זו נמחקה\" תוצג במקום." -#: core/validators.py:192 -#, python-format -msgid "Badly formed XML: %s" -msgstr "מבנה XML שגוי: %s" +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "תגובות" -#: core/validators.py:202 -#, python-format -msgid "Invalid URL: %s" -msgstr "URL שגוי: %s" +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "אובייקט תוכן" -#: 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 +#: contrib/comments/models.py:159 #, 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\".)" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" msgstr "" -"חלק מהטקסט בשורה·%(line)s·אסור בהקשר זה.·(השורה·מתחילה ב·\"%(start)s\".)" +"הוגש ע\"י %(user)s ב %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" -#: core/validators.py:471 +#: contrib/comments/models.py:168 +msgid "person's name" +msgstr "שם" + +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "כתובת IP" + +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "אושר ע\"י הצוות" + +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "הערה אנונימית" + +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "הערות אנונימיות" + +#: contrib/comments/models.py:233 +msgid "score" +msgstr "ציון" + +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "תאריך ציון" + +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "ניקוד קארמה" + +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "ניקודי קארמה" + +#: contrib/comments/models.py:242 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "%(score)d·דירוג ע\"י·%(user)s" + +#: contrib/comments/models.py:258 #, python-format msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" msgstr "" -"\"%(attr)s\"·בשורה·%(line)s·אינה תכונה חוקית.·(השורה מתחילה ב·\"%(start)s\".)" +"התגובה סומנה ע\"י %(user)s:\n" +"\n" +"%(text)s" -#: core/validators.py:476 +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "תאריך סימון" + +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "סימון ע\"י משתמש" + +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "סימונים ע\"י משתמש" + +#: contrib/comments/models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "סימון ע\"י %r" + +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "תאריך מחיקה" + +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "מחיקת מודרטור" + +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "מחיקות מודרטור" + +#: contrib/comments/models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "מחיקת מודרציה ע\"י %r" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "שמך:" + +#: contrib/comments/templates/comments/freeform.html:5 +#: contrib/comments/templates/comments/form.html:27 +msgid "Comment:" +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 "" +"This rating is required because you've entered at least one other rating." +msgstr "הדירוג נדרש מאחר והזנת לפחות דרוג אחד אחר." + +#: contrib/comments/views/comments.py:112 #, 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\".)" +"This comment was posted by a user who has posted fewer than %(count)s " +"comment:\n" +"\n" +"%(text)s" +msgid_plural "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" +"\n" +"%(text)s" +msgstr[0] "" +"התגובה נשלחה ע\"י משתמש אשר שלח פחות מ-%(count)s " +"תגובה:\n" +"\n" +"%(text)s" +msgstr[1] "" +"התגובה נשלחה ע\"י משתמש אשר שלח פחות מ-%(count)s " +"תגובות:\n" +"\n" +"%(text)s" -#: core/validators.py:480 +#: contrib/comments/views/comments.py:117 #, python-format msgid "" -"A tag on line %(line)s is missing one or more required attributes. (Line " -"starts with \"%(start)s\".)" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" msgstr "" -"A·tag·on·line·%(line)s·חסרה תכונה אחת או יותר נדרשות.·(השורה·מתחילה ב·\"%" -"(start)s\".)" +"ההודעה נשלחה ע\"י משתמש מפוקפק:\n" +"\n" +"%(text)s" -#: core/validators.py:485 +#: contrib/comments/views/comments.py:189 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "רק פעולות POST מותרות" + +#: contrib/comments/views/comments.py:193 +#: contrib/comments/views/comments.py:284 +msgid "One or more of the required fields wasn't submitted" +msgstr "אחד או יותר מהשדות הנדרשים אינו נשלח." + +#: contrib/comments/views/comments.py:197 +#: contrib/comments/views/comments.py:286 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "מישהו התעסק עם טופס התגובה (הפרת אבטחה)" + +#: contrib/comments/views/comments.py:207 +#: contrib/comments/views/comments.py:292 +msgid "" +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "טופס התגובה הכיל פרמטר target לא חוקי -- מזהה האובייקט אינו חוקי" + +#: contrib/comments/views/comments.py:257 +#: contrib/comments/views/comments.py:321 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "טופס התגובה לא הכיל 'preview' או 'post'" + +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "משתמשים אנונימיים אינם יכולים להצביע" + +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "מזהה תגובה שגוי" + +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "לא ניתן להצביע לעצמך" + +#: contrib/admin/filterspecs.py:40 #, python-format msgid "" -"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " -"starts with \"%(start)s\".)" +"

      By %s:

      \n" +"
        \n" msgstr "" -"לתכונה·\"%(attr)s\"·בשורה·%(line)s·יש ערך לא חוקי.·(השורה·מתחילה ב·\"%(start)" -"s\".)" +"

        ע\"י %s:

        \n" +"
          \n" -#: 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 נתון." +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 +msgid "All" +msgstr "הכל" -#: db/models/fields/__init__.py:40 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "%(optname)s·עם·%(fieldname)s·זה קיימת כבר." +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "כל תאריך" -#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 -#: forms/__init__.py:346 -msgid "This field is required." -msgstr "יש להזין תוכן בשדה זה." +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "היום" -#: db/models/fields/__init__.py:337 -msgid "This value must be an integer." -msgstr "ערך זה חייב להיות מספר שלם." +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "בשבוע האחרון" -#: db/models/fields/__init__.py:369 -msgid "This value must be either True or False." -msgstr "ערך זה חייב להיות אמת או שקר." +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "החודש" -#: db/models/fields/__init__.py:385 -msgid "This field cannot be null." -msgstr "שדה זה אינו יכול להכיל null." +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "השנה" -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "יש להזין שם קובץ חוקי." +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "כן" -#: db/models/fields/related.py:43 -#, python-format -msgid "Please enter a valid %s." -msgstr "יש להזין %s חוקי." +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "לא" -#: db/models/fields/related.py:579 -msgid "Separate multiple IDs with commas." -msgstr "יש להפריד מזהים מרובים בפסיקים." +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "לא ידוע" -#: db/models/fields/related.py:581 +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "זמן פעולה" + +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "מזהה אובייקט" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "ייצוג אובייקט" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "דגל פעולה" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "הערה לשינוי" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "רישום יומן" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "רישומי יומן" + +#: contrib/admin/templatetags/admin_list.py:230 +msgid "All dates" +msgstr "כל התאריכים" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "הנוכחי." + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "שינוי:" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "תאריך:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "שעה:" + +#: contrib/admin/templates/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/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/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +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/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "ייסומוניות תיעוד" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +"\n" +"

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

          \n" msgstr "" -"החזק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד." +"\n" +"

          כדי להתקין ייסומניות, יש לגרור את הקישור לסרגל הסימניות\n" +"שלך, או קליק ימני והוספה לסימניות. כעת ניתן\n" +"לבחור את הייסומניה מכל עמוד באתר. יש לשים לב כי חלק מהייסומניות\n" +"ניתנות לצפיה רק ממחשב שמסווג\n" +"כ\"פנימי\" (יש לדבר עם מנהל המערכת שלך אם אינך בטוח/ה\n" +"שהמחשב מסווג ככזה).

          \n" -#: db/models/fields/related.py:625 +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "תיעוד לדף זה" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "מקפיץ אותך מכל עמוד לתיעוד התצוגה שייצרה אותו." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "הצג מזהה אובייקט" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "מציג את סוג התוכן והמזהה הייחודי לעמודים המייצגים אובייקט בודד." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "עריכת אובייקט זה (בחלון הנוכחי)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "קופץ לעמוד הניהול לעמודים אשר מייצגים אובייקטים בודד." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "עריכת אובייקט זה (בחלון חדש)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "כנ\"ל, אך דף הניהול ייפתח בחלון חדש." + +#: contrib/admin/templates/admin/login.html:22 +msgid "Have you forgotten your password?" +msgstr "האם שכחת את הסיסמה שלך?" + +#: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:23 +msgid "Log in" +msgstr "כניסה" + +#: contrib/admin/templates/admin/submit_line.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:9 +msgid "Delete" +msgstr "מחיקה" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "שמירה כחדש" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "שמירה והוספת אחר" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "שמירה והמשך עריכה" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "שמירה" + +#: contrib/admin/templates/admin/base.html:24 +msgid "Welcome," +msgstr "שלום" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "סינון" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "בצע" + +#: contrib/admin/templates/admin/search_form.html:10 #, python-format -msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." -"Please enter valid %(self)s IDs. The values %(value)r are invalid." -msgstr "נא להזין זיהוי %(self)s חוקי. הערך %(value)r אינו חוקי." -"נא להזין זיהויי %(self)s חוקיים. הערכים %(value)r אינם חוקיים." +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "תוצאה אחת" +msgstr[1] "%(counter)s תוצאות" -#: forms/__init__.py:380 +#: contrib/admin/templates/admin/search_form.html:10 #, python-format -msgid "Ensure your text is less than %s character." -msgstr "נא לוודא שהטקסט שלך מכיל פחות מ %s תו." +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s סה\"כ" -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "מעברי שורה אסורים כאן." +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:20 +msgid "History" +msgstr "היסטוריה" -#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "תאריך/שעה" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "משתמש" + +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "פעולה" + +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "l d.m.y H:i:s" + +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול הזה להוספתו." + +#: contrib/admin/templates/admin/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" +msgstr "ניהול אתר Django" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "ניהול Django" + +#: 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 +msgid "Page not found" +msgstr "דף לא קיים" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "אנו מצטערים, לא ניתן למצוא את הדף המבוקש." + +#: contrib/admin/templates/admin/filter.html:2 #, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "יש לבחור אפשרות חוקית; '%(data)s' אינו בין %(choices)s." +msgid " By %(title)s " +msgstr " לפי %(title)s " -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "הקובץ שנשלח ריק." +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(object)s' would result in deleting related " +"objects, but your account doesn't have permission to delete the following " +"types of objects:" +msgstr "" +"מחיקת %(object_name)s '%(object)s' תמחק אובייקטים קשורים, אך לחשבון שלך אין " +"הרשאות למחיקת אובייקטים מהסוג הבא:" -#: forms/__init__.py:699 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "חש להזין מספר שלם בין ‎-32,768 ל- 32,767." +#: 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\"? כלהפריטים הקשורים הבאים " +"יימחקו:" -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "יש להזין מספר חיובי." +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "כן, אני בטוח/ה" -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "יש להזין מספר שלם בין 0 ל- 32,767." +#: 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 "" +"משהו שגוי בהתקנת בסיס הנתונים שלך. נא לוודא שנוצרו טבלאות בסיס הנתונים " +"המתאימות, ובסיס הנתונים ניתן לקריאה על ידי המשתמש המתאים." -#: template/defaultfilters.py:379 -msgid "yes,no,maybe" -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:34 +msgid "Change" +msgstr "שינוי" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "אין לך הרשאות לעריכה" + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "פעולות אחרונות" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "הפעולות שלי" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "לא נמצאו" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "שגיאת שרת" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "שגיאת שרת (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "שגיאת שרת (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך." + +#: contrib/admin/templates/admin/change_list.html:11 +#, python-format +msgid "Add %(name)s" +msgstr "הוספת %(name)s" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "הודעה זו התקבלה כי ביקשת איפוס סיסמה" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "עבור חשבון המשתמש שלך ב %(site_name)s" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "סיסמתך החדשה: %(new_password)s" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "ניתן לשנות את הסיסמה בכל עת ע\"י פניה לדף זה:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "שם המשתמש שלך, במקרה ששכחת:" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "תודה על השימוש באתר שלנו!" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "צוות %(site_name)s" + +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_form.html:6 +#: contrib/admin/templates/registration/password_change_form.html:10 +#: contrib/admin/templates/registration/password_change_done.html:4 +msgid "Password change" +msgstr "שינוי סיסמה" + +#: contrib/admin/templates/registration/password_change_form.html:12 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"נא להזין את סיסמתך הישנה, למען האבטחה, ולאחר מכן את סיסמתךהחדשה פעמיים כדי " +"שנוכל לוודא שהקלדת אותה כראוי." + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "סיסמה ישנה:" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "סיסמה חדשה:" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "אימות סיסמה:" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "שנה את סיסמתי" + +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "הסיסמה שונתה בהצלחה" + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "סיסמתך שונתה." + +#: contrib/admin/templates/registration/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 +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 " +"your password and e-mail the new one to you." +msgstr "" +"שכחת את סיסמתך ? נא להזין את כתובת הדוא\"ל מתחת, אנו נאפסאת הסיסמה ונשלח את " +"החדשה אליך." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "כתובת דוא\"ל:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "אפס את סיסמתי" + +#: contrib/admin/views/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/views/doc.py:280 +msgid "Boolean (Either True or False)" +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/views/doc.py:282 +msgid "Comma-separated integers" +msgstr "מספרים שלמים מופרדים בפסיקים" + +#: contrib/admin/views/doc.py:283 +msgid "Date (without time)" +msgstr "תאריך (ללא שעה)" + +#: contrib/admin/views/doc.py:284 +msgid "Date (with time)" +msgstr "תאריך (כולל שעה)" + +#: contrib/admin/views/doc.py:285 +msgid "E-mail address" +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/views/doc.py:288 +msgid "Decimal number" +msgstr "מספר עשרוני" + +#: contrib/admin/views/doc.py:294 +msgid "Boolean (Either True, False or None)" +msgstr "בוליאני (אמת, שקר או כלום)" + +#: 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 "The %(name)s \"%(obj)s\" was added successfully." +msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה." + +#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 +msgid "You may edit it again below." +msgstr "ניתן לערוך שוב מתחת" + +#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 +#, python-format +msgid "You may add another %s below." +msgstr "ניתן להוסיף %s נוסף מתחת." + +#: contrib/admin/views/main.py:290 +#, python-format +msgid "Add %s" +msgstr "הוספת %s" + +#: contrib/admin/views/main.py:336 +#, python-format +msgid "Added %s." +msgstr "%s התווסף." + +#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 +#: contrib/admin/views/main.py:340 +msgid "and" +msgstr "ו" + +#: contrib/admin/views/main.py:338 +#, python-format +msgid "Changed %s." +msgstr "%s שונה." + +#: contrib/admin/views/main.py:340 +#, python-format +msgid "Deleted %s." +msgstr "%s נמחק." + +#: contrib/admin/views/main.py:343 +msgid "No fields changed." +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/views/main.py:354 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה. ניתן לערוך אותו שוב מתחת." + +#: contrib/admin/views/main.py:392 +#, python-format +msgid "Change %s" +msgstr "שינוי %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:567 +#, python-format +msgid "Select %s" +msgstr "בחירת %s" + +#: contrib/admin/views/main.py:567 +#, python-format +msgid "Select %s to change" +msgstr "בחירת %s לשינוי" + +#: contrib/admin/views/main.py:743 +msgid "Database error" +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/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/redirects/models.py:7 +msgid "redirect from" +msgstr "הפניה מ" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "זה אמור להיות נתיב מלא, ללא שם המתחם. לדוגמא: '‎/events/search'." + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "הפניה אל" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "יכול להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב'http://'." + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "הפניה" + +#: contrib/redirects/models.py:14 +msgid "redirects" +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/auth/forms.py:45 +msgid "This account is inactive." +msgstr "חשבון זה אינו פעיל." + +#: contrib/auth/views.py:39 +msgid "Logged out" +msgstr "יצאת מהמערכת" + +#: contrib/auth/models.py:13 contrib/auth/models.py:26 +msgid "name" +msgstr "שם" + +#: contrib/auth/models.py:15 +msgid "codename" +msgstr "שם קוד" + +#: contrib/auth/models.py:17 +msgid "permission" +msgstr "הרשאה" + +#: contrib/auth/models.py:18 contrib/auth/models.py:27 +msgid "permissions" +msgstr "הרשאות" + +#: contrib/auth/models.py:29 +msgid "group" +msgstr "קבוצה" + +#: contrib/auth/models.py:30 contrib/auth/models.py:65 +msgid "groups" +msgstr "קבוצות" + +#: contrib/auth/models.py:55 +msgid "username" +msgstr "שם משתמש" + +#: contrib/auth/models.py:56 +msgid "first name" +msgstr "שם פרטי" + +#: contrib/auth/models.py:57 +msgid "last name" +msgstr "שם משפחה" + +#: contrib/auth/models.py:58 +msgid "e-mail address" +msgstr "כתובת דוא\"ל" + +#: contrib/auth/models.py:59 +msgid "password" +msgstr "סיסמה" + +#: contrib/auth/models.py:59 +msgid "Use '[algo]$[salt]$[hexdigest]'" +msgstr "השתמש ב '[algo]$[salt]$[hexdigest]'" + +#: contrib/auth/models.py:60 +msgid "staff status" +msgstr "סטטוס איש צוות" + +#: contrib/auth/models.py:60 +msgid "Designates whether the user can log into this admin site." +msgstr "מציין האם המשתמש יכול להתחבר לאתר הניהול." + +#: contrib/auth/models.py:61 +msgid "active" +msgstr "פעיל" + +#: contrib/auth/models.py:62 +msgid "superuser status" +msgstr "סטטוס משתמש על" + +#: contrib/auth/models.py:63 +msgid "last login" +msgstr "כניסה אחרונה" + +#: contrib/auth/models.py:64 +msgid "date joined" +msgstr "תאריך הצטרפות" + +#: contrib/auth/models.py:66 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש גם כל ההרשאות של כל קבוצה " +"המשוייכת אליו." + +#: contrib/auth/models.py:67 +msgid "user permissions" +msgstr "הרשאות משתמש" + +#: contrib/auth/models.py:70 +msgid "user" +msgstr "משתמש" + +#: contrib/auth/models.py:71 +msgid "users" +msgstr "משתמשים" + +#: contrib/auth/models.py:76 +msgid "Personal info" +msgstr "מידע אישי" + +#: contrib/auth/models.py:77 +msgid "Permissions" +msgstr "הרשאות" + +#: contrib/auth/models.py:78 +msgid "Important dates" +msgstr "תאריכים חשובים" + +#: contrib/auth/models.py:79 +msgid "Groups" +msgstr "קבוצות" + +#: contrib/auth/models.py:219 +msgid "message" +msgstr "הודעה" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף." + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "כותרת" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "תוכן" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "אפשר תגובות" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "שם תבנית" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page'. 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 "אם זה מסומך, רק משתמשים מחוברים יוכלו לצפות בדף." + +#: contrib/flatpages/models.py:18 +msgid "flat page" +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 4441ea84e6729e11f0b5f17003bfcf1827558279..25395987703dfde0969791a4a650ee843bd8dc25 100644 GIT binary patch delta 56 zcmcb~bBkv~2&1Yi0|Uc0Rt5$qApHkOa{y_3HU, 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 3e748781acb6a8893d4b63ac5f3559f2e13c4863..f7fad563395e40b8f9b41db977d6e116027a2381 100644 GIT binary patch literal 23926 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 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 \n" +"Last-Translator: Piotr Maliński \n" "Language-Team: Polish \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 (500)" -msgstr "" +msgstr "Błąd Serwera (500)" #: contrib/admin/templates/admin/500.html:10 msgid "" "There's been an error. It's been reported to the site administrators via e-" "mail and should be fixed shortly. Thanks for your patience." msgstr "" +"Wystąpił niespodziewany błąd. Raport został wysłany emailem " +"administratorowi strony." #: contrib/admin/templates/admin/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 forgotten your password?" msgstr "" -"Czy aby na pewno zapomniałeś/łaś hasła?" +"Czy zapomniałeś/ł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 6fb7a4929c7b87a386d106d51579f22569d969e8..562996eee5c9f601274908cf6a0a29569c6d6dd3 100644 GIT binary patch delta 8690 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 iYgSiw2{7-{o~qpe&YJAy>jDF2_%5$>^5?W$\n" "Language-Team: Slovak \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 forgotten your password?" -msgstr "Zabudli ste vaše heslo?" +msgstr "Zabudol si svoje heslo?" + +#: 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\").

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

          Na inštaláciu záložiek, potiahnite linku do vášho " +"

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

          \n" +"že tvoj počítač je označený ako \"internal\").

          \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 -msgid "Hungarian" -msgstr "" - #: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "" +msgid "Hungarian" +msgstr "Maďarský" #: conf/global_settings.py:49 +msgid "Hebrew" +msgstr "Hebrejský" + +#: 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 - + {% block title %}{% endblock %} +{% if LANGUAGE_BIDI %}{% endif %} {% block extrastyle %}{% endblock %} {% block extrahead %}{% endblock %} @@ -20,7 +21,7 @@ {% block branding %}{% endblock %} {% if not user.is_anonymous %}{% if user.is_staff %} -
          {% trans 'Welcome,' %} {% if user.first_name %}{{ user.first_name }}{% else %}{{ user.username }}{% endif %}. {% block userlinks %}{% trans 'Documentation' %} / {% trans 'Change password' %} / {% trans 'Log out' %}{% endblock %}
          +
          {% trans 'Welcome,' %} {% if user.first_name %}{{ user.first_name|escape }}{% else %}{{ user.username }}{% endif %}. {% block userlinks %}{% trans 'Documentation' %} / {% trans 'Change password' %} / {% trans 'Log out' %}{% endblock %}
          {% endif %}{% endif %} {% block nav-global %}{% endblock %} 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 %}
          -

          Filter

          +

          {% trans 'Filter' %}

          {% for spec in cl.filter_specs %} {% filter cl spec %} {% endfor %}
          {% 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 %}

          {% 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 %}  Show all{% endif %} +{% if show_all_url %}  {% trans 'Show all' %}{% endif %}

          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 @@ {% if show_result_count %} - {{ cl.result_count }} result{{ cl.result_count|pluralize }} ({{ cl.full_result_count }} total) + {% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %} ({% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}) {% endif %} {% for pair in cl.params.items %} {% ifnotequal pair.0 search_var %}{% endifnotequal %} diff --git a/django/contrib/admin/templates/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:: + + ' % (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 = ['
            '] + output = ['' % (self.ul_class and ' class="%s"' % self.ul_class or '')] str_data_list = map(str, data) # normalize to strings for value, choice in self.choices: checked_html = '' @@ -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 "" @@ -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'(?>> 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': '<unknown>', + '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:: +If you don't mind clearing data, your project's ``manage.py`` utility has an +option to reset the SQL for a particular application:: - django-admin.py sqlreset appname | psql dbname + manage.py reset appname -That "psql" assumes you're using PostgreSQL. If you're using MySQL, use the -appropriate command-line utility, ``mysql``. - -``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 %} -For simplicity, ``if`` tags do not allow ``and`` clauses; use nested ``if`` -tags instead:: + {% if athlete_list and not coach_list %} + There are some athletes and absolutely no coaches. + {% endif %} + +``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 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 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") + +>>> lion.tags.create(tag="hairy") + +>>> bacon.tags.create(tag="fatty") + +>>> bacon.tags.create(tag="salty") + + +>>> lion.tags.all() +[, ] +>>> bacon.tags.all() +[, ] + +# You can easily access the content object like a foreign key +>>> t = TaggedItem.objects.get(tag="salty") +>>> t.content_object + + +# 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) +[, ] + +# You can set a generic foreign key in the way you'd expect +>>> tag1.content_object = platypus +>>> tag1.save() +>>> platypus.tags.all() +[] +>>> TaggedItem.objects.filter(content_type__pk=ctype.id, object_id=quartz.id) +[] +""" \ 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 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")