1
0
mirror of https://github.com/django/django.git synced 2025-07-04 01:39:20 +00:00

multi-auth: Merged to [2997]

git-svn-id: http://code.djangoproject.com/svn/django/branches/multi-auth@2998 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Joseph Kocherhans 2006-05-28 21:27:07 +00:00
parent 681763a29c
commit aeb807989f
60 changed files with 4749 additions and 2601 deletions

View File

@ -65,6 +65,7 @@ answer newbie questions, and generally made Django that much better:
Robert Rock Howard <http://djangomojo.com/>
Jason Huggins <http://www.jrandolph.com/blog/>
Michael Josephson <http://www.sdjournal.com/>
jpellerin@gmail.com
junzhang.jn@gmail.com
Russell Keith-Magee <freakboy@iinet.net.au>
Garth Kidd <http://www.deadlybloodyserious.com/>
@ -93,6 +94,7 @@ answer newbie questions, and generally made Django that much better:
oggie rob <oz.robharvey@gmail.com>
pgross@thoughtworks.com
phaedo <http://phaedo.cx/>
phil@produxion.net
Gustavo Picon
Luke Plant <http://lukeplant.me.uk/>
plisk

View File

@ -42,6 +42,7 @@ LANGUAGES = (
('el', _('Greek')),
('en', _('English')),
('es', _('Spanish')),
('es_AR', _('Argentinean Spanish')),
('fr', _('French')),
('gl', _('Galician')),
('hu', _('Hungarian')),
@ -218,12 +219,12 @@ TRANSACTIONS_MANAGED = False
# this middleware classes will be applied in the order given, and in the
# response phase the middleware will be applied in reverse order.
MIDDLEWARE_CLASSES = (
"django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
# "django.middleware.http.ConditionalGetMiddleware",
# "django.middleware.gzip.GZipMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.doc.XViewMiddleware",
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'django.middleware.http.ConditionalGetMiddleware',
# 'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.doc.XViewMiddleware',
)
############

File diff suppressed because it is too large Load Diff

View File

@ -18,81 +18,81 @@ msgstr ""
#: contrib/comments/models.py:67 contrib/comments/models.py:166
msgid "object ID"
msgstr "ID αντικειμένου"
msgstr "ID αντικειμένου"
#: contrib/comments/models.py:68
msgid "headline"
msgstr "Επικεφαλίδα"
msgstr "Επικεφαλίδα"
#: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167
msgid "comment"
msgstr "σχόλιο"
msgstr "σχόλιο"
#: contrib/comments/models.py:70
msgid "rating #1"
msgstr "κατάταξη #1"
msgstr "κατάταξη #1"
#: contrib/comments/models.py:71
msgid "rating #2"
msgstr "βαθμολογία #2"
msgstr "βαθμολογία #2"
#: contrib/comments/models.py:72
msgid "rating #3"
msgstr "βαθμολογία #3"
msgstr "βαθμολογία #3"
#: contrib/comments/models.py:73
msgid "rating #4"
msgstr "βαθμολογία #4"
msgstr "βαθμολογία #4"
#: contrib/comments/models.py:74
msgid "rating #5"
msgstr "βαθμολογία #5"
msgstr "βαθμολογία #5"
#: contrib/comments/models.py:75
msgid "rating #6"
msgstr "βαθμολογία #6"
msgstr "βαθμολογία #6"
#: contrib/comments/models.py:76
msgid "rating #7"
msgstr "βαθμολογία #7"
msgstr "βαθμολογία #7"
#: contrib/comments/models.py:77
msgid "rating #8"
msgstr "βαθμολογία #8"
msgstr "βαθμολογία #8"
#: contrib/comments/models.py:82
msgid "is valid rating"
msgstr "είναι έγκυρη βαθμολογία"
msgstr "είναι έγκυρη βαθμολογία"
#: contrib/comments/models.py:83 contrib/comments/models.py:169
msgid "date/time submitted"
msgstr "ημερομηνία/ώρα υποβολής"
msgstr "ημερομηνία/ώρα υποβολής"
#: contrib/comments/models.py:84 contrib/comments/models.py:170
msgid "is public"
msgstr "είναι δημόσιο"
msgstr "είναι δημόσιο"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
msgid "IP address"
msgstr "IP διεύθυνση"
msgstr "IP διεύθυνση"
#: contrib/comments/models.py:86
msgid "is removed"
msgstr "είναι διεγραμμένο"
msgstr "είναι διεγραμμένο"
#: contrib/comments/models.py:86
msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead."
msgstr ""
"Σημειώστε αυτό το κουτί εάν το σχόλιο είναι ανάρμοστο. Ένα Αυτό το σχόλιο "
"εσβήσθει\" μήνυμα θα εμφανιστεί αντί αυτού."
"Σημειώστε αυτό το κουτί εάν το σχόλιο είναι ανάρμοστο. Ένα Αυτό το σχόλιο "
"εσβήσθει\" μήνυμα θα εμφανιστεί αντί αυτού."
#: contrib/comments/models.py:91
#, fuzzy
msgid "comments"
msgstr "σχόλιο"
msgstr "σχόλιο"
#: contrib/comments/models.py:131 contrib/comments/models.py:207
msgid "Content object"
@ -110,38 +110,38 @@ msgstr ""
#: contrib/comments/models.py:168
msgid "person's name"
msgstr "όνομα ατόμου"
msgstr "όνομα ατόμου"
#: contrib/comments/models.py:171
msgid "ip address"
msgstr "ip διεύθυνση"
msgstr "ip διεύθυνση"
#: contrib/comments/models.py:173
msgid "approved by staff"
msgstr "εγκεκριμένο από το προσωπικό"
msgstr "εγκεκριμένο από το προσωπικό"
#: contrib/comments/models.py:176
#, fuzzy
msgid "free comment"
msgstr "Ελεύθερο σχόλιο"
msgstr "Ελεύθερο σχόλιο"
#: contrib/comments/models.py:177
#, fuzzy
msgid "free comments"
msgstr "Ελεύθερα σχόλια"
msgstr "Ελεύθερα σχόλια"
#: contrib/comments/models.py:233
msgid "score"
msgstr "βαθμολογία"
msgstr "βαθμολογία"
#: contrib/comments/models.py:234
msgid "score date"
msgstr "ημερομηνία βαθμολογίας"
msgstr "ημερομηνία βαθμολογίας"
#: contrib/comments/models.py:237
#, fuzzy
msgid "karma score"
msgstr "βαθμολογία"
msgstr "βαθμολογία"
#: contrib/comments/models.py:238
msgid "karma scores"
@ -159,9 +159,9 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
"Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n"
"Αυτο το σχόλιο σημειώθει απο %(χρήστη)ες\n"
"\n"
"%(κείμενο)α"
"%(κείμενο)α"
#: contrib/comments/models.py:265
msgid "flag date"
@ -182,7 +182,7 @@ msgstr ""
#: contrib/comments/models.py:278
msgid "deletion date"
msgstr "ημερομηνία διαγραφής"
msgstr "ημερομηνία διαγραφής"
#: contrib/comments/models.py:280
msgid "moderator deletion"
@ -199,7 +199,7 @@ msgstr ""
#: contrib/comments/views/karma.py:19
msgid "Anonymous users cannot vote"
msgstr "Ανώνυμοι χρήστες δέν μπορούν να ψηφήσουν"
msgstr "Ανώνυμοι χρήστες δέν μπορούν να ψηφήσουν"
#: contrib/comments/views/karma.py:23
msgid "Invalid comment ID"
@ -212,7 +212,7 @@ msgstr ""
#: contrib/comments/views/comments.py:28
msgid ""
"This rating is required because you've entered at least one other rating."
msgstr "Αυτή η βαθμολογία απαιτείται επειδή τουλάχιστον ακόμα μια βαθμολογία"
msgstr "Αυτή η βαθμολογία απαιτείται επειδή τουλάχιστον ακόμα μια βαθμολογία"
#: contrib/comments/views/comments.py:112
#, python-format
@ -245,7 +245,7 @@ msgstr ""
#: contrib/comments/views/comments.py:193
#: contrib/comments/views/comments.py:284
msgid "One or more of the required fields wasn't submitted"
msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υποβλίθει"
msgstr "Ένα ή περισσότερα από τα απαιτούμενα πεδία δεν υποβλίθει"
#: contrib/comments/views/comments.py:197
#: contrib/comments/views/comments.py:286
@ -273,11 +273,11 @@ msgstr ""
#: contrib/comments/templates/comments/form.html:6
#: contrib/admin/templates/admin/login.html:20
msgid "Password:"
msgstr "Κωδικός"
msgstr "Κωδικός"
#: contrib/comments/templates/comments/form.html:6
msgid "Forgotten your password?"
msgstr "Ξεχάσατε τον κωδικό σας;"
msgstr "Ξεχάσατε τον κωδικό σας;"
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/object_history.html:3
@ -321,7 +321,7 @@ msgstr ""
#: contrib/comments/templates/comments/form.html:27
#: contrib/comments/templates/comments/freeform.html:5
msgid "Comment:"
msgstr "Σχόλιο:"
msgstr "Σχόλιο:"
#: contrib/comments/templates/comments/form.html:32
#: contrib/comments/templates/comments/freeform.html:9
@ -350,7 +350,7 @@ msgstr ""
#: contrib/admin/filterspecs.py:110
msgid "Today"
msgstr "Σήμερα"
msgstr "Σήμερα"
#: contrib/admin/filterspecs.py:113
msgid "Past 7 days"
@ -358,23 +358,23 @@ msgstr ""
#: contrib/admin/filterspecs.py:115
msgid "This month"
msgstr "Αυτό το μήνα"
msgstr "Αυτό το μήνα"
#: contrib/admin/filterspecs.py:117
msgid "This year"
msgstr "Αυτό το χρόνο"
msgstr "Αυτό το χρόνο"
#: contrib/admin/filterspecs.py:143
msgid "Yes"
msgstr "Ναί"
msgstr "Ναί"
#: contrib/admin/filterspecs.py:143
msgid "No"
msgstr "Όχι"
msgstr "Όχι"
#: contrib/admin/filterspecs.py:150
msgid "Unknown"
msgstr "’γνωστο"
msgstr "’γνωστο"
#: contrib/admin/models.py:16
msgid "action time"
@ -394,7 +394,7 @@ msgstr ""
#: contrib/admin/models.py:22
msgid "change message"
msgstr "αλλάξτε το μήνυμα"
msgstr "αλλάξτε το μήνυμα"
#: contrib/admin/models.py:25
msgid "log entry"
@ -406,7 +406,7 @@ msgstr ""
#: contrib/admin/templatetags/admin_list.py:228
msgid "All dates"
msgstr "Όλες οι ημερομηνίες"
msgstr "Όλες οι ημερομηνίες"
#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
#: contrib/auth/forms.py:41
@ -414,45 +414,45 @@ msgid ""
"Please enter a correct username and password. Note that both fields are case-"
"sensitive."
msgstr ""
"Παρακαλώ εισάγετε ένα σωστό όνομα χρήστη και κωδικό. Να σημειωθεί ότι και τα "
"δύο πεδία είναι case-sensitive."
"Παρακαλώ εισάγετε ένα σωστό όνομα χρήστη και κωδικό. Να σημειωθεί ότι και τα "
"δύο πεδία είναι case-sensitive."
#: contrib/admin/views/decorators.py:23
#: contrib/admin/templates/admin/login.html:25
msgid "Log in"
msgstr "Συνδεθείτε"
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 ""
"Παρακαλώ ξανασυνδεθείτε, γιατί η session σας έληξε. Μην ανησυχείτε: Η "
"submission σας έχει αποθηκευτεί."
"Παρακαλώ ξανασυνδεθείτε, γιατί η session σας έληξε. Μην ανησυχείτε: Η "
"submission σας έχει αποθηκευτεί."
#: contrib/admin/views/decorators.py:68
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
msgstr ""
"Απ'οτι φαίνεται, ο φυλλομετρητής σας δεν έχει ρυθμιστεί να δέχεται cookies. "
"Παρακαλώ ενεργοποιείστε τα cookies, ξαναφορτώστε αυτή την σελίδα, και "
"δοκιμάστε ξανά."
"Απ'οτι φαίνεται, ο φυλλομετρητής σας δεν έχει ρυθμιστεί να δέχεται cookies. "
"Παρακαλώ ενεργοποιείστε τα cookies, ξαναφορτώστε αυτή την σελίδα, και "
"δοκιμάστε ξανά."
#: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character."
msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
msgstr "Τα ονόματα των Χρηστών δεν μπορόυν να περιέχουν τον χαρακτήρα '@'."
#: contrib/admin/views/decorators.py:84
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr ""
"Η ηλεκτρονική σας διεύθυνση δεν είναι το ονόμα χρήστη σας. Δοκιμάστε '%s' "
"έναντι αυτού."
"Η ηλεκτρονική σας διεύθυνση δεν είναι το ονόμα χρήστη σας. Δοκιμάστε '%s' "
"έναντι αυτού."
#: contrib/admin/views/main.py:226
msgid "Site administration"
msgstr "Διαχείριση του Διαδυκτιακού χώρου"
msgstr "Διαχείριση του Διαδυκτιακού χώρου"
#: contrib/admin/views/main.py:260
#, python-format
@ -466,7 +466,7 @@ msgstr ""
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format
msgid "You may add another %s below."
msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s απο κάτω."
msgstr "Μπορείτε να προσθέσετε ακόμα ένα %s απο κάτω."
#: contrib/admin/views/main.py:290
#, python-format
@ -481,7 +481,7 @@ msgstr ""
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
#: contrib/admin/views/main.py:340
msgid "and"
msgstr "και"
msgstr "και"
#: contrib/admin/views/main.py:338
#, python-format
@ -530,7 +530,7 @@ msgstr ""
#: contrib/admin/views/main.py:511
msgid "Are you sure?"
msgstr "Είστε σίγουρος;"
msgstr "Είστε σίγουρος;"
#: contrib/admin/views/main.py:533
#, python-format
@ -551,11 +551,11 @@ msgstr ""
#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
msgid "Integer"
msgstr "Ακέραιος"
msgstr "Ακέραιος"
#: contrib/admin/views/doc.py:278
msgid "Boolean (Either True or False)"
msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
#, python-format
@ -568,15 +568,15 @@ msgstr ""
#: contrib/admin/views/doc.py:281
msgid "Date (without time)"
msgstr "Ημερομηνία (χωρίς την ώρα)"
msgstr "Ημερομηνία (χωρίς την ώρα)"
#: contrib/admin/views/doc.py:282
msgid "Date (with time)"
msgstr "Ημερομηνία (με την ώρα)"
msgstr "Ημερομηνία (με την ώρα)"
#: contrib/admin/views/doc.py:283
msgid "E-mail address"
msgstr "Ηλεκτρονική διεύθυνση"
msgstr "Ηλεκτρονική διεύθυνση"
#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
msgid "File path"
@ -584,7 +584,7 @@ msgstr ""
#: contrib/admin/views/doc.py:285
msgid "Decimal number"
msgstr "Δεκαδικός αριθμός"
msgstr "Δεκαδικός αριθμός"
#: contrib/admin/views/doc.py:291
msgid "Boolean (Either True, False or None)"
@ -596,15 +596,15 @@ msgstr ""
#: contrib/admin/views/doc.py:293
msgid "Phone number"
msgstr "Αριθμός τηλεφώνου"
msgstr "Αριθμός τηλεφώνου"
#: contrib/admin/views/doc.py:298
msgid "Text"
msgstr "Κείμενο"
msgstr "Κείμενο"
#: contrib/admin/views/doc.py:299
msgid "Time"
msgstr "Ώρα"
msgstr "Ώρα"
#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
msgid "URL"
@ -647,7 +647,7 @@ msgstr ""
#: contrib/admin/templates/admin_doc/index.html:4
#: contrib/admin/templates/admin_doc/model_index.html:5
msgid "Change password"
msgstr "Αλλαγή κωδικού"
msgstr "Αλλαγή κωδικού"
#: contrib/admin/templates/admin/object_history.html:5
#: contrib/admin/templates/admin/500.html:4
@ -675,7 +675,7 @@ msgstr ""
#: contrib/admin/templates/admin/object_history.html:19
msgid "User"
msgstr "Χρήστης"
msgstr "Χρήστης"
#: contrib/admin/templates/admin/object_history.html:20
msgid "Action"
@ -693,7 +693,7 @@ msgstr ""
#: contrib/admin/templates/admin/base_site.html:4
msgid "Django site admin"
msgstr "Διαχειριστής ιστοσελίδας Django"
msgstr "Διαχειριστής ιστοσελίδας Django"
#: contrib/admin/templates/admin/base_site.html:7
msgid "Django administration"
@ -750,7 +750,7 @@ msgstr ""
#: contrib/admin/templates/admin/index.html:53
msgid "My Actions"
msgstr "Οι πράξεις μου"
msgstr "Οι πράξεις μου"
#: contrib/admin/templates/admin/index.html:57
msgid "None available"
@ -767,7 +767,7 @@ msgstr ""
#: contrib/admin/templates/admin/base.html:23
msgid "Welcome,"
msgstr "Καλωσήρθατε,"
msgstr "Καλωσήρθατε,"
#: contrib/admin/templates/admin/delete_confirmation.html:9
#: contrib/admin/templates/admin/submit_line.html:3
@ -791,7 +791,7 @@ msgstr ""
#: contrib/admin/templates/admin/delete_confirmation.html:26
msgid "Yes, I'm sure"
msgstr "Ναι, είμαι σίγουρος"
msgstr "Ναι, είμαι σίγουρος"
#: contrib/admin/templates/admin/filter.html:2
#, python-format
@ -834,7 +834,7 @@ msgstr ""
#: contrib/admin/templates/admin/submit_line.html:7
msgid "Save"
msgstr "Αποθήκευση"
msgstr "Αποθήκευση"
#: contrib/admin/templates/registration/password_change_done.html:4
#: contrib/admin/templates/registration/password_change_form.html:4
@ -850,7 +850,7 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_done.html:12
msgid "Your password was changed."
msgstr "Ο κωδίκός σας άλλαξε."
msgstr "Ο κωδίκός σας άλλαξε."
#: contrib/admin/templates/registration/password_reset_form.html:4
#: contrib/admin/templates/registration/password_reset_form.html:6
@ -876,7 +876,7 @@ 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"
@ -901,11 +901,11 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_form.html:17
msgid "Old password:"
msgstr "Παλιός κωδικός:"
msgstr "Παλιός κωδικός:"
#: contrib/admin/templates/registration/password_change_form.html:19
msgid "New password:"
msgstr "Νέος κωδικός:"
msgstr "Νέος κωδικός:"
#: contrib/admin/templates/registration/password_change_form.html:21
msgid "Confirm password:"
@ -1173,12 +1173,12 @@ msgstr ""
#: contrib/auth/models.py:70
#, fuzzy
msgid "user"
msgstr "Χρήστης"
msgstr "Χρήστης"
#: contrib/auth/models.py:71
#, fuzzy
msgid "users"
msgstr "Χρήστης"
msgstr "Χρήστης"
#: contrib/auth/models.py:76
msgid "Personal info"
@ -1199,15 +1199,15 @@ msgstr ""
#: contrib/auth/models.py:219
#, fuzzy
msgid "message"
msgstr "αλλάξτε το μήνυμα"
msgstr "αλλάξτε το μήνυμα"
#: contrib/auth/forms.py:30
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in."
msgstr ""
"Ο φυλλομετρητής σας δεν φαίνεται να έχει ενεργοποιημένα τα cookies. Τα "
"cookies απαιτούνται για να συνδεθείτε"
"Ο φυλλομετρητής σας δεν φαίνεται να έχει ενεργοποιημένα τα cookies. Τα "
"cookies απαιτούνται για να συνδεθείτε"
#: contrib/contenttypes/models.py:25
msgid "python model class name"
@ -1348,7 +1348,7 @@ msgstr ""
#: utils/dates.py:19
#, fuzzy
msgid "jan"
msgstr "και"
msgstr "και"
#: utils/dates.py:19
msgid "feb"
@ -1677,7 +1677,7 @@ msgstr ""
#: core/validators.py:206 core/validators.py:208
#, python-format
msgid "The URL %s is a broken link."
msgstr "Η διεύθυνση (URL) %s είναι χαλασμένη σύνδεση."
msgstr "Η διεύθυνση (URL) %s είναι χαλασμένη σύνδεση."
#: core/validators.py:214
msgid "Enter a valid U.S. state abbreviation."
@ -1701,7 +1701,7 @@ msgstr ""
#: core/validators.py:264 core/validators.py:275
msgid "Please enter both fields or leave them both empty."
msgstr "Παρακαλώ συμπληρώστε και τα δύο πεδία ή αφήστε τα και τα δύο άδεια."
msgstr "Παρακαλώ συμπληρώστε και τα δύο πεδία ή αφήστε τα και τα δύο άδεια."
#: core/validators.py:282
#, python-format
@ -1724,7 +1724,7 @@ msgstr ""
#: core/validators.py:347
msgid "Please enter a valid decimal number."
msgstr "Παρακαλώ είσάγετε έναν έγκυρο δεκαδίκο αριθμό."
msgstr "Παρακαλώ είσάγετε έναν έγκυρο δεκαδίκο αριθμό."
#: core/validators.py:349
#, python-format
@ -1745,7 +1745,7 @@ msgstr[1] ""
#: core/validators.py:362
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον."
msgstr "Σιγουρευτείτε ότι το αρχείου που ανεβάζετε είναι %s bytes τουλάχιστον."
#: core/validators.py:363
#, python-format
@ -1754,11 +1754,11 @@ msgstr ""
#: core/validators.py:376
msgid "The format for this field is wrong."
msgstr "Η διάταξη αυτού του πεδίου έιναι λάθος"
msgstr "Η διάταξη αυτού του πεδίου έιναι λάθος"
#: core/validators.py:391
msgid "This field is invalid."
msgstr "Αυτό το πεδίο είναι άκυρο"
msgstr "Αυτό το πεδίο είναι άκυρο"
#: core/validators.py:426
#, python-format
@ -1836,16 +1836,16 @@ msgstr ""
#: db/models/fields/__init__.py:369
#, fuzzy
msgid "This value must be either True or False."
msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
msgstr "Boolean (Είτε Αλήθεια ή Ψέμα)"
#: db/models/fields/__init__.py:385
#, fuzzy
msgid "This field cannot be null."
msgstr "Αυτό το πεδίο είναι άκυρο"
msgstr "Αυτό το πεδίο είναι άκυρο"
#: db/models/fields/__init__.py:562
msgid "Enter a valid filename."
msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου"
msgstr "Εισάγετε ένα έγκυρο όνομα αρχείου"
#: db/models/fields/related.py:43
#, python-format
@ -1855,7 +1855,7 @@ msgstr ""
#: db/models/fields/related.py:579
#, fuzzy
msgid "Separate multiple IDs with commas."
msgstr "Ξεχωρίστε πολλαπλές ΙDs με κόμματα"
msgstr "Ξεχωρίστε πολλαπλές ΙDs με κόμματα"
#: db/models/fields/related.py:581
msgid ""
@ -1904,10 +1904,10 @@ msgstr ""
#: template/defaultfilters.py:379
msgid "yes,no,maybe"
msgstr "ναί,όχι,ίσως"
msgstr "ναί,όχι,ίσως"
#~ msgid "Comment"
#~ msgstr "Σχόλιο"
#~ msgstr "Σχόλιο"
#~ msgid "Comments"
#~ msgstr "Σχόλια"
#~ msgstr "Σχόλια"

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,110 @@
# Argentinean spanish translation for the django-admin JS files, based on
# Spanish translation work by Jorge Gajon.
# Copyright (C)
# This file is distributed under the same license as the PACKAGE package.
# Ramiro Morales <rm0@gmx.net>, 2006.
#
msgid ""
msgstr ""
"Project-Id-Version: Django JavaScript 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: 2006-05-16 10:20-0300\n"
"Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr "%s disponibles"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr "Selecciona todos"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr "Agregar"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr "Eliminar"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr "%s elegidos"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr "Haga sus elecciones y haga click en "
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr "Elimina todos"
#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
"Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre "
"Noviembre Diciembre"
#: contrib/admin/media/js/dateparse.js:27
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Domingo Lunes Martes Miércoles Jueves Viernes Sábado"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr "D L M M J V S"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
msgid "Now"
msgstr "Ahora"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
msgid "Clock"
msgstr "Reloj"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
msgid "Choose a time"
msgstr "Elija una hora"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Midnight"
msgstr "Medianoche"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "6 a.m."
msgstr "6 a.m."
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "Noon"
msgstr "Mediodía"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
msgid "Cancel"
msgstr "Cancelar"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
msgid "Today"
msgstr "Hoy"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
msgid "Calendar"
msgstr "Calendario"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
msgid "Yesterday"
msgstr "Ayer"
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
msgid "Tomorrow"
msgstr "Mañana"

View File

@ -16,9 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: contrib/comments/models.py:67 contrib/comments/models.py:166
#, fuzzy
msgid "object ID"
msgstr "id de l'objet"
msgstr "ID de l'objet"
#: contrib/comments/models.py:68
msgid "headline"
@ -26,9 +25,8 @@ msgstr "titre"
#: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167
#, fuzzy
msgid "comment"
msgstr "contenu"
msgstr "commentaire"
#: contrib/comments/models.py:70
msgid "rating #1"
@ -75,7 +73,6 @@ msgid "is public"
msgstr "est public"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
#, fuzzy
msgid "IP address"
msgstr "adresse IP"
@ -92,14 +89,12 @@ msgstr ""
"commentaire a été supprimé\" sera affiché en lieu et place de celui-ci."
#: contrib/comments/models.py:91
#, fuzzy
msgid "comments"
msgstr "contenu"
msgstr "commentaires"
#: contrib/comments/models.py:131 contrib/comments/models.py:207
#, fuzzy
msgid "Content object"
msgstr "type de contenu"
msgstr "Type de contenu"
#: contrib/comments/models.py:159
#, python-format
@ -117,12 +112,10 @@ msgstr ""
"http://%(domain)s%(url)s"
#: contrib/comments/models.py:168
#, fuzzy
msgid "person's name"
msgstr "nom"
#: contrib/comments/models.py:171
#, fuzzy
msgid "ip address"
msgstr "adresse IP"
@ -131,33 +124,28 @@ msgid "approved by staff"
msgstr "approuvé par l'équipe"
#: contrib/comments/models.py:176
#, fuzzy
msgid "free comment"
msgstr "Commentaire libre"
msgstr "commentaire libre"
#: contrib/comments/models.py:177
#, fuzzy
msgid "free comments"
msgstr "Commentaires libres"
msgstr "commentaires libres"
#: contrib/comments/models.py:233
msgid "score"
msgstr "Évaluation"
msgstr "evaluation"
#: contrib/comments/models.py:234
#, fuzzy
msgid "score date"
msgstr "Date d'évaluation"
msgstr "date d'évaluation"
#: contrib/comments/models.py:237
#, fuzzy
msgid "karma score"
msgstr "Point de Karma"
msgstr "point de Karma"
#: contrib/comments/models.py:238
#, fuzzy
msgid "karma scores"
msgstr "Points de Karma"
msgstr "points de Karma"
#: contrib/comments/models.py:242
#, python-format
@ -176,19 +164,16 @@ msgstr ""
"%(text)s"
#: contrib/comments/models.py:265
#, fuzzy
msgid "flag date"
msgstr "date d'indicateur"
#: contrib/comments/models.py:268
#, fuzzy
msgid "user flag"
msgstr "Indicateur utilisateur"
msgstr "indicateur utilisateur"
#: contrib/comments/models.py:269
#, fuzzy
msgid "user flags"
msgstr "Indicateurs utilisateur"
msgstr "indicateurs utilisateur"
#: contrib/comments/models.py:273
#, python-format
@ -196,19 +181,16 @@ msgid "Flag by %r"
msgstr "Indicateur par %r"
#: contrib/comments/models.py:278
#, fuzzy
msgid "deletion date"
msgstr "date de suppression"
#: contrib/comments/models.py:280
#, fuzzy
msgid "moderator deletion"
msgstr "Suppression de modérateur"
msgstr "suppression de modérateur"
#: contrib/comments/models.py:281
#, fuzzy
msgid "moderator deletions"
msgstr "Suppressions de modérateur"
msgstr "suppressions de modérateur"
#: contrib/comments/models.py:285
#, python-format
@ -220,7 +202,6 @@ msgid "Anonymous users cannot vote"
msgstr "Les utilisateurs anonymes ne peuvent pas voter"
#: contrib/comments/views/karma.py:23
#, fuzzy
msgid "Invalid comment ID"
msgstr "ID de commentaire invalide"
@ -282,7 +263,7 @@ msgstr "Un ou plusieurs champs requis n'ont pas
#: contrib/comments/views/comments.py:286
msgid "Somebody tampered with the comment form (security violation)"
msgstr ""
"Quelqu'un a trifouillé le formulaire de commentaire (violation des règles de "
"Quelqu'un a trafiqué le formulaire de commentaire (violation des règles de "
"sécurité)"
#: contrib/comments/views/comments.py:207
@ -313,7 +294,6 @@ msgid "Password:"
msgstr "Mot de passe"
#: contrib/comments/templates/comments/form.html:6
#, fuzzy
msgid "Forgotten your password?"
msgstr "Mot de passe oublié?"
@ -346,33 +326,30 @@ msgstr "vote n
#: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23
msgid "Required"
msgstr ""
msgstr "Requis"
#: contrib/comments/templates/comments/form.html:12
#: contrib/comments/templates/comments/form.html:23
msgid "Optional"
msgstr ""
msgstr "Optionel"
#: contrib/comments/templates/comments/form.html:23
msgid "Post a photo"
msgstr ""
msgstr "Poster une photo"
#: contrib/comments/templates/comments/form.html:27
#: contrib/comments/templates/comments/freeform.html:5
#, fuzzy
msgid "Comment:"
msgstr "Commentaire"
msgstr "Commentaire :"
#: contrib/comments/templates/comments/form.html:32
#: contrib/comments/templates/comments/freeform.html:9
#, fuzzy
msgid "Preview comment"
msgstr "Prévisualisation du commentaire"
#: contrib/comments/templates/comments/freeform.html:4
#, fuzzy
msgid "Your name:"
msgstr "nom d'utilisateur"
msgstr "Votre nom :"
#: contrib/admin/filterspecs.py:40
#, python-format
@ -393,7 +370,6 @@ msgid "Any date"
msgstr "Toutes les dates"
#: contrib/admin/filterspecs.py:110
#, fuzzy
msgid "Today"
msgstr "Aujourd'hui"
@ -414,7 +390,6 @@ msgid "Yes"
msgstr "Oui"
#: contrib/admin/filterspecs.py:143
#, fuzzy
msgid "No"
msgstr "Non"
@ -496,7 +471,6 @@ msgstr ""
"Votre courriel n'est pas votre nom d'utilisateur. Essayez '%s' à la place."
#: contrib/admin/views/main.py:226
#, fuzzy
msgid "Site administration"
msgstr "Gestion du site"
@ -515,7 +489,7 @@ msgid "You may add another %s below."
msgstr "Vous pouvez ajouter un autre %s ci-dessous."
#: contrib/admin/views/main.py:290
#, fuzzy, python-format
#, python-format
msgid "Add %s"
msgstr "Ajouter %s"
@ -530,7 +504,7 @@ msgid "and"
msgstr "et"
#: contrib/admin/views/main.py:338
#, fuzzy, python-format
#, python-format
msgid "Changed %s."
msgstr "Modifié %s."
@ -557,7 +531,7 @@ msgstr ""
"de l'éditez ci-dessous."
#: contrib/admin/views/main.py:392
#, fuzzy, python-format
#, python-format
msgid "Change %s"
msgstr "Changement %s"
@ -581,7 +555,7 @@ msgid "Are you sure?"
msgstr "Êtes-vous sûr ?"
#: contrib/admin/views/main.py:533
#, fuzzy, python-format
#, python-format
msgid "Change history: %s"
msgstr "Historique des changements : %s"
@ -615,17 +589,14 @@ msgid "Comma-separated integers"
msgstr "Des entiers séparés par une virgule"
#: contrib/admin/views/doc.py:281
#, fuzzy
msgid "Date (without time)"
msgstr "Date (sans l'heure)"
#: contrib/admin/views/doc.py:282
#, fuzzy
msgid "Date (with time)"
msgstr "Date (avec l'heure)"
#: contrib/admin/views/doc.py:283
#, fuzzy
msgid "E-mail address"
msgstr "Courriel :"
@ -634,7 +605,6 @@ msgid "File path"
msgstr "Chemin vers le fichier"
#: contrib/admin/views/doc.py:285
#, fuzzy
msgid "Decimal number"
msgstr "Nombre décimal"
@ -647,7 +617,6 @@ msgid "Relation to parent model"
msgstr "Relation au modèle parent"
#: contrib/admin/views/doc.py:293
#, fuzzy
msgid "Phone number"
msgstr "Numéro de téléphone"
@ -755,9 +724,8 @@ msgid "Django administration"
msgstr "Administration de Django"
#: contrib/admin/templates/admin/500.html:4
#, fuzzy
msgid "Server error"
msgstr "Erreur du serveur (500)"
msgstr "Erreur du serveur"
#: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)"
@ -788,7 +756,7 @@ msgstr "Nous sommes d
#: contrib/admin/templates/admin/index.html:17
#, python-format
msgid "Models available in the %(name)s application."
msgstr ""
msgstr "Modèles disponibles dans l'application %(name)s."
#: contrib/admin/templates/admin/index.html:28
#: contrib/admin/templates/admin/change_form.html:15
@ -816,7 +784,7 @@ msgid "None available"
msgstr "Aucun(e) disponible"
#: contrib/admin/templates/admin/change_list.html:11
#, fuzzy, python-format
#, python-format
msgid "Add %(name)s"
msgstr "Ajouter %(name)s"
@ -834,7 +802,7 @@ msgid "Delete"
msgstr "Supprimer"
#: contrib/admin/templates/admin/delete_confirmation.html:14
#, fuzzy, python-format
#, 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 "
@ -897,7 +865,6 @@ msgid "Save and continue editing"
msgstr "Sauver et continuer les modifications"
#: contrib/admin/templates/admin/submit_line.html:7
#, fuzzy
msgid "Save"
msgstr "Sauver"
@ -1051,9 +1018,8 @@ msgstr ""
"généré cette page."
#: contrib/admin/templates/admin_doc/bookmarklets.html:22
#, fuzzy
msgid "Show object ID"
msgstr "Montrer l'ID de l'objet"
msgstr "Afficher l'ID de l'objet"
#: contrib/admin/templates/admin_doc/bookmarklets.html:23
msgid ""
@ -1094,7 +1060,6 @@ msgid "Currently:"
msgstr "Actuellement :"
#: contrib/admin/templates/widget/file.html:3
#, fuzzy
msgid "Change:"
msgstr "Modification :"
@ -1154,7 +1119,6 @@ msgid "template name"
msgstr "nom du template"
#: contrib/flatpages/models.py:13
#, fuzzy
msgid ""
"Example: 'flatpages/contact_page'. If this isn't provided, the system will "
"use 'flatpages/default'."
@ -1189,24 +1153,20 @@ msgid "codename"
msgstr "nom de code"
#: contrib/auth/models.py:17
#, fuzzy
msgid "permission"
msgstr "Permission"
msgstr "permission"
#: contrib/auth/models.py:18 contrib/auth/models.py:27
#, fuzzy
msgid "permissions"
msgstr "Permissions"
msgstr "permissions"
#: contrib/auth/models.py:29
#, fuzzy
msgid "group"
msgstr "Groupe"
msgstr "groupe"
#: contrib/auth/models.py:30 contrib/auth/models.py:65
#, fuzzy
msgid "groups"
msgstr "Groupes"
msgstr "groupes"
#: contrib/auth/models.py:55
msgid "username"
@ -1266,19 +1226,16 @@ msgstr ""
"appartient. "
#: contrib/auth/models.py:67
#, fuzzy
msgid "user permissions"
msgstr "Permissions"
msgstr "permissions de l'utilisateur"
#: contrib/auth/models.py:70
#, fuzzy
msgid "user"
msgstr "Utilisateur"
msgstr "utilisateur"
#: contrib/auth/models.py:71
#, fuzzy
msgid "users"
msgstr "Utilisateurs"
msgstr "utilisateurs"
#: contrib/auth/models.py:76
msgid "Personal info"
@ -1297,9 +1254,8 @@ msgid "Groups"
msgstr "Groupes"
#: contrib/auth/models.py:219
#, fuzzy
msgid "message"
msgstr "Message"
msgstr "message"
#: contrib/auth/forms.py:30
msgid ""
@ -1310,7 +1266,6 @@ msgstr ""
"nécessaire pour se connecter"
#: contrib/contenttypes/models.py:25
#, fuzzy
msgid "python model class name"
msgstr "nom du module python"
@ -1447,54 +1402,52 @@ msgid "December"
msgstr "Décembre"
#: utils/dates.py:19
#, fuzzy
msgid "jan"
msgstr "et"
msgstr "jan"
#: utils/dates.py:19
msgid "feb"
msgstr ""
msgstr "fév"
#: utils/dates.py:19
msgid "mar"
msgstr ""
msgstr "mar"
#: utils/dates.py:19
msgid "apr"
msgstr ""
msgstr "avr"
#: utils/dates.py:19
#, fuzzy
msgid "may"
msgstr "journée"
msgstr "mai"
#: utils/dates.py:19
msgid "jun"
msgstr ""
msgstr "jui"
#: utils/dates.py:20
msgid "jul"
msgstr ""
msgstr "jul"
#: utils/dates.py:20
msgid "aug"
msgstr ""
msgstr "aout"
#: utils/dates.py:20
msgid "sep"
msgstr ""
msgstr "sep"
#: utils/dates.py:20
msgid "oct"
msgstr ""
msgstr "oct"
#: utils/dates.py:20
msgid "nov"
msgstr ""
msgstr "nov"
#: utils/dates.py:20
msgid "dec"
msgstr ""
msgstr "déc"
#: utils/dates.py:27
msgid "Jan."
@ -1544,7 +1497,6 @@ msgstr[0] ""
msgstr[1] ""
#: utils/timesince.py:15
#, fuzzy
msgid "day"
msgid_plural "days"
msgstr[0] "journée"
@ -1557,7 +1509,6 @@ msgstr[0] "heure"
msgstr[1] "heures"
#: utils/timesince.py:17
#, fuzzy
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minute"
@ -1576,7 +1527,6 @@ msgid "Welsh"
msgstr "Gallois"
#: conf/global_settings.py:40
#, fuzzy
msgid "Danish"
msgstr "Dannois"
@ -1617,13 +1567,12 @@ msgid "Icelandic"
msgstr "Islandais"
#: conf/global_settings.py:50
#, fuzzy
msgid "Italian"
msgstr "Italien"
#: conf/global_settings.py:51
msgid "Japanese"
msgstr ""
msgstr "Japonais"
#: conf/global_settings.py:52
msgid "Dutch"
@ -1655,7 +1604,6 @@ msgid "Slovenian"
msgstr "Slovaque"
#: conf/global_settings.py:59
#, fuzzy
msgid "Serbian"
msgstr "Serbe"
@ -1664,9 +1612,8 @@ msgid "Swedish"
msgstr "Suédois"
#: conf/global_settings.py:61
#, fuzzy
msgid "Ukrainian"
msgstr "Brésilien"
msgstr "Ukrainien"
#: conf/global_settings.py:62
msgid "Simplified Chinese"
@ -1683,7 +1630,6 @@ msgstr ""
"('_')."
#: core/validators.py:64
#, fuzzy
msgid ""
"This value must contain only letters, numbers, underscores, dashes or "
"slashes."
@ -1968,42 +1914,35 @@ msgstr "%(optname)s avec le champs %(fieldname)s existe d
#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
#: forms/__init__.py:346
#, fuzzy
msgid "This field is required."
msgstr "Ce champ est obligatoire."
#: db/models/fields/__init__.py:337
#, fuzzy
msgid "This value must be an integer."
msgstr "Cette valeur doit être une puissance de %s."
msgstr "Cette valeur doit être un entier."
#: db/models/fields/__init__.py:369
#, fuzzy
msgid "This value must be either True or False."
msgstr "Cette valeur doit être une puissance de %s."
msgstr "Cette valeur doit être soit Vraie soit Fausse."
#: db/models/fields/__init__.py:385
#, fuzzy
msgid "This field cannot be null."
msgstr "Ce champ est invalide."
msgstr "Ce champ ne peut pas être vide."
#: db/models/fields/__init__.py:562
#, fuzzy
msgid "Enter a valid filename."
msgstr "Entrez un nom de fichier valide."
#: db/models/fields/related.py:43
#, fuzzy, python-format
#, python-format
msgid "Please enter a valid %s."
msgstr "Entrez une adresse IP valide."
msgstr "Entrez un %s valide."
#: db/models/fields/related.py:579
#, fuzzy
msgid "Separate multiple IDs with commas."
msgstr "Séparez les ID par des virgules."
#: db/models/fields/related.py:581
#, fuzzy
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
@ -2029,7 +1968,7 @@ msgstr[1] "Assurez-vous que votre texte fais moins de %s caract
#: forms/__init__.py:385
#, fuzzy
msgid "Line breaks are not allowed here."
msgstr "Les lettres minuscules ne sont pas autorisées ici."
msgstr "Les retours à la ligne ne sont pas autorisés ici."
#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589
#, python-format
@ -2041,17 +1980,14 @@ msgid "The submitted file is empty."
msgstr "Le fichier soumis est vide."
#: forms/__init__.py:699
#, fuzzy
msgid "Enter a whole number between -32,768 and 32,767."
msgstr "Entrez un nombre entier entre -32 768 et 32 767."
#: forms/__init__.py:708
#, fuzzy
msgid "Enter a positive number."
msgstr "Entrez un nombre entier positif."
#: forms/__init__.py:717
#, fuzzy
msgid "Enter a whole number between 0 and 32,767."
msgstr "Entrez un nombre entier entre 0 et 32 767."
@ -2062,7 +1998,6 @@ msgstr "oui,non,peut-
#~ msgid "Comment"
#~ msgstr "Commentaire"
#, fuzzy
#~ msgid "Comments"
#~ msgstr "Commentaires"

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
# Italian translation for the django-admin JS files
# Copyright (C) 2005
# This file is distributed under the same license as the PACKAGE package.
# Antonio Cavedoni <antonio@cavedoni.org>, 2005.
# Copyright (C) 2006 the Lawrence Journal-World
# This file is distributed under the same license as the Django package.
# Carlo C8E Miron <carlo.miron AT gmail.com>, 2006.
#
msgid ""
msgstr ""
@ -9,41 +9,42 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-12-09 11:51+0100\n"
"PO-Revision-Date: 2005-12-04 21:47+0100\n"
"Last-Translator: Antonio Cavedoni <antonio@cavedoni.org>\n"
"Last-Translator: Carlo C8E Miron <carlo.miron AT gmail.com>\n"
"Language-Team: Italian <Django-I18N@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
msgstr "Disponibile %s"
#: contrib/admin/media/js/SelectFilter2.js:41
#, fuzzy
msgid "Choose all"
msgstr "Seleziona un orario"
msgstr "Seleziona tutto"
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
msgstr "Aggiungi"
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
msgstr "Rimuovi"
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
msgstr "Selezionato %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
msgstr "Seleziona le tue scelte e clicca "
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
msgstr "Cancella tutto"
#: contrib/admin/media/js/dateparse.js:26
#: contrib/admin/media/js/calendar.js:24
@ -56,7 +57,7 @@ msgstr ""
#: contrib/admin/media/js/dateparse.js:27
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
msgstr "Domenica Lunedì Martedì Mercoledì Giovedì Venerdì Sabato"
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Dutch Javascript translations.
# Copyright (C) 2006
# This file is distributed under the same license as the Django package.
# Rudolph Froger <rfroger@estrate.nl>, 2006.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-02 16:52+0200\n"
"POT-Creation-Date: 2006-05-16 17:39+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Last-Translator: Rudolph Froger <rfroger@estrate.nl>\n"
"Language-Team: nl <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -30,12 +30,12 @@ msgstr "Z M D W D V Z"
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr "Zondag Maandag Dinsdag Woensdag Donderdag Vrijdag Zaterdag"
msgstr "zondag maandag dinsdag woensdag donderdag vrijdag zaterdag"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr "Beschikbaar"
msgstr "Beschikbare %s"
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"

View File

@ -822,7 +822,7 @@ msgid ""
"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
"the following related items will be deleted:"
msgstr ""
"Er du sikker på at du vill slette %(object_name) \"%(object)s\"? Alle de "
"Er du sikker på at du vill slette %(object_name)s \"%(object)s\"? Alle de "
"følgende relaterte objektene vill bli slettet:"
#: contrib/admin/templates/admin/delete_confirmation.html:26

View File

@ -90,9 +90,8 @@ msgstr ""
"\" táto správa sa objaví namiesto neho."
#: contrib/comments/models.py:91
#, fuzzy
msgid "comments"
msgstr "komentár"
msgstr "komentáre"
#: contrib/comments/models.py:131 contrib/comments/models.py:207
msgid "Content object"
@ -126,14 +125,12 @@ msgid "approved by staff"
msgstr "je zamestnancom"
#: contrib/comments/models.py:176
#, fuzzy
msgid "free comment"
msgstr "Voľný komentár"
msgstr "voľný komentár"
#: contrib/comments/models.py:177
#, fuzzy
msgid "free comments"
msgstr "Voľné komentáre"
msgstr "voľné komentáre"
#: contrib/comments/models.py:233
msgid "score"
@ -144,14 +141,12 @@ msgid "score date"
msgstr "údaje stavu"
#: contrib/comments/models.py:237
#, fuzzy
msgid "karma score"
msgstr "Karma údaj"
msgstr "karma údaj"
#: contrib/comments/models.py:238
#, fuzzy
msgid "karma scores"
msgstr "Karma údaje"
msgstr "karma údaje"
#: contrib/comments/models.py:242
#, python-format
@ -174,14 +169,12 @@ msgid "flag date"
msgstr "dátumové návestie"
#: contrib/comments/models.py:268
#, fuzzy
msgid "user flag"
msgstr "Návestie uživateľa"
msgstr "návestie uživateľa"
#: contrib/comments/models.py:269
#, fuzzy
msgid "user flags"
msgstr "Návestia užívateľa"
msgstr "návestia užívateľa"
#: contrib/comments/models.py:273
#, python-format
@ -193,14 +186,12 @@ msgid "deletion date"
msgstr "odstránené dátumy"
#: contrib/comments/models.py:280
#, fuzzy
msgid "moderator deletion"
msgstr "Moderátor odstránenia"
msgstr "moderátor odstránenia"
#: contrib/comments/models.py:281
#, fuzzy
msgid "moderator deletions"
msgstr "Moderátor odstránení"
msgstr "moderátor odstránení"
#: contrib/comments/models.py:285
#, python-format
@ -1157,24 +1148,20 @@ msgid "codename"
msgstr "codename"
#: contrib/auth/models.py:17
#, fuzzy
msgid "permission"
msgstr "Povolenie"
msgstr "povolenie"
#: contrib/auth/models.py:18 contrib/auth/models.py:27
#, fuzzy
msgid "permissions"
msgstr "Povolenia"
msgstr "povolenia"
#: contrib/auth/models.py:29
#, fuzzy
msgid "group"
msgstr "Skupina"
msgstr "skupina"
#: contrib/auth/models.py:30 contrib/auth/models.py:65
#, fuzzy
msgid "groups"
msgstr "Skupiny"
msgstr "skupiny"
#: contrib/auth/models.py:55
msgid "username"
@ -1233,17 +1220,14 @@ msgstr ""
"skupin, v ktorých sa nachádza."
#: contrib/auth/models.py:67
#, fuzzy
msgid "user permissions"
msgstr "Povolenia"
msgstr "pridelené povolenia"
#: contrib/auth/models.py:70
#, fuzzy
msgid "user"
msgstr "Uživateľ"
#: contrib/auth/models.py:71
#, fuzzy
msgid "users"
msgstr "Užívatelia"
@ -1264,9 +1248,8 @@ msgid "Groups"
msgstr "Skupiny"
#: contrib/auth/models.py:219
#, fuzzy
msgid "message"
msgstr "Zpráva"
msgstr "zpráva"
#: contrib/auth/forms.py:30
msgid ""
@ -1277,9 +1260,8 @@ msgstr ""
"nevýhnutné aby ste sa mohli prilásiť."
#: contrib/contenttypes/models.py:25
#, fuzzy
msgid "python model class name"
msgstr "meno python modulu"
msgstr "pythonové meno triedy modelu"
#: contrib/contenttypes/models.py:28
msgid "content type"
@ -1414,7 +1396,6 @@ msgid "December"
msgstr "December"
#: utils/dates.py:19
#, fuzzy
msgid "jan"
msgstr "a"
@ -1431,17 +1412,16 @@ msgid "apr"
msgstr ""
#: utils/dates.py:19
#, fuzzy
msgid "may"
msgstr "ďeň"
msgstr "máj"
#: utils/dates.py:19
msgid "jun"
msgstr ""
msgstr "jún"
#: utils/dates.py:20
msgid "jul"
msgstr ""
msgstr "júl"
#: utils/dates.py:20
msgid "aug"
@ -1453,7 +1433,7 @@ msgstr ""
#: utils/dates.py:20
msgid "oct"
msgstr ""
msgstr "okt"
#: utils/dates.py:20
msgid "nov"
@ -1624,9 +1604,8 @@ msgid "Swedish"
msgstr "Švédsky"
#: conf/global_settings.py:61
#, fuzzy
msgid "Ukrainian"
msgstr "Brazílsky"
msgstr "Ukrajínsky"
#: conf/global_settings.py:62
msgid "Simplified Chinese"
@ -1922,19 +1901,16 @@ msgid "This field is required."
msgstr "Toto pole je nevyhnutné."
#: db/models/fields/__init__.py:337
#, fuzzy
msgid "This value must be an integer."
msgstr "Táto hodnota musí byť mocninou %s."
msgstr "Táto hodnota musí byť integer."
#: db/models/fields/__init__.py:369
#, fuzzy
msgid "This value must be either True or False."
msgstr "Táto hodnota musí byť mocninou %s."
msgstr "Táto hodnota musí byť buď True alebo False."
#: db/models/fields/__init__.py:385
#, fuzzy
msgid "This field cannot be null."
msgstr "Toto pole nie je platné."
msgstr "Toto pole nemôže obsahovať null."
#: db/models/fields/__init__.py:562
msgid "Enter a valid filename."
@ -1946,12 +1922,10 @@ msgid "Please enter a valid %s."
msgstr "Prosím vložte platné %s."
#: db/models/fields/related.py:579
#, fuzzy
msgid "Separate multiple IDs with commas."
msgstr "Identifikátory oddeľte čiarkami."
msgstr "Oddeľte viacnásobné ID čiarkami."
#: db/models/fields/related.py:581
#, fuzzy
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""

View File

@ -51,10 +51,10 @@ TEMPLATE_LOADERS = (
)
MIDDLEWARE_CLASSES = (
"django.middleware.common.CommonMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.middleware.doc.XViewMiddleware",
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
)
ROOT_URLCONF = '{{ project_name }}.urls'

View File

@ -118,7 +118,7 @@ class AdminBoundField(object):
self.raw_id_admin = use_raw_id_admin(field)
self.is_date_time = isinstance(field, models.DateTimeField)
self.is_file_field = isinstance(field, models.FileField)
self.needs_add_label = field.rel and isinstance(field.rel, models.ManyToOneRel) or isinstance(field.rel, models.ManyToManyRel) and field.rel.to._meta.admin
self.needs_add_label = field.rel and (isinstance(field.rel, models.ManyToOneRel) or isinstance(field.rel, models.ManyToManyRel)) and field.rel.to._meta.admin
self.hidden = isinstance(self.field, models.AutoField)
self.first = False

View File

@ -5,7 +5,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.contrib.sites.models import Site
class LatestFreeCommentsFeed(Feed):
"""Feed of latest comments on the current site"""
"Feed of latest comments on the current site."
comments_class = FreeComment
@ -25,24 +25,18 @@ class LatestFreeCommentsFeed(Feed):
return "Latest comments on %s" % self._site.name
def items(self):
return self.comments_class.objects.filter(**self._get_lookup_kwargs())
def _get_lookup_kwargs(self):
return {
'site__pk': settings.SITE_ID,
'is_public__exact': True,
'limit': 40,
}
return self.comments_class.objects.filter(site__pk=settings.SITE_ID, is_public=True)[:40]
class LatestCommentsFeed(LatestFreeCommentsFeed):
"""Feed of latest free comments on the current site"""
comments_class = Comment
def _get_lookup_kwargs(self):
kwargs = LatestFreeCommentsFeed._get_lookup_kwargs(self)
kwargs['is_removed__exact'] = False
def items(self):
qs = LatestFreeCommentsFeed.items(self)
qs = qs.filter(is_removed=False)
if settings.COMMENTS_BANNED_USERS_GROUP:
kwargs['where'] = ['user_id NOT IN (SELECT user_id FROM auth_users_group WHERE group_id = %s)']
kwargs['params'] = [COMMENTS_BANNED_USERS_GROUP]
return kwargs
where = ['user_id NOT IN (SELECT user_id FROM auth_users_group WHERE group_id = %s)']
params = [COMMENTS_BANNED_USERS_GROUP]
qs = qs.extra(where=where, params=params)
return qs

View File

@ -252,7 +252,7 @@ def post_comment(request):
else:
manipulator.do_html2python(new_data)
comment = manipulator.save(new_data)
return HttpResponseRedirect("/comments/posted/?c=%s:%s" % (content_type_id, object_id))
return HttpResponseRedirect("../posted/?c=%s:%s" % (content_type_id, object_id))
else:
raise Http404, _("The comment form didn't provide either 'preview' or 'post'")
@ -316,7 +316,7 @@ def post_free_comment(request):
else:
manipulator.do_html2python(new_data)
comment = manipulator.save(new_data)
return HttpResponseRedirect("/comments/posted/?c=%s:%s" % (content_type_id, object_id))
return HttpResponseRedirect("../posted/?c=%s:%s" % (content_type_id, object_id))
else:
raise Http404, _("The comment form didn't provide either 'preview' or 'post'")

View File

@ -7,20 +7,14 @@ class CurrentSiteManager(models.Manager):
def __init__(self, field_name='site'):
super(CurrentSiteManager, self).__init__()
self.__field_name = field_name
self.__is_validated = False
def contribute_to_class(self, *args, **kwargs):
# This method is overridden purely to check for errors in
# self.field_name. We can't do this in __init__() because of
# how Managers are implemented -- self.model isn't available
# until after contribute_to_class() is called.
super(CurrentSiteManager, self).contribute_to_class(*args, **kwargs)
def get_query_set(self):
if not self.__is_validated:
try:
self.model._meta.get_field(self.__field_name)
except FieldDoesNotExist:
raise ValueError, "%s couldn't find a field named %s in %s." % \
(self.__class__.__name__, self.__field_name, self.model._meta.object_name)
self.__lookup = self.__field_name + '__id__exact'
del self.__field_name
def get_query_set(self):
return super(SiteLimitManager, self).get_query_set().filter(**{self.__lookup: settings.SITE_ID})
self.__is_validated = True
return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})

View File

@ -95,6 +95,8 @@ class BaseHandler:
return callback(request, **param_dict)
except exceptions.PermissionDenied:
return http.HttpResponseForbidden('<h1>Permission denied</h1>')
except SystemExit:
pass # See http://code.djangoproject.com/ticket/1023
except: # Handle everything else, including SuspiciousOperation, etc.
if settings.DEBUG:
return self.get_technical_error_response(request)

View File

@ -3,7 +3,7 @@
from django.conf import settings
from email.MIMEText import MIMEText
from email.Header import Header
import smtplib
import smtplib, rfc822
class BadHeaderError(ValueError):
pass
@ -49,6 +49,7 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=settings.EMAIL_HOST
msg['Subject'] = subject
msg['From'] = from_email
msg['To'] = ', '.join(recipient_list)
msg['Date'] = rfc822.formatdate()
try:
server.sendmail(from_email, recipient_list, msg.as_string())
num_sent += 1

View File

@ -328,13 +328,23 @@ def get_sql_initial_data_for_model(model):
app_dir = os.path.normpath(os.path.join(os.path.dirname(models.get_app(model._meta.app_label).__file__), 'sql'))
output = []
# Some backends can't execute more than one SQL statement at a time,
# so split into separate statements.
sql_expr = re.compile(
r"""( # each statement is...
(?: # one or more chunks of ...
(?:[^;'"]+) # not the end of a statement or start of a quote
| (?:'[^']+') # something in single quotes
| (?:"[^"]+") # something in double quotes
)+)""", re.VERBOSE)
# Find custom SQL, if it's available.
sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), settings.DATABASE_ENGINE)),
os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
for sql_file in sql_files:
if os.path.exists(sql_file):
fp = open(sql_file)
output.append(fp.read())
output.extend(sql_expr.findall(fp.read()))
fp.close()
return output

View File

@ -17,8 +17,11 @@ except ImportError, e:
backend_dir = os.path.join(__path__[0], 'backends')
available_backends = [f for f in os.listdir(backend_dir) if not f.startswith('_') and not f.startswith('.') and not f.endswith('.py') and not f.endswith('.pyc')]
available_backends.sort()
raise ImproperlyConfigured, "Could not load database backend: %s. Is your DATABASE_ENGINE setting (currently, %r) spelled correctly? Available options are: %s" % \
(e, settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends)))
if settings.DATABASE_ENGINE not in available_backends:
raise ImproperlyConfigured, "%r isn't an available database backend. vailable options are: %s" % \
(settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends)))
else:
raise # If there's some other error, this must be an error in Django itself.
get_introspection_module = lambda: __import__('django.db.backends.%s.introspection' % settings.DATABASE_ENGINE, '', '', [''])
get_creation_module = lambda: __import__('django.db.backends.%s.creation' % settings.DATABASE_ENGINE, '', '', [''])

View File

@ -5,7 +5,11 @@ Requires adodbapi 2.0.1: http://adodbapi.sourceforge.net/
"""
from django.db.backends import util
import adodbapi as Database
try:
import adodbapi as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading adodbapi module: %s" % e
import datetime
try:
import mx

View File

@ -5,7 +5,11 @@ Requires MySQLdb: http://sourceforge.net/projects/mysql-python
"""
from django.db.backends import util
import MySQLdb as Database
try:
import MySQLdb as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading MySQLdb module: %s" % e
from MySQLdb.converters import conversions
from MySQLdb.constants import FIELD_TYPE
import types

View File

View File

@ -0,0 +1,126 @@
"""
Oracle database backend for Django.
Requires cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/
"""
from django.db.backends import util
try:
import cx_Oracle as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading cx_Oracle module: %s" % e
import types
DatabaseError = Database.Error
try:
# Only exists in Python 2.4+
from threading import local
except ImportError:
# Import copy of _thread_local.py from Python 2.4
from django.utils._threading_local import local
class DatabaseWrapper(local):
def __init__(self):
self.connection = None
self.queries = []
def _valid_connection(self):
return self.connection is not None
def cursor(self):
from django.conf import settings
if not self._valid_connection():
if len(settings.DATABASE_HOST.strip()) == 0:
settings.DATABASE_HOST = 'localhost'
if len(settings.DATABASE_PORT.strip()) != 0:
dsn = Database.makedsn(settings.DATABASE_HOST, int(settings.DATABASE_PORT), settings.DATABASE_NAME)
self.connection = Database.connect(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn)
else:
conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
self.connection = Database.connect(conn_string)
return FormatStylePlaceholderCursor(self.connection)
def _commit(self):
self.connection.commit()
def _rollback(self):
if self.connection:
try:
self.connection.rollback()
except Database.NotSupportedError:
pass
def close(self):
if self.connection is not None:
self.connection.close()
self.connection = None
supports_constraints = True
class FormatStylePlaceholderCursor(Database.Cursor):
"""
Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var" style.
This fixes it -- but note that if you want to use a literal "%s" in a query,
you'll need to use "%%s".
"""
def execute(self, query, params=[]):
query = self.convert_arguments(query, len(params))
return Database.Cursor.execute(self, query, params)
def executemany(self, query, params=[]):
query = self.convert_arguments(query, len(params[0]))
return Database.Cursor.executemany(self, query, params)
def convert_arguments(self, query, num_params):
# replace occurances of "%s" with ":arg" - Oracle requires colons for parameter placeholders.
args = [':arg' for i in range(num_params)]
return query % tuple(args)
def quote_name(name):
return name
dictfetchone = util.dictfetchone
dictfetchmany = util.dictfetchmany
dictfetchall = util.dictfetchall
def get_last_insert_id(cursor, table_name, pk_name):
query = "SELECT %s_sq.currval from dual" % table_name
cursor.execute(query)
return cursor.fetchone()[0]
def get_date_extract_sql(lookup_type, table_name):
# lookup_type is 'year', 'month', 'day'
# http://www.psoug.org/reference/date_func.html
return "EXTRACT(%s FROM %s)" % (lookup_type, table_name)
def get_date_trunc_sql(lookup_type, field_name):
return "EXTRACT(%s FROM TRUNC(%s))" % (lookup_type, field_name)
def get_limit_offset_sql(limit, offset=None):
# Limits and offset are too complicated to be handled here.
# Instead, they are handled in django/db/query.py.
pass
def get_random_function_sql():
return "DBMS_RANDOM.RANDOM"
def get_drop_foreignkey_sql():
return "DROP FOREIGN KEY"
OPERATOR_MAPPING = {
'exact': '= %s',
'iexact': 'LIKE %s',
'contains': 'LIKE %s',
'icontains': 'LIKE %s',
'ne': '!= %s',
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
'lte': '<= %s',
'startswith': 'LIKE %s',
'endswith': 'LIKE %s',
'istartswith': 'LIKE %s',
'iendswith': 'LIKE %s',
}

View File

@ -0,0 +1,10 @@
from django.conf import settings
import os
def runshell():
args = ''
args += settings.DATABASE_USER
if settings.DATABASE_PASSWORD:
args += "/%s" % settings.DATABASE_PASSWORD
args += "@%s" % settings.DATABASE_NAME
os.execvp('sqlplus', args)

View File

@ -0,0 +1,26 @@
DATA_TYPES = {
'AutoField': 'number(38)',
'BooleanField': 'number(1)',
'CharField': 'varchar2(%(maxlength)s)',
'CommaSeparatedIntegerField': 'varchar2(%(maxlength)s)',
'DateField': 'date',
'DateTimeField': 'date',
'FileField': 'varchar2(100)',
'FilePathField': 'varchar2(100)',
'FloatField': 'number(%(max_digits)s, %(decimal_places)s)',
'ImageField': 'varchar2(100)',
'IntegerField': 'integer',
'IPAddressField': 'char(15)',
'ManyToManyField': None,
'NullBooleanField': 'integer',
'OneToOneField': 'integer',
'PhoneNumberField': 'varchar(20)',
'PositiveIntegerField': 'integer',
'PositiveSmallIntegerField': 'smallint',
'SlugField': 'varchar(50)',
'SmallIntegerField': 'smallint',
'TextField': 'long',
'TimeField': 'timestamp',
'URLField': 'varchar(200)',
'USStateField': 'varchar(2)',
}

View File

@ -0,0 +1,52 @@
from django.db import transaction
from django.db.backends.oracle.base import quote_name
import re
foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)` \(`([^`]*)`\)")
def get_table_list(cursor):
"Returns a list of table names in the current database."
cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
return [row[0] for row in cursor.fetchall()]
def get_table_description(cursor, table_name):
return table_name
def _name_to_index(cursor, table_name):
"""
Returns a dictionary of {field_name: field_index} for the given table.
Indexes are 0-based.
"""
return dict([(d[0], i) for i, d in enumerate(get_table_description(cursor, table_name))])
def get_relations(cursor, table_name):
"""
Returns a dictionary of {field_index: (field_index_other_table, other_table)}
representing all relationships to the given table. Indexes are 0-based.
"""
raise NotImplementedError
def get_indexes(cursor, table_name):
"""
Returns a dictionary of fieldname -> infodict for the given table,
where each infodict is in the format:
{'primary_key': boolean representing whether it's the primary key,
'unique': boolean representing whether it's a unique index}
"""
raise NotImplementedError
# Maps type codes to Django Field types.
DATA_TYPES_REVERSE = {
16: 'BooleanField',
21: 'SmallIntegerField',
23: 'IntegerField',
25: 'TextField',
869: 'IPAddressField',
1043: 'CharField',
1082: 'DateField',
1083: 'TimeField',
1114: 'DateTimeField',
1184: 'DateTimeField',
1266: 'TimeField',
1700: 'FloatField',
}

View File

@ -5,7 +5,11 @@ Requires psycopg 1: http://initd.org/projects/psycopg1
"""
from django.db.backends import util
import psycopg as Database
try:
import psycopg as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading psycopg module: %s" % e
DatabaseError = Database.DatabaseError

View File

@ -5,7 +5,11 @@ Requires psycopg 2: http://initd.org/projects/psycopg2
"""
from django.db.backends import util
import psycopg2 as Database
try:
import psycopg2 as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading psycopg2 module: %s" % e
DatabaseError = Database.DatabaseError

View File

@ -3,7 +3,11 @@ SQLite3 backend for django. Requires pysqlite2 (http://pysqlite.org/).
"""
from django.db.backends import util
from pysqlite2 import dbapi2 as Database
try:
from pysqlite2 import dbapi2 as Database
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured, "Error loading pysqlite2 module: %s" % e
DatabaseError = Database.DatabaseError

View File

@ -269,8 +269,8 @@ class Model(object):
q._params.extend([param, param, getattr(self, self._meta.pk.attname)])
try:
return q[0]
except IndexError, e:
raise self.DoesNotExist, e.args
except IndexError:
raise self.DoesNotExist, "%s matching query does not exist." % self.__class__._meta.object_name
def _get_next_or_previous_in_order(self, is_next):
cachename = "__%s_order_cache" % is_next

View File

@ -17,9 +17,15 @@ def get_apps():
_app_list = []
for app_name in settings.INSTALLED_APPS:
try:
_app_list.append(__import__(app_name, '', '', ['models']).models)
except (ImportError, AttributeError), e:
pass
mod = __import__(app_name, '', '', ['models'])
except ImportError:
pass # Assume this app doesn't have a models.py in it.
# GOTCHA: It may have a models.py that raises ImportError.
else:
try:
_app_list.append(mod.models)
except AttributeError:
pass # This app doesn't have a models.py in it.
return _app_list
def get_app(app_label):

View File

@ -95,6 +95,9 @@ class QuerySet(object):
def __getitem__(self, k):
"Retrieve an item or slice from the set of results."
assert (not isinstance(k, slice) and (k >= 0)) \
or (isinstance(k, slice) and (k.start is None or k.start >= 0) and (k.stop is None or k.stop >= 0)), \
"Negative indexing is not supported."
if self._result_cache is None:
if isinstance(k, slice):
# Offset:
@ -129,7 +132,7 @@ class QuerySet(object):
return list(self._clone(_offset=offset, _limit=limit))[::k.step]
else:
try:
return self._clone(_offset=k, _limit=1).get()
return list(self._clone(_offset=k, _limit=1))[0]
except self.model.DoesNotExist, e:
raise IndexError, e.args
else:
@ -193,6 +196,7 @@ class QuerySet(object):
def get(self, *args, **kwargs):
"Performs the SELECT and returns a single object matching the given keyword arguments."
clone = self.filter(*args, **kwargs)
# clean up SQL by removing unneeded ORDER BY
if not clone._order_by:
clone._order_by = ()
obj_list = list(clone)
@ -287,22 +291,26 @@ class QuerySet(object):
def filter(self, *args, **kwargs):
"Returns a new QuerySet instance with the args ANDed to the existing set."
return self._filter_or_exclude(Q, *args, **kwargs)
return self._filter_or_exclude(None, *args, **kwargs)
def exclude(self, *args, **kwargs):
"Returns a new QuerySet instance with NOT (args) ANDed to the existing set."
return self._filter_or_exclude(QNot, *args, **kwargs)
def _filter_or_exclude(self, qtype, *args, **kwargs):
def _filter_or_exclude(self, mapper, *args, **kwargs):
# mapper is a callable used to transform Q objects,
# or None for identity transform
if mapper is None:
mapper = lambda x: x
if len(args) > 0 or len(kwargs) > 0:
assert self._limit is None and self._offset is None, \
"Cannot filter a query once a slice has been taken."
clone = self._clone()
if len(kwargs) > 0:
clone._filters = clone._filters & qtype(**kwargs)
clone._filters = clone._filters & mapper(Q(**kwargs))
if len(args) > 0:
clone._filters = clone._filters & reduce(operator.and_, args)
clone._filters = clone._filters & reduce(operator.and_, map(mapper, args))
return clone
def complex_filter(self, filter_obj):
@ -314,7 +322,7 @@ class QuerySet(object):
if hasattr(filter_obj, 'get_sql'):
return self._filter_or_exclude(None, filter_obj)
else:
return self._filter_or_exclude(Q, **filter_obj)
return self._filter_or_exclude(None, **filter_obj)
def select_related(self, true_or_false=True):
"Returns a new QuerySet instance with '_select_related' modified."
@ -578,9 +586,12 @@ class Q(object):
class QNot(Q):
"Encapsulates NOT (...) queries as objects"
def __init__(self, q):
"Creates a negation of the q object passed in."
self.q = q
def get_sql(self, opts):
tables, joins, where, params = super(QNot, self).get_sql(opts)
tables, joins, where, params = self.q.get_sql(opts)
where2 = ['(NOT (%s))' % " AND ".join(where)]
return tables, joins, where2, params

View File

@ -34,7 +34,6 @@ def object_list(request, queryset, paginate_by=None, allow_empty=False,
number of objects, total
"""
queryset = queryset._clone()
model = queryset.model
if paginate_by:
paginator = ObjectPaginator(queryset, paginate_by)
page = request.GET.get('page', 1)
@ -71,6 +70,7 @@ def object_list(request, queryset, paginate_by=None, allow_empty=False,
else:
c[key] = value
if not template_name:
model = queryset.model
template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name)
return HttpResponse(t.render(c))

View File

@ -209,12 +209,12 @@ The per-site cache
==================
Once the cache is set up, the simplest way to use caching is to cache your
entire site. Just add ``django.middleware.cache.CacheMiddleware`` to your
entire site. Just add ``'django.middleware.cache.CacheMiddleware'`` to your
``MIDDLEWARE_CLASSES`` setting, as in this example::
MIDDLEWARE_CLASSES = (
"django.middleware.cache.CacheMiddleware",
"django.middleware.common.CommonMiddleware",
'django.middleware.cache.CacheMiddleware',
'django.middleware.common.CommonMiddleware',
)
(The order of ``MIDDLEWARE_CLASSES`` matters. See "Order of MIDDLEWARE_CLASSES"

View File

@ -17,7 +17,7 @@ middleware into your list of installed middleware.
How to use it
=============
Add the middleware ``"django.contrib.csrf.middleware.CsrfMiddleware"`` to
Add the middleware ``'django.contrib.csrf.middleware.CsrfMiddleware'`` to
your list of middleware classes, ``MIDDLEWARE_CLASSES``. It needs to process
the response after the SessionMiddleware, so must come before it in the
list. It also must process the response before things like compression

View File

@ -23,10 +23,10 @@ name. For example, here's the default ``MIDDLEWARE_CLASSES`` created by
``django-admin.py startproject``::
MIDDLEWARE_CLASSES = (
"django.middleware.common.CommonMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.middleware.doc.XViewMiddleware",
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
)
Django applies middleware in the order it's defined in ``MIDDLEWARE_CLASSES``,

View File

@ -14,7 +14,7 @@ Sessions are implemented via middleware_.
Turn session functionality on and off by editing the ``MIDDLEWARE_CLASSES``
setting. To activate sessions, make sure ``MIDDLEWARE_CLASSES`` contains
``"django.contrib.sessions.middleware.SessionMiddleware"``.
``'django.contrib.sessions.middleware.SessionMiddleware'``.
The default ``settings.py`` created by ``django-admin.py startproject`` has
``SessionMiddleware`` activated.

View File

@ -308,4 +308,4 @@ Here's how Django uses the sites framework:
.. _redirects framework: http://www.djangoproject.com/documentation/redirects/
.. _flatpages framework: http://www.djangoproject.com/documentation/flatpages/
.. _syndication framework: http://www.djangoproject.com/documentation/syndication/
.. _authentication framework: http://www.djangoproject.com/documentation/syndication/
.. _authentication framework: http://www.djangoproject.com/documentation/authentication/

View File

@ -784,27 +784,23 @@ In Python 2.4, the decorator syntax also works::
Inclusion tags
~~~~~~~~~~~~~~
Another type of template tag that is sometimes useful is when you want to
display some data that is computed at render time in a template fragment. For
example, in Django's admin interface, there is a line of buttons along the
bottom of the `create/edit record` screen. These buttons always look the same,
but the link targets change depending upon the object being edited. So they
are a perfect example for using a small template that is filled in with
details from the current object. To save typing, it would also be nice if we
could wrap this whole display up in a single tag (in the admin templates this
is the ``submit_row`` tag).
Another common type of template tag is the type that displays some data by
rendering *another* template. For example, Django's admin interface uses custom
template tags to display the buttons along the botton of the "add/change" form
pages. Those buttons always look the same, but the link targets change depending
on the object being edited -- so they're a perfect case for using a small
template that is filled with details from the current object. (In the admin's
case, this is the ``submit_row`` tag.)
We call these sorts of tags `inclusion tags`. In your template, you pass in
any appropriate arguments and the tag uses those arguments, together with the
current context to render a template and include the result in the output.
These sorts of tags are called `inclusion tags`.
Writing inclusion tags is probably best demonstrated by example. We will write
a tag that outputs a list of choices for a Poll object, such as was created in
the tutorials_. We will use this tag like this::
Writing inclusion tags is probably best demonstrated by example. Let's write a
tag that outputs a list of choices for a given ``Poll`` object, such as was
created in the tutorials_. We'll use the tag like this::
{{ show_results poll }}
{% show_results poll %}
and the output will be something like this::
...and the output will be something like this::
<ul>
<li>First choice</li>
@ -812,21 +808,18 @@ and the output will be something like this::
<li>Third choice</li>
</ul>
First, we define the function which takes the argument and produces a
dictionary of data for the result. The important point here is we only need to
return a dictionary, not anything more complex. This will be used to substitue
for values in the template fragment, just as when templates are used
elsewhere.
::
First, define the function that takes the argument and produces a dictionary of
data for the result. The important point here is we only need to return a
dictionary, not anything more complex. This will be used as a template context
for the template fragment. Example::
def show_results(poll):
choices = poll.choice_set.all()
return {'choices': choices}
We also need to create the template that is used to render the output. This
template is a fixed feature of the tag: the tag writer specifies it, not the
template designer. In our case, the template is very simple::
Next, create the template used to render the tag's output. This template is a
fixed feature of the tag: the tag writer specifies it, not the template
designer. Following our example, the template is very simple::
<ul>
{% for choice in choices %}
@ -834,50 +827,33 @@ template designer. In our case, the template is very simple::
{% endfor %}
</ul>
Now we can create the inclusion tag. Suppose the above template is in a file
called ``results.html`` in a directory that is searched by the template
loader. We register our new tag similarly to a normal tag.
::
Now, create and register the inclusion tag by calling the ``inclusion_tag()``
method on a ``Library`` object. Following our example, if the above template is
in a file called ``results.html`` in a directory that's searched by the template
loader, we'd register the tag like this::
# Here, register is a django.template.Library instance, as before
register.inclusion_tag('results.html')(show_results)
As always, Python 2.4 decorator syntax works as well, so we could have
written
::
written::
@inclusion_tag('results.html')
def show_results(poll):
...
when first creating the function.
...when first creating the function.
In some cases, an inclusion tag might require a large number of arguments to
display itself properly. In essence, it would depend largely on the current
context it was being rendered with. We can make these sorts of tags easier to
write by telling the ``inclusion_tag`` function that the whole context
should be passed in as an argument to the function. This will be done
invisibly as far as the template tag user is concerned: they will not need to
do anything to pass in the context.
Sometimes, your inclusion tags might require a large number of arguments,
making it a pain for template authors to pass in all the arguments and remember
their order. To solve this, Django provides a ``takes_context`` option for
inclusion tags. If you specify ``takes_context`` in creating a template tag,
the tag will have no required arguments, and the underlying Python function
will have one argument -- the template context as of when the tag was called.
For example, suppose we are writing an inclusion tag that will always be used
in a context that contains ``home_link`` and ``home_title`` variables that
point back to the main page. We can write a tag that is used like this::
{{ jump_link }}
and renders this::
Jump directly to <a href="http://example.com/home">Home</a>
The tag function is almost as simple as before. This time it takes no
arguments except the ``context`` (and the parameter `must` be called
``context`` in this case; the special parameter named is used internally by
Django to fill in the values correctly).
::
For example, say you're writing an inclusion tag that will always be used in a
context that contains ``home_link`` and ``home_title`` variables that point
back to the main page. Here's what the Python function would look like::
# The first argument *must* be called "context" here.
def jump_link(context):
@ -885,19 +861,28 @@ Django to fill in the values correctly).
'link': context['home_link'],
'title': context['home_title'],
}
# Register the custom tag as an inclusion tag with takes_context=True.
register.inclusion_tag('link.html', takes_context=True)(jump_link)
Our template is very simple again::
(Note that the first parameter to the function *must* be called ``context``.)
In that ``register.inclusion_tag()`` line, we specified ``takes_context=True``
and the name of the template. Here's what the template ``link.html`` might look
like::
Jump directly to <a href="{{ link }}">{{ title }}</a>.
Assuming the template is in a file called ``link.html``, we register this new
tag as follows::
Then, any time you want to use that custom tag, load its library and call it
without any arguments, like so::
register.inclusion_tag('link.html', takes_context = True)(jump_link)
{% jump_link %}
The ``takes_context`` parameter here defaults to *False*. When it is set to
*True*, our tag is passed the implicit context as in this example. That is the
only difference between this case and our previous use of ``inclusion_tag``.
Note that when you're using ``takes_context=True``, there's no need to pass
arguments to the template tag. It automatically gets access to the context.
The ``takes_context`` parameter defaults to ``False``. When it's set to *True*,
the tag is passed the context object, as in this example. That's the only
difference between this case and the previous ``inclusion_tag`` example.
.. _tutorials: http://www.djangoproject.com/documentation/tutorial1/#creating-models

View File

@ -32,10 +32,10 @@ To activate this feature, just add the ``TransactionMiddleware`` middleware to
your ``MIDDLEWARE_CLASSES`` setting::
MIDDLEWARE_CLASSES = (
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.cache.CacheMiddleware",
"django.middleware.transaction.TransactionMiddleware",
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.CacheMiddleware',
'django.middleware.transaction.TransactionMiddleware',
)
The order is quite important. The transaction middleware applies not only to

View File

@ -284,8 +284,8 @@ Here's what it looks like at this point:
:alt: Polls change list page
:target: http://media.djangoproject.com/img/doc/tutorial/admin04.png
By default, Django displays the ``repr()`` of each object. But it'd be more
helpful if we could display individual fields. To do that, use the
By default, Django displays the ``str()`` of each object. But sometimes it'd
be more helpful if we could display individual fields. To do that, use the
``list_display`` option, which is a tuple of field names to display, as columns,
on the change list page for the object::

View File

@ -22,8 +22,10 @@ setup(
'locale/el/LC_MESSAGES/*',
'locale/en/LC_MESSAGES/*',
'locale/es/LC_MESSAGES/*',
'locale/es_AR/LC_MESSAGES/*',
'locale/fr/LC_MESSAGES/*',
'locale/gl/LC_MESSAGES/*',
'locale/hu/LC_MESSAGES/*',
'locale/he/LC_MESSAGES/*',
'locale/is/LC_MESSAGES/*',
'locale/it/LC_MESSAGES/*',

View File

@ -283,6 +283,16 @@ Traceback (most recent call last):
...
AssertionError: Cannot combine queries once a slice has been taken.
# Negative slices are not supported, due to database constraints.
# (hint: inverting your ordering might do what you need).
>>> Article.objects.all()[-1]
Traceback (most recent call last):
...
AssertionError: Negative indexing is not supported.
>>> Article.objects.all()[0:-5]
Traceback (most recent call last):
...
AssertionError: Negative indexing is not supported.
# An Article instance doesn't have access to the "objects" attribute.
# That's only available on the class.

View File

@ -89,6 +89,10 @@ Hello and goodbye
>>> Article.objects.filter(Q(headline__startswith='Hello')).in_bulk([1,2])
{1: Hello}
# Demonstrating exclude with a Q object
>>> Article.objects.exclude(Q(headline__startswith='Hello'))
[Goodbye]
# The 'complex_filter' method supports framework features such as
# 'limit_choices_to' which normally take a single dictionary of lookup arguments
# but need to support arbitrary queries via Q objects too.

View File

@ -56,6 +56,10 @@ API_TESTS = """
>>> Article.objects.order_by('headline')[1:3]
[Article 2, Article 3]
# Getting a single item should work too:
>>> Article.objects.all()[0]
Article 4
# Use '?' to order randomly. (We're using [...] in the output to indicate we
# don't know what order the output will be in.
>>> Article.objects.order_by('?')

View File

@ -20,6 +20,17 @@ 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.flatpages',
'django.contrib.redirects',
'django.contrib.sessions',
'django.contrib.sites',
]
def get_test_models():
return [f for f in os.listdir(MODEL_TEST_DIR) if not f.startswith('__init__') and not f.startswith('.')]
@ -78,7 +89,7 @@ class TestRunner:
settings.INSTALLED_APPS
# Manually set INSTALLED_APPS to point to the test models.
settings.INSTALLED_APPS = [MODEL_TESTS_DIR_NAME + '.' + a for a in get_test_models()]
settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS + [MODEL_TESTS_DIR_NAME + '.' + a for a in get_test_models()]
# Manually set DEBUG = False.
settings.DEBUG = False