diff options
68 files changed, 10763 insertions, 3072 deletions
diff --git a/django/bin/validate.py b/django/bin/validate.py index 220c173edc..9e59fe7823 100644 --- a/django/bin/validate.py +++ b/django/bin/validate.py @@ -16,19 +16,19 @@ def validate_class(klass): assert isinstance(f.rel, meta.ManyToMany), \ "ManyToManyField %s should have 'rel' set to a ManyToMany instance." % f.name # Inline related objects. - for rel_opts, rel_field in opts.get_inline_related_objects(): - assert len([f for f in rel_opts.fields if f.core]) > 0, \ + for related in opts.get_followed_related_objects(): + assert len([f for f in related.opts.fields if f.core]) > 0, \ "At least one field in %s should have core=True, because it's being edited inline by %s." % \ - (rel_opts.object_name, opts.object_name) + (related.opts.object_name, opts.object_name) # All related objects. related_apps_seen = [] - for rel_opts, rel_field in opts.get_all_related_objects(): - if rel_opts in related_apps_seen: - assert rel_field.rel.related_name is not None, \ + for related in opts.get_all_related_objects(): + if related.opts in related_apps_seen: + assert related.field.rel.related_name is not None, \ "Relationship in field %s.%s needs to set 'related_name' because more than one" \ " %s object is referenced in %s." % \ - (rel_opts.object_name, rel_field.name, opts.object_name, rel_opts.object_name) - related_apps_seen.append(rel_opts) + (related.opts.object_name, related.field.name, opts.object_name, rel_opts.object_name) + related_apps_seen.append(related.opts) # Etc. if opts.admin is not None: assert opts.admin.ordering or opts.ordering, \ diff --git a/django/conf/locale/bn/LC_MESSAGES/django.mo b/django/conf/locale/bn/LC_MESSAGES/django.mo Binary files differindex 3624f8afe2..f8d4170995 100644 --- a/django/conf/locale/bn/LC_MESSAGES/django.mo +++ b/django/conf/locale/bn/LC_MESSAGES/django.mo diff --git a/django/conf/locale/bn/LC_MESSAGES/django.po b/django/conf/locale/bn/LC_MESSAGES/django.po index 632a634f13..ff756466d9 100644 --- a/django/conf/locale/bn/LC_MESSAGES/django.po +++ b/django/conf/locale/bn/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Django CVS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" "PO-Revision-Date: 2005-11-12 20:05+0530\n" "Last-Translator: Baishampayan Ghose <b.ghose@gnu.org.in>\n" "Language-Team: Ankur Bangla <core@bengalinux.org>\n" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "সোমবার" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "নভে." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "কাজের সময়" @@ -306,6 +352,134 @@ msgstr "কার্যবিবরণী এন্ট্রি" msgid "log entries" msgstr "কার্যবিবরণী এন্ট্রি সমুহ" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "প্রবেশ করুন" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "জ্যাঙ্গো পরিচালনা" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "যোগ করুন" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "পরিবর্তন" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "পরিবর্তন" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "পাসওয়ার্ড পরিবর্তন করুন" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,18 +556,72 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "যোগ করুন" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "যোগ করুন" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "পরিবর্তন" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "আপনার কোন কিছু সম্পাদনা করতে অনুমতি নেই।" + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "সাম্প্রতিক কাজ" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "আমার কাজ" + +#: contrib/admin/templates/admin/index.html:56 +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 "সার্ভার ত্রুটি (৫০০)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "সার্ভার ত্রুটি<em>(৫০০)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"একটি ত্রুটি আছে। এইটি স্থান পরিচালককে ই-মেল দ্বারা প্রতিবেদন করা হয়েছে এবং খুব " +"তাড়াতাড়ি মেরামত করা হবে। আপনার ধৈর্য্যের জন্য ধন্যবাদ।" + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "ইতিহাস" @@ -429,59 +657,6 @@ msgstr "জ্যাঙ্গো স্থান অ্যাডমিন" msgid "Django administration" msgstr "জ্যাঙ্গো পরিচালনা" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "সার্ভার ত্রুটি" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "সার্ভার ত্রুটি (৫০০)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "সার্ভার ত্রুটি<em>(৫০০)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"একটি ত্রুটি আছে। এইটি স্থান পরিচালককে ই-মেল দ্বারা প্রতিবেদন করা হয়েছে এবং খুব " -"তাড়াতাড়ি মেরামত করা হবে। আপনার ধৈর্য্যের জন্য ধন্যবাদ।" - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "পাতা খুঁজে পাওয়া গেল না" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "আমরা দুঃখিত, কিন্তু আবেদনকৃত পাতা খুঁজে পাওয়া গেল না।" - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "যোগ করুন" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "পরিবর্তন" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "আপনার কোন কিছু সম্পাদনা করতে অনুমতি নেই।" - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "সাম্প্রতিক কাজ" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "আমার কাজ" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "কিছুই পাওয়া যাচ্ছে না" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "ব্যবহারকারীর নাম:" @@ -494,21 +669,32 @@ msgstr "পাসওয়ার্ড:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "আপনি কি <a href=\"/password_reset/\">আপনার পাসওয়ার্ড ভুলে গেছেন</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "প্রবেশ করুন" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "পাতা খুঁজে পাওয়া গেল না" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -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/base.html:23 -msgid "Change password" -msgstr "পাসওয়ার্ড পরিবর্তন করুন" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "বাইরে যান" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -533,6 +719,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "হ্যাঁ, আমি নিশ্চিত" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "স্বাগত," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "পাসওয়ার্ড পরিবর্তন করুন" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "বাইরে যান" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "সক্রিয়" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -647,6 +871,66 @@ msgstr "আমাদের স্থান ব্যবহার করার msgid "The %(site_name)s team" msgstr "%(site_name)s দল" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "রিডাইরেক্ট করা" @@ -1028,83 +1312,125 @@ msgstr "গুরুত্বপূর্ণ তারিখ" msgid "Message" msgstr "বার্তা" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "বাংলা" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "চেক" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "ওয়েল্শ" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "স্প্যানিশ" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "জার্মান" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "ইংরেজী" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "স্প্যানিশ" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "ফরাসী" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "গ্যালিসিয়" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "ইতালিয়" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "নরওয়েজিয়" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "ব্রাজিলীয়" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "রোমানীয়" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "রুশ" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "স্লোভাক" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "সার্বিয়ান" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "সরলীকৃত চীনা" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "এই ক্ষেত্রেটি অবৈধ।" + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "ছোটহাতের অক্ষর এখানে ঢোকাতে পারবেন না।" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "একটি গোটা সংখ্যা ঢোকান।" + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "একটি গোটা সংখ্যা ঢোকান।" + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "একটি গোটা সংখ্যা ঢোকান।" + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "এই মানটি শুধু মাত্র অক্ষর, অংক, এবং আন্ডারস্কোর (_) হতে পারবে।" @@ -1366,16 +1692,40 @@ msgstr "" "\"%(attr)s\"বৈশিষ্ট্যয় লাইন %(line)s একটি অবৈধ মান আছে । (\"%(start)s\"এর সঙ্গে " "লাইন আরম্ভ।)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "দয়া করে একটি বৈধ IP ঠিকানা ঢোকান।" + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "একাধিক আই.ডি.কমার দ্বারা আলাদা করুন।" -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "একের চেয়ে বেশি নির্বাচন করতে \"Control\" অথবা ম্যাক-এ \"Command\" চেপে ধরে " "রাখুন।" -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "একটি MD5 হ্যাশ ব্যাবহার করুন -- পরিস্কার পাসওয়ার্ড না যেন।" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "একটি বৈধ ই-মেল ঠিকানা ঢোকান।" + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "অভ্যন্তরস্থ বস্তু" diff --git a/django/conf/locale/cs/LC_MESSAGES/django.mo b/django/conf/locale/cs/LC_MESSAGES/django.mo Binary files differindex 75ef21d976..42d1fa64cc 100644 --- a/django/conf/locale/cs/LC_MESSAGES/django.mo +++ b/django/conf/locale/cs/LC_MESSAGES/django.mo diff --git a/django/conf/locale/cs/LC_MESSAGES/django.po b/django/conf/locale/cs/LC_MESSAGES/django.po index a745f1e752..c595316209 100644 --- a/django/conf/locale/cs/LC_MESSAGES/django.po +++ b/django/conf/locale/cs/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Django Czech translation\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" -"PO-Revision-Date: 2005-11-14 15:34+0100\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" +"PO-Revision-Date: 2005-11-18 14:33+0100\n" "Last-Translator: Radek Svarz <translate@svarz.cz>\n" "Language-Team: Czech\n" "MIME-Version: 1.0\n" @@ -23,7 +23,7 @@ msgstr "" #: contrib/comments/models/comments.py:161 #, fuzzy msgid "object ID" -msgstr "object id" +msgstr "Ukázat id objektu" #: contrib/comments/models/comments.py:9 msgid "headline" @@ -82,9 +82,8 @@ msgid "is public" msgstr "" #: contrib/comments/models/comments.py:26 contrib/admin/views/doc.py:274 -#, fuzzy msgid "IP address" -msgstr "e-mailová adresa" +msgstr "IP adresa" #: contrib/comments/models/comments.py:27 msgid "is removed" @@ -129,7 +128,7 @@ msgstr "křestní jméno" #: contrib/comments/models/comments.py:166 #, fuzzy msgid "ip address" -msgstr "e-mailová adresa" +msgstr "IP adresa" #: contrib/comments/models/comments.py:168 msgid "approved by staff" @@ -188,12 +187,15 @@ msgid "Flag by %r" msgstr "" #: contrib/comments/models/comments.py:271 -#, python-format +#, fuzzy, python-format msgid "" "This comment was flagged by %(user)s:\n" "\n" "%(text)s" msgstr "" +"Tento komentář byl odevzdán povrchním uživatelem:\n" +"\n" +"%(text)s" #: contrib/comments/models/comments.py:278 #, fuzzy @@ -215,24 +217,25 @@ msgstr "" #: contrib/comments/views/karma.py:18 msgid "Anonymous users cannot vote" -msgstr "" +msgstr "Anonymní uživatelé nemohou hlasovat" #: contrib/comments/views/karma.py:22 -#, fuzzy msgid "Invalid comment ID" -msgstr "povolit komentáře" +msgstr "Neplatné ID komentáře" #: contrib/comments/views/karma.py:24 msgid "No voting for yourself" -msgstr "" +msgstr "Nelze hlasovat pro sebe" #: contrib/comments/views/comments.py:25 msgid "" "This rating is required because you've entered at least one other rating." msgstr "" +"Toto hodnocení je povinné, protože jste zadal(a) alespoň jedno jiné " +"hodnocení." #: contrib/comments/views/comments.py:109 -#, python-format +#, fuzzy, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " "comment:\n" @@ -244,8 +247,20 @@ msgid_plural "" "\n" "%(text)s" msgstr[0] "" +"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %" +"(count)s komentářů:\n" +"\n" +"%(text)s" msgstr[1] "" +"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %" +"(count)s komentářů:\n" +"\n" +"%(text)s" msgstr[2] "" +"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %" +"(count)s komentářů:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:114 #, python-format @@ -254,21 +269,24 @@ msgid "" "\n" "%(text)s" msgstr "" +"Tento komentář byl odevzdán povrchním uživatelem:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:186 #: contrib/comments/views/comments.py:277 msgid "Only POSTs are allowed" -msgstr "" +msgstr "Je povolená pouze metoda POST" #: contrib/comments/views/comments.py:190 #: contrib/comments/views/comments.py:281 msgid "One or more of the required fields wasn't submitted" -msgstr "" +msgstr "Jedno nebo více povinných polí nebylo vyplněné" #: contrib/comments/views/comments.py:194 #: contrib/comments/views/comments.py:283 msgid "Somebody tampered with the comment form (security violation)" -msgstr "" +msgstr "Někdo falšoval formulář komentáře (bezpečnostní narušení)" #: contrib/comments/views/comments.py:204 #: contrib/comments/views/comments.py:289 @@ -276,12 +294,62 @@ msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " "invalid" msgstr "" +"Formulář komentáře měl neplatný parametr 'target' -- ID objektu nebylo platné" #: contrib/comments/views/comments.py:254 #: contrib/comments/views/comments.py:318 msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "Formulář komentáře neobsahoval buď 'preview' nebo 'post'" + +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" +"<h3>Od %s:</h3>\n" +"<ul>\n" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "Vše" + +#: contrib/admin/filterspecs.py:100 +#, fuzzy +msgid "Any date" +msgstr "Všechna data" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Pondělí" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" msgstr "" +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "List." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "Neznámé" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "čas akce" @@ -310,69 +378,198 @@ msgstr "log záznam" msgid "log entries" msgstr "log záznamy" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "Všechna data" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Přihlášení" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Prosíme, znovu se přihlašte, Vaše sezení vypršelo. Nemusíte se obávat, Vaše " +"podání je uloženo." + +#: contrib/admin/views/decorators.py:63 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Vypadá to, že Váš prohlížeč není nastaven, aby akceptoval cookies. Prosíme, " +"zapněte cookies, obnovte tuto stránku a zkuste znovu." + +#: contrib/admin/views/decorators.py:77 +msgid "Usernames cannot contain the '@' character." +msgstr "Uživatelská jména nemohou obsahovat znak '@'." + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Vaše e-mailová adresa není Vaše uživatelské jméno. Zkuste místo toho '%s'." + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Django správa" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "Vybrat %s" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "Vyberte %s pro změnu" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně přidán." + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "Můžete to opět upravit níže." + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "Můžete přidat další %s níže." + +#: contrib/admin/views/main.py:451 +#, python-format +msgid "Add %s" +msgstr "%s: přidat" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "Záznam %s byl přidán." + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "a" + +#: contrib/admin/views/main.py:469 +#, python-format +msgid "Changed %s." +msgstr "%s: změněno" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "Záznam %s byl smazán." + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "Nebyly změněny žádné pole." + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)s \"%(obj)s\" byl úspěšně změněn." + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" +"The %(name)s \"%(obj)s\" byl úspěšně přidán. Můžete to opět upravit níže." + +#: contrib/admin/views/main.py:546 +#, python-format +msgid "Change %s" +msgstr "%s: změnit" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Jedno nebo více %(fieldname)s z %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Jedno nebo více %(fieldname)s z %(name)s:" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně smazán." + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "Jste si jist(á)?" + +#: contrib/admin/views/main.py:678 +#, python-format +msgid "Change history: %s" +msgstr "Historie změn: %s" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 msgid "Integer" -msgstr "" +msgstr "Celé číslo" #: contrib/admin/views/doc.py:263 msgid "Boolean (Either True or False)" -msgstr "" +msgstr "Boolean (buď Ano (True), nebo Ne (False))" #: contrib/admin/views/doc.py:264 #, python-format msgid "String (up to %(maxlength)s)" -msgstr "" +msgstr "Text (maximálně %(maxlength)s znaků)" #: contrib/admin/views/doc.py:265 msgid "Comma-separated integers" -msgstr "" +msgstr "Celá čísla oddělená čárkou" #: contrib/admin/views/doc.py:266 -#, fuzzy msgid "Date (without time)" -msgstr "čas akce" +msgstr "Datum (bez času)" #: contrib/admin/views/doc.py:267 -#, fuzzy msgid "Date (with time)" -msgstr "Datum/čas" +msgstr "Datum (s časem)" #: contrib/admin/views/doc.py:268 -#, fuzzy msgid "E-mail address" -msgstr "E-mailová adresa:" +msgstr "E-mailová adresa" #: contrib/admin/views/doc.py:269 contrib/admin/views/doc.py:272 msgid "File path" -msgstr "" +msgstr "Cesta k souboru" #: contrib/admin/views/doc.py:270 -#, fuzzy msgid "Decimal number" -msgstr "Prosinec" +msgstr "Desetiné číslo" #: contrib/admin/views/doc.py:276 msgid "Boolean (Either True, False or None)" -msgstr "" +msgstr "Boolean (buď Ano (True), Ne (False), nebo Nic (None))" #: contrib/admin/views/doc.py:277 -#, fuzzy msgid "Phone number" -msgstr "Vložte celé číslo." +msgstr "Telefonní číslo" #: contrib/admin/views/doc.py:280 msgid "String (up to 50)" -msgstr "" +msgstr "Text (max. 50 znaků)" #: contrib/admin/views/doc.py:282 msgid "Text" -msgstr "" +msgstr "Text" #: contrib/admin/views/doc.py:283 msgid "Time" -msgstr "" +msgstr "Čas" #: contrib/admin/views/doc.py:284 contrib/flatpages/models/flatpages.py:6 msgid "URL" @@ -380,24 +577,78 @@ msgstr "URL" #: contrib/admin/views/doc.py:285 msgid "U.S. state (two uppercase letters)" -msgstr "" +msgstr "Stát US (2 velké znaky)" #: contrib/admin/views/doc.py:286 msgid "XML text" -msgstr "" +msgstr "text XML" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Domů" +#: contrib/admin/templates/admin/change_list.html:10 +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s: přidat" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Přidat" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Změnit" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Nemáte oprávnění nic měnit." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Poslední akce" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Mé akce" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Nic" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Chyba serveru" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Chyba serveru (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Chyba serveru <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a " +"měla by být brzy odstraněna. Děkujeme za trpělivost." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Historie" @@ -433,59 +684,6 @@ msgstr "Django správa webu" msgid "Django administration" msgstr "Django správa" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Chyba serveru" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Chyba serveru (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Chyba serveru <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a " -"měla by být brzy odstraněna. Děkujeme za trpělivost." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Stránka nenalezena" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Je nám líto, ale vyžádaná stránka nebyla nalezena." - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Přidat" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Změnit" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Nemáte oprávnění nic měnit." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Poslední akce" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Mé akce" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Nic" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Uživatelské jméno:" @@ -498,24 +696,36 @@ msgstr "Heslo:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "<a href=\"/password_reset/\">Zapomněl(a) jste své heslo?</a>" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Přihlášení" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Stránka nenalezena" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Vítejte," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Je nám líto, ale vyžádaná stránka nebyla nalezena." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Změnit heslo" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "Pohled na stránku" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Odhlásit se" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Prosíme, odstraňte chybu uvedenou níže." +msgstr[1] "Prosíme, odstraňte chyby uvedené níže." +msgstr[2] "Prosíme, odstraňte chyby uvedené níže." + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "Objednávání" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "Objednávka:" #: contrib/admin/templates/admin/delete_confirmation.html:7 -#, 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 " @@ -537,6 +747,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Ano, jsem si jist" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Vítejte," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Změnit heslo" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Odhlásit se" + +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Smazat" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Uložit jako nové" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Uložit a přidat další" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Uložit a pokračovat v úpravách" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Uložit" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +msgstr "Od %(title)s" + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -651,6 +898,80 @@ msgstr "Děkujeme za používání našeho webu!" msgid "The %(site_name)s team" msgstr "Tým %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentace" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklety" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Dokumentační bookmarklety" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" +"\n" +"<p class=\"help\">Pro nainstalování bookmarkletů, přetáhněte odkaz na Vaše " +"záložky (oblíbené),\n" +"nebo klikněte pravým tlačítkem na odkaz a přidejte ho k Vašim záložkám " +"(oblíbeným). Nyní můžete\n" +"zvolit bookmarklet z libovolné stránky. Poznámka: Některé tyto\n" +"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je " +"nastaven jako\n" +"\"interní\" (promluvte si s Vaším administrátorem, jestli si nejste jisti,\n" +"zda je Váš počítač \"interní\").</p>\n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Dokumentace pro tuto stránku" + +#: 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 "" +"Z libovolné stránky otevře dokumentaci pro pohled, který vygeneroval tuto " +"stránku." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Ukázat id objektu" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +#, fuzzy +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Ukáže content-type a unikátní ID pro stránky, které reprezentují jeden " +"objekt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Upravit tento objekt (ve stávajícím okně)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "Přepne do admin stránky pro stránky, které reprezentují jeden objekt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Upravit tento objekt (ve novém okně)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "Jako výše, ale otevře admin stránky v novém okně." + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "přesměrovat z" @@ -705,7 +1026,6 @@ msgid "template name" msgstr "jméno šablony" #: contrib/flatpages/models/flatpages.py:12 -#, fuzzy msgid "" "Example: 'flatpages/contact_page'. If this isn't provided, the system will " "use 'flatpages/default'." @@ -993,9 +1313,8 @@ msgid "Use '[algo]$[salt]$[hexdigest]" msgstr "" #: models/auth.py:38 -#, fuzzy msgid "staff status" -msgstr "povolí přístup do administrativní aplikace" +msgstr "administrativní přístup " #: models/auth.py:38 msgid "Designates whether the user can log into this admin site." @@ -1041,83 +1360,120 @@ msgstr "Důležitá data" msgid "Message" msgstr "Zpráva" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "Bengálsky" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Česky" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Welšsky" -#: conf/global_settings.py:39 -#, fuzzy +#: conf/global_settings.py:40 msgid "Danish" -msgstr "Španělsky" +msgstr "Dánsky" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Německy" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Anglicky" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Španělsky" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Francouzsky" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galicijsky" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "Islandština" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italsky" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norsky" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brazilsky" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "Rumunsky" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Rusky" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "Slovensky" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Srbsky" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "Švédsky" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Jednoduchá čínština" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "Toto pole je povinné." + +#: core/formfields.py:339 +#, fuzzy, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Ujistěte se, že Váš text má méně, než %s znaků." +msgstr[1] "Ujistěte se, že Váš text má méně, než %s znaků." +msgstr[2] "Ujistěte se, že Váš text má méně, než %s znaků." + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "Zalomení řádky zde nenjsou povolená." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Vyberte platnou volbu. '%(data)s' není mezi %(choices)s." + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "Odevzdaný soubor je prázdný." + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Vložte celé číslo mezi -32,768 a 32,767." + +#: core/formfields.py:668 +msgid "Enter a positive number." +msgstr "Vložte celé kladné číslo." + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Vložte celé číslo mezi 0 a 32,767." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka." @@ -1388,16 +1744,52 @@ msgstr "" "Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s " "\"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "Prosíme, zadejte %s správně." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "%(optname)s s tímto %(fieldname)s již existuje." + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Oddělte více identifikátorů čárkami." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Podržte \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné " "položky." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Použije se MD5 hash -- ne čisté heslo." +#: core/meta/fields.py:511 +msgid "Enter a valid filename." +msgstr "Vložte platný název souboru." + +#: core/meta/fields.py:780 +#, 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íme, vložte platná %(self)s ID. Hodnota %(value)r není platná." +msgstr[1] "" +"Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné." +msgstr[2] "" +"Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné." + +#~ msgid "Error in Template" +#~ msgstr "Chyba v šabloně" + +#~ msgid "" +#~ "\n" +#~ "In template %(name)s, error at line %(line)s:\n" +#~ msgstr "" +#~ "\n" +#~ "V šabloně %(name)s, chyba na řádce %(line)s:\n" + +#, fuzzy +#~ msgid "count" +#~ msgstr "počet" diff --git a/django/conf/locale/cy/LC_MESSAGES/django.mo b/django/conf/locale/cy/LC_MESSAGES/django.mo Binary files differindex da157858a8..99232e2071 100644 --- a/django/conf/locale/cy/LC_MESSAGES/django.mo +++ b/django/conf/locale/cy/LC_MESSAGES/django.mo diff --git a/django/conf/locale/cy/LC_MESSAGES/django.po b/django/conf/locale/cy/LC_MESSAGES/django.po index 9e4d5afc55..1f0c98b412 100644 --- a/django/conf/locale/cy/LC_MESSAGES/django.po +++ b/django/conf/locale/cy/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" "PO-Revision-Date: 2005-11-05 HO:MI+ZONE\n" "Last-Translator: Jason Davies <jason@jasondavies.com>\n" "Language-Team: Cymraeg <cy@li.org>\n" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Dydd Llun" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Tach." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "amser gweithred" @@ -306,6 +352,134 @@ msgstr "cofnod" msgid "log entries" msgstr "cofnodion" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Mewngofnodi" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Gweinyddiad Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Ychwanegu" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Newidio" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Newidio" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Newid cyfrinair" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,18 +556,72 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Adref" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Ychwanegu" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Ychwanegu" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Newidio" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Does genych ddim hawl i olygu unrhywbeth." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Gweithredau Diweddar" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Fy Ngweithredau" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Dim ar gael" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Gwall gweinyddwr" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Gwall gweinyddwr (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Gwall Gweinyddwr <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Mae gwall wedi digwydd. Adroddwyd i weinyddwyr y safle drwy e-bost ac ddylai " +"cael ei drwsio cyn bo hir." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Hanes" @@ -429,59 +657,6 @@ msgstr "Gweinyddiad safle Django" msgid "Django administration" msgstr "Gweinyddiad Django" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Gwall gweinyddwr" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Gwall gweinyddwr (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Gwall Gweinyddwr <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Mae gwall wedi digwydd. Adroddwyd i weinyddwyr y safle drwy e-bost ac ddylai " -"cael ei drwsio cyn bo hir." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Tudalen heb ei ddarganfod" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Mae'n ddrwg gennym, ond nid darganfwyd y dudalen a dymunwyd" - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Ychwanegu" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Newidio" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Does genych ddim hawl i olygu unrhywbeth." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Gweithredau Diweddar" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Fy Ngweithredau" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Dim ar gael" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Enw defnyddiwr:" @@ -494,21 +669,32 @@ msgstr "Cyfrinair:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Ydych wedi <a href=\"/password_reset/\">anghofio eich cyfrinair</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Mewngofnodi" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Tudalen heb ei ddarganfod" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Croeso," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Mae'n ddrwg gennym, ond nid darganfwyd y dudalen a dymunwyd" -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Newid cyfrinair" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Allgofnodi" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -533,6 +719,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Yndw, rwy'n sicr" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Croeso," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Newid cyfrinair" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Allgofnodi" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "gweithredol" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -645,6 +869,66 @@ msgstr "Diolch am ddefnyddio ein safle!" msgid "The %(site_name)s team" msgstr "Y tîm %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "id gwrthrych" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "ailgyfeirio o" @@ -1031,83 +1315,125 @@ msgstr "Dyddiadau pwysig" msgid "Message" msgstr "Neges" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tsieceg" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Cymraeg" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Spaeneg" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Almaeneg" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Saesneg" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spaeneg" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Ffrangeg" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galisieg" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Eidaleg" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norwyeg" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brasileg" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Rwsieg" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Serbeg" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Tsieinëeg Symledig" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Mae'r faes yma yn annilydd." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Ni chaniateir lythrennau bach yma." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Rhowch rhif cyfan." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Rhowch rhif cyfan." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Rhowch rhif cyfan." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Rhaid i'r werth yma cynnwys lythrennau, rhifau ac tanlinellau yn unig." @@ -1375,15 +1701,39 @@ msgstr "" "Mae gan y priodoledd \"%(attr)s\" ar lein %(line)s gwerth annilydd. (Linell " "yn ddechrau â \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Rhowch cyfeiriad IP dilys, os gwelwch yn dda." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " Gwahanwch mwy nag un ID gyda atalnodau." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Gafaelwch lawr \"Control\", neu \"Command\" ar Fac, i ddewis mwy nag un." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Defnyddiwch stwnsh MD5 -- nid y gyfrinair crai." +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Rhowch cyfeiriad e-bost ddilys." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "cynnwys" diff --git a/django/conf/locale/da/LC_MESSAGES/django.mo b/django/conf/locale/da/LC_MESSAGES/django.mo Binary files differindex 8fe7ba3886..222fa4af32 100644 --- a/django/conf/locale/da/LC_MESSAGES/django.mo +++ b/django/conf/locale/da/LC_MESSAGES/django.mo diff --git a/django/conf/locale/da/LC_MESSAGES/django.po b/django/conf/locale/da/LC_MESSAGES/django.po index 9e1e8d49e5..1e3b779873 100644 --- a/django/conf/locale/da/LC_MESSAGES/django.po +++ b/django/conf/locale/da/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Morten Bagai <m@bagai.com>\n" "Language-Team: Danish\n" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Mandag" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Nov." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "handlingstid" @@ -306,6 +352,134 @@ msgstr "logmeddelelse" msgid "log entries" msgstr "logmeddelelser" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Log ind" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Django administration" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Tilføj" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Ændre" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Ændre" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Ændre adgangskode" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,18 +556,72 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Hjem" +#: contrib/admin/templates/admin/change_list.html:10 +#, python-format +msgid "Add %(name)s" +msgstr "" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Tilføj" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Ændre" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Du har ikke rettigehed til at foretage ændringer" + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Seneste handlinger" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Mine handlinger" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Ingen tilgængelige" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Serverfejl" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Serverfejl (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Serverfejl <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Der opstod en fejl. Fejlen er rapporteret til site-administratoren via e-" +"mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Historik" @@ -429,59 +657,6 @@ msgstr "Django site administration" msgid "Django administration" msgstr "Django administration" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Serverfejl" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Serverfejl (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Serverfejl <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Der opstod en fejl. Fejlen er rapporteret til site-administratoren via e-" -"mail, og vil blive rettet hurtigst muligt. Tak for din tålmodighed." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Siden blev ikke fundet" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Vi Beklager, men den ønskede side kunne ikke findes" - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Tilføj" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Ændre" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Du har ikke rettigehed til at foretage ændringer" - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Seneste handlinger" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Mine handlinger" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Ingen tilgængelige" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Brugernavn:" @@ -494,21 +669,32 @@ msgstr "Adgangskode:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Har du <a href=\"/password_reset/\">glemt din adgangskode</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Log ind" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Siden blev ikke fundet" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Velkommen" +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Vi Beklager, men den ønskede side kunne ikke findes" -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Ændre adgangskode" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Log ud" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -533,6 +719,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Ja, jeg er sikker" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Velkommen" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Ændre adgangskode" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Log ud" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "aktiv" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -649,6 +873,66 @@ msgstr "Tak, fordi du brugte vores site!" msgid "The %(site_name)s team" msgstr "Med venlig hilsen %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "objekt id" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "omadresser fra" @@ -1035,83 +1319,125 @@ msgstr "Vigtige datoer" msgid "Message" msgstr "Meddelelse" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tjekkisk" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Walisisk" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Spansk" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Tysk" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Engelsk" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spansk" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Fransk" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galicisk" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "Islandsk" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italiensk" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norsk" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brasiliansk" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "Rumænsk" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Russisk" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "Slovakisk" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Serbisk" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "Svensk" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Simpel Kinesisk" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Dette felt er ugyldigt." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Små bogstaver er ikke tilladt her" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Indtast et heltal." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Indtast et heltal." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Indtast et heltal." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Dette felt må kun indeholde bogstaver, tal og understreger." @@ -1375,18 +1701,38 @@ msgstr "" "\"%(attr)s\" attributten på linje $(line)s har en ugyldig værdi. (Linjen " "starter med \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Venlist indtast en gyldig email-adresse." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Adskil id'er med kommaer." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Hold \"Kontrol\", eller \"Æbletasten\" på Mac, nede for at vælge mere end en." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Brug et MD5 hash -- ikke adgangskoden i klartekst" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Indtast en gyldig email-adresse." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" #~ msgid "Traditional Chinese" #~ msgstr "Traditionel Kinesisk" diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo Binary files differindex 4cfc409cb1..72ba0c03ed 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.mo +++ b/django/conf/locale/de/LC_MESSAGES/django.mo diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po index 65428ab2f7..98e308c815 100644 --- a/django/conf/locale/de/LC_MESSAGES/django.po +++ b/django/conf/locale/de/LC_MESSAGES/django.po @@ -7,10 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Django 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-24 19:33+0100\n" -"PO-Revision-Date: 2005-11-06 13:54+0100\n" -"Last-Translator: Lukas Kolbe <lucky@knup.de>\n" -"Language-Team: \n" +"POT-Creation-Date: 2005-11-23 16:48+0100\n" +"PO-Revision-Date: 2005-10-08 00:03+0200\n" +"Last-Translator: Georg Bauer <gb@bofh.ms>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" @@ -77,7 +76,7 @@ msgstr "ist ffentlich" #: contrib/comments/models/comments.py:26 contrib/admin/views/doc.py:274 msgid "IP address" -msgstr "IP Adresse" +msgstr "IP-Adresse" #: contrib/comments/models/comments.py:27 msgid "is removed" @@ -115,7 +114,7 @@ msgid "" msgstr "" "Geschrieben von %(user)s am %(date)s\n" "\n" -"$(comment)s\n" +"%(comment)s\n" "\n" "http://%(domain)s%(url)s" @@ -289,6 +288,52 @@ msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" "Das Kommentarformular wurde nicht mit 'preview' oder 'post' abgeschickt" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" +"<h3>Nach %s:</h3>\n" +"<ul>\n" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "Alle" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "Alle Daten" + +#: contrib/admin/filterspecs.py:101 +msgid "Today" +msgstr "Heute" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "Letzte 7 Tage" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "Diesen Monat" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "Dieses Jahr" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "Ja" + +#: contrib/admin/filterspecs.py:134 +msgid "No" +msgstr "Nein" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "Unbekannt" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "Zeit der Aktion" @@ -317,6 +362,141 @@ msgstr "Logeintrag" msgid "log entries" msgstr "Logeintrge" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "Alle Tage" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Anmelden" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Bitte neu anmelden, da die Session ausgelaufen ist. Keine Angst: die " +"Beitrge wurden gesichert." + +#: contrib/admin/views/decorators.py:63 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Es sieht danach aus, das der Browser keine Cookies akzeptiert. Bitte im " +"Browser Cookies aktivieren und diese Seite neu laden." + +#: contrib/admin/views/decorators.py:77 +msgid "Usernames cannot contain the '@' character." +msgstr "Benutzernamen knnen das Zeichen '@' nicht enthalten." + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Die eMail-Adresse ist nicht der Benutzername. Bitte '%s' stattdessen " +"versuchen." + +#: contrib/admin/views/main.py:50 +msgid "Site administration" +msgstr "Website Verwaltung" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "%s auswhlen" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "%s zur nderung auswhlen" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefgt." + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "Das Element kann jetzt weiter gendert werden." + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "Jetzt kann ein weiteres Element vom Typ %s angelegt werden." + +#: contrib/admin/views/main.py:451 +#, python-format +msgid "Add %s" +msgstr "%s zufgen" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "%s hinzugefgt." + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "und" + +#: contrib/admin/views/main.py:469 +#, python-format +msgid "Changed %s." +msgstr "%s gendert" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "%s gelscht." + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "Keine Felder gendert." + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gendert." + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" +"%(name)s \"%(obj)s\" wurde erfolgreich zugefgt. Das Element kann jetzt " +"gendert werden." + +#: contrib/admin/views/main.py:546 +#, python-format +msgid "Change %s" +msgstr "%s ndern" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Ein oder mehrere %(fieldname)s in %(name)s:" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelscht." + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "Sicher? Ganz sicher?" + +#: contrib/admin/views/main.py:678 +#, python-format +msgid "Change history: %s" +msgstr "nderungsgeschichte: %s" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -388,18 +568,73 @@ msgstr "U.S. Bundesstaat (zwei Grossbuchstaben)" msgid "XML text" msgstr "XML Text" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Start" +#: contrib/admin/templates/admin/change_list.html:10 +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s zufgen" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Zufgen" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "ndern" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Sie haben keine Berechtigung irgendwas zu ndern." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Krzliche Aktionen" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Meine Aktionen" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Keine vorhanden" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Serverfehler" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Serverfehler (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Serverfehler <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Es hat einen Fehler gegeben. Dieser Fehler wurde an die Serververwalter per " +"eMail weitergegeben und sollte bald behoben sein. Vielen Dank fr Ihr " +"Verstndnis." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Geschichte" @@ -435,26 +670,17 @@ msgstr "Django Systemverwaltung" msgid "Django administration" msgstr "Django Verwaltung" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Serverfehler" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Serverfehler (500)" +#: contrib/admin/templates/admin/login.html:15 +msgid "Username:" +msgstr "Benutzername:" -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Serverfehler <em>(500)</em>" +#: contrib/admin/templates/admin/login.html:18 +msgid "Password:" +msgstr "Passwort:" -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Es hat einen Fehler gegeben. Dieser Fehler wurde an die Serververwalter per " -"eMail weitergegeben und sollte bald behoben sein. Vielen Dank fr Ihr " -"Verstndnis." +#: contrib/admin/templates/admin/login.html:20 +msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" +msgstr "Haben Sie <a href=\"/password_reset/\">ihr Passwort vergessen</a>?" #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 @@ -466,57 +692,23 @@ msgid "We're sorry, but the requested page could not be found." msgstr "" "Es tut uns leid, aber die angeforderte Seite kann nicht gefunden werden." -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Hinzufgen" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "ndern" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Sie haben keine Berechtigung irgendetwas zu ndern." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Krzliche Aktionen" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Meine Aktionen" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Keine vorhanden" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "Im Web Anzeigen" -#: contrib/admin/templates/admin/login.html:15 -msgid "Username:" -msgstr "Benutzername:" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Bitte den Fehler korrigieren." +msgstr[1] "Bitte die Fehler korrigieren." -#: contrib/admin/templates/admin/login.html:18 -msgid "Password:" -msgstr "Kennwort:" +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "Sortierung" -#: contrib/admin/templates/admin/login.html:20 -msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" -msgstr "Haben Sie <a href=\"/password_reset/\">ihr Kennwort vergessen</a>?" - -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Anmelden" - -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Willkommen," - -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Kennwort ndern" - -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Abmelden" +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "Reihenfolge:" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -542,6 +734,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Ja, ich bin sicher" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Willkommen," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Passwort ndern" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Abmelden" + +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Lschen" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Als Neu sichern" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Sichern und neu hinzufgen" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Sichern und weiter bearbeiten" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Sichern" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +msgstr " Nach %(title)s " + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -570,9 +799,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 "" -"Sie haben Ihr Kennwort vergessen? Geben Sie bitte Ihre eMail-Adresse ein und " -"wir setzen das Kennwort auf einen neuen Wert und schicken den per eMail an " -"Sie raus." +"Passwort vergessen? Einfach die E-Mail-Adresse eingeben und wir setzen das " +"Passwort auf ein neues und senden das per E-Mail zu." #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "E-mail address:" @@ -593,7 +821,7 @@ msgstr "Erneut Anmelden" #: contrib/admin/templates/registration/password_reset_done.html:6 #: contrib/admin/templates/registration/password_reset_done.html:10 msgid "Password reset successful" -msgstr "Kennwort erfolgreich zurckgesetzt" +msgstr "Erfolgreich Kennwort zurckgesetzt" #: contrib/admin/templates/registration/password_reset_done.html:12 msgid "" @@ -659,6 +887,81 @@ msgstr "Vielen Dank, das Sie unsere Seiten benutzen!" msgid "The %(site_name)s team" msgstr "Das Team von %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentation" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Dokumentations-Bookmarklets" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" +"\n" +"<p class=\"help\">Um Bookmarklets zu installieren mssen diese Links in die\n" +"Browser-Werkzeugleiste gehzogen werden, oder mittels rechter Maustaste in " +"die\n" +"Bookmarks gespeichert werden. Danach knnen die Bookmarklets von jeder " +"Seite\n" +"aufgerufen werden. Einige Bookmarklets sind fr den Zugriff von 'internen'\n" +"Rechnern eingeschrnkt. Falls nicht klar ist, ob ein Rechner als 'intern'\n" +"bewertet wird, bitte den Administrator fragen.</p>\n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Dokumentation fr diese Seite" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Springt von jeder Seite zu der Dokumentation fr den View der diese Seite " +"erzeugt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Objekt ID anzeigen" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Zeigt den Content-Type und die eindeutige ID fr Seiten die ein einzelnes " +"Objekt reprsentieren." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Dieses Objekt im aktuellen Fenster ndern." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" +"Springt zu der Administrationsseite fr dieses Objekt, wenn diese Seite ein " +"Objekt reprsentiert." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Dieses Objekt in einem neuen Fenster ndern." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" +"Wie zuvor, aber ffnent die Administrationsseite in einem neuen Fenster." + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "Umleitung von" @@ -1117,6 +1420,44 @@ msgstr "Schwedisch" msgid "Simplified Chinese" msgstr "Vereinfachtes Chinesisch" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "Dieses Feld ist zwingend." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Bitte sicherstellen, das der Text weniger als %s Zeichen hat." +msgstr[1] "Bitte sicherstellen, das der Text weniger als %s Zeichen hat." + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "Zeilenumbrche sind hier nicht erlaubt." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" +"Bitte eine gltige Auswahl treffen; '%(data)s' ist nicht in %(choices)s." + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "Die ausgewhlte Datei ist leer." + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Bitte eine ganze Zahl zwischen -32.768 und 32.767 eingeben." + +#: core/formfields.py:668 +msgid "Enter a positive number." +msgstr "Bitte eine ganze, positive Zahl eingeben." + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Bitte eine ganze Zahl zwischen 0 und 32.767 eingeben." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten." @@ -1390,13 +1731,47 @@ msgstr "" "Das Attribut %(attr)s in Zeile %(line)s hat einen ungltigen Wert. Die Zeile " "beginnt mit \"%(start)s\"." -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "Bitte ein gltiges '%s' eingeben." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "Ein '%(optname)s' mit diesem '%(fieldname)s' existiert bereits." + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Mehrere IDs knnen mit Komma getrennt werden." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" " Um mehr als eine Selektion zu treffen, \"Strg\", oder auf dem Mac \"Command" "\", beim Klicken gedrckt halten." + +#: core/meta/fields.py:511 +msgid "Enter a valid filename." +msgstr "Bitte einen gltigen Dateinamen eingeben" + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +"Bitte gltige IDs fr %(self)s eingeben. Der Wert %(value)r ist ungltig." +msgstr[1] "" +"Bitte gltige IDs fr %(self)s eingeben. Die Werte %(value)r sind ungltig." + +#~ msgid "Error in Template" +#~ msgstr "Fehler in der Vorlage" + +#~ msgid "" +#~ "\n" +#~ "In template %(name)s, error at line %(line)s:\n" +#~ msgstr "" +#~ "\n" +#~ "Fehler in der Vorlage %(name)s, in Zeile %(line)s:\n" diff --git a/django/conf/locale/en/LC_MESSAGES/django.mo b/django/conf/locale/en/LC_MESSAGES/django.mo Binary files differindex 6ee4ac7071..7199e536de 100644 --- a/django/conf/locale/en/LC_MESSAGES/django.mo +++ b/django/conf/locale/en/LC_MESSAGES/django.mo diff --git a/django/conf/locale/en/LC_MESSAGES/django.po b/django/conf/locale/en/LC_MESSAGES/django.po index ab11f413ed..3ba0920f30 100644 --- a/django/conf/locale/en/LC_MESSAGES/django.po +++ b/django/conf/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\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" @@ -263,6 +263,50 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +msgid "Today" +msgstr "" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "No" +msgstr "" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "" @@ -291,6 +335,133 @@ msgstr "" msgid "log entries" msgstr "" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +msgid "Site administration" +msgstr "" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, python-format +msgid "Add %s" +msgstr "" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, python-format +msgid "Changed %s." +msgstr "" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, python-format +msgid "Change %s" +msgstr "" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, python-format +msgid "Change history: %s" +msgstr "" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -362,49 +533,48 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 -msgid "History" +#: contrib/admin/templates/admin/change_list.html:10 +#, python-format +msgid "Add %(name)s" msgstr "" -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" msgstr "" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" msgstr "" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." msgstr "" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "N j, Y, P" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" msgstr "" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" msgstr "" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" msgstr "" #: contrib/admin/templates/admin/500.html:4 @@ -425,37 +595,39 @@ msgid "" "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" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" msgstr "" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" msgstr "" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" msgstr "" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" msgstr "" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "" +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "N j, Y, P" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" +#: 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/index.html:52 -msgid "My Actions" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" msgstr "" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" msgstr "" #: contrib/admin/templates/admin/login.html:15 @@ -470,20 +642,31 @@ msgstr "" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 @@ -505,6 +688,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:3 +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/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -613,6 +833,65 @@ msgstr "" msgid "The %(site_name)s team" msgstr "" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "" @@ -984,82 +1263,119 @@ msgstr "" msgid "Message" msgstr "" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 msgid "Danish" msgstr "" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "" + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: core/formfields.py:668 +msgid "Enter a positive number." +msgstr "" + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "" @@ -1305,11 +1621,33 @@ msgid "" "starts with \"%(start)s\".)" msgstr "" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "" -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" + +#: core/meta/fields.py:511 +msgid "Enter a valid filename." +msgstr "" + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" diff --git a/django/conf/locale/es/LC_MESSAGES/django.mo b/django/conf/locale/es/LC_MESSAGES/django.mo Binary files differindex 1bfc596342..a3613a1dcb 100644 --- a/django/conf/locale/es/LC_MESSAGES/django.mo +++ b/django/conf/locale/es/LC_MESSAGES/django.mo diff --git a/django/conf/locale/es/LC_MESSAGES/django.po b/django/conf/locale/es/LC_MESSAGES/django.po index d2a7cb0c4b..6794ab5e12 100644 --- a/django/conf/locale/es/LC_MESSAGES/django.po +++ b/django/conf/locale/es/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" "PO-Revision-Date: 2005-10-04 20:59GMT\n" "Last-Translator: Ricardo Javier Crdenes Medina <ricardo.cardenes@gmail." "com>\n" @@ -268,6 +268,50 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +msgid "Today" +msgstr "" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "No" +msgstr "" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 #, fuzzy msgid "action time" @@ -297,6 +341,134 @@ msgstr "" msgid "log entries" msgstr "" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Registrarse" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Administracin de Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, fuzzy, python-format +msgid "Select %s to change" +msgstr "Cambie para modificar" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Agregar" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Modificar" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Modificar" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Cambiar clave" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -371,52 +543,49 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Inicio" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "Histrico" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Fecha/hora" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Agregar" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Usuario" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Agregar" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Accin" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Modificar" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j. N Y, H:i" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "No tiene permiso para editar nada." -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Este objeto no tiene histrico de cambios. Probablemente no fue aadido " -"usando este sitio de administracin." +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Acciones recientes" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Sitio de administracin de Django" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Mis acciones" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administracin de Django" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Ninguno disponible" #: contrib/admin/templates/admin/500.html:4 #, fuzzy @@ -440,38 +609,42 @@ msgstr "" "mediante correo electrnico y debera arreglarse en breve. Gracias por su " "paciencia" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Pgina no encontrada" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "Histrico" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Fecha/hora" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Agregar" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Usuario" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Modificar" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Accin" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "No tiene permiso para editar nada." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j. N Y, H:i" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Acciones recientes" +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto no tiene histrico de cambios. Probablemente no fue aadido " +"usando este sitio de administracin." -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Mis acciones" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Sitio de administracin de Django" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Ninguno disponible" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administracin de Django" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -485,21 +658,32 @@ msgstr "Clave:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Ha <a href=\"/password_reset/\">olvidado su clave</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Registrarse" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Pgina no encontrada" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Bienvenido," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Lo sentimos, pero no se encuentra la pgina solicitada." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Cambiar clave" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Terminar" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, fuzzy, python-format @@ -525,6 +709,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "S, estoy seguro" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Bienvenido," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Cambiar clave" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Terminar" + +#: contrib/admin/templates/admin/submit_line.html:3 +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/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -639,6 +860,65 @@ msgstr "Gracias por usar nuestro sitio!" msgid "The %(site_name)s team" msgstr "El equipo de %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "" @@ -1015,82 +1295,120 @@ msgstr "" msgid "Message" msgstr "" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 msgid "Danish" msgstr "" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "" + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Direccin de correo:" + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Este valor debe contener slo letras, nmeros y guin bajo." @@ -1338,17 +1656,37 @@ msgid "" "starts with \"%(start)s\".)" msgstr "" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "" -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Direccin de correo:" + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + #~ msgid "Server error <em>(500)</em>" #~ msgstr "Error del servidor <em>(500)</em>" - -#~ msgid "Click to change" -#~ msgstr "Cambie para modificar" diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo Binary files differindex fc0e552bb7..0cec8eb688 100644 --- a/django/conf/locale/fr/LC_MESSAGES/django.mo +++ b/django/conf/locale/fr/LC_MESSAGES/django.mo diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po index 5988eaaf23..bd32c96654 100644 --- a/django/conf/locale/fr/LC_MESSAGES/django.po +++ b/django/conf/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" "PO-Revision-Date: 2005-10-18 12:27+0200\n" "Last-Translator: Laurent Rahuel <laurent.rahuel@gmail.com>\n" "Language-Team: franais <fr@li.org>\n" @@ -277,6 +277,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Lundi" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Nov." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "heure de l'action" @@ -305,6 +351,134 @@ msgstr "entre de log" msgid "log entries" msgstr "entres de log" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Connectez vous" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Administration de Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Ajouter" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Modifier" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Modifier" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Modifier votre mot de passe" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -381,52 +555,49 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Accueil" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "Historique" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Date/Heure" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Ajouter" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Utilisateur" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Ajouter" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Action" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Modifier" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j. N Y, H:i" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Vous n'avez pas la permission d'diter quoi que ce soit." -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Cet objet n'a pas d'historique de modification. Il n'a probablement pas t " -"ajout au moyen de ce site d'administration." +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Actions rcentes" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Site d'administration de Django" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Mes actions" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administration de Django" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Aucun(e) disponible" #: contrib/admin/templates/admin/500.html:4 #, fuzzy @@ -450,38 +621,42 @@ msgstr "" "administrateurs du site et sera corrige dans les meilleurs dlais. Merci " "pour votre patience." -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Cette page n'a pas t trouve" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "Historique" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Nous sommes dsols, mais la page demande est introuvable." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Date/Heure" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Ajouter" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Utilisateur" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Modifier" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Action" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Vous n'avez pas la permission d'diter quoi que ce soit." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j. N Y, H:i" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Actions rcentes" +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Cet objet n'a pas d'historique de modification. Il n'a probablement pas t " +"ajout au moyen de ce site d'administration." -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Mes actions" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Site d'administration de Django" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Aucun(e) disponible" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administration de Django" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -495,21 +670,32 @@ msgstr "Mot de passe" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Avez vous <a href=\"/password_reset/\">perdu votre mot de passe</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Connectez vous" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Cette page n'a pas t trouve" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Bienvenue," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Nous sommes dsols, mais la page demande est introuvable." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Modifier votre mot de passe" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Dconnection" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, fuzzy, python-format @@ -535,6 +721,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Oui, je suis certain" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Bienvenue," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Modifier votre mot de passe" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Dconnection" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "actif" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -652,6 +876,66 @@ msgstr "Merci d'utiliser notre site!" msgid "The %(site_name)s team" msgstr "L'quipe %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "id de l'objet" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "redirig depuis" @@ -857,17 +1141,18 @@ msgstr[0] "" msgstr[1] "" #: utils/timesince.py:13 +#, fuzzy msgid "month" msgid_plural "months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "contenu" +msgstr[1] "contenu" #: utils/timesince.py:14 #, fuzzy msgid "day" msgid_plural "days" -msgstr[0] "Mai" -msgstr[1] "Mai" +msgstr[0] "Lundi" +msgstr[1] "Lundi" #: utils/timesince.py:15 msgid "hour" @@ -1039,85 +1324,127 @@ msgstr "Dates importantes" msgid "Message" msgstr "Message" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tchque" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Espagnol" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Allemand" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Anglais" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Espagnol" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Franais" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galicien" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 #, fuzzy msgid "Italian" msgstr "Italien" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brsilien" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Russe" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 #, fuzzy msgid "Serbian" msgstr "Serbe" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Ce champ est invalide." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Les lettres minuscules ne sont pas autorises ici." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Entrez un nombre entier." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Entrez un nombre entier." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Entrez un nombre entier." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "" @@ -1392,19 +1719,39 @@ msgstr "" "La valeur de l'attribut \"%(attr)s\" de la ligne %(line)s n'est pas valide. " "(Ligne dbutant par \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Entrez une adresse IP valide." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Sparez les ID par des virgules." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Maintenez \"Control\", or \"Command\" sur un Mac, pour en slectionner plus " "d'une." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Utilisez une chaine crypte MD5 -- pas un mot de passe en clair." +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Entrez une adresse de courriel valide." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" #~ msgid "Traditional Chinese" #~ msgstr "Chinois traditionnel" diff --git a/django/conf/locale/gl/LC_MESSAGES/django.mo b/django/conf/locale/gl/LC_MESSAGES/django.mo Binary files differindex 14eb9896ad..3ad4bbae2c 100644 --- a/django/conf/locale/gl/LC_MESSAGES/django.mo +++ b/django/conf/locale/gl/LC_MESSAGES/django.mo diff --git a/django/conf/locale/gl/LC_MESSAGES/django.po b/django/conf/locale/gl/LC_MESSAGES/django.po index 88015860b4..194e1d167f 100644 --- a/django/conf/locale/gl/LC_MESSAGES/django.po +++ b/django/conf/locale/gl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" "PO-Revision-Date: 2005-10-16 14:29+0100\n" "Last-Translator: Afonso Fernández Nogueira <fonzzo.django@gmail.com>\n" "Language-Team: Galego\n" @@ -268,6 +268,50 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +msgid "Today" +msgstr "" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "No" +msgstr "" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 #, fuzzy msgid "action time" @@ -297,6 +341,134 @@ msgstr "" msgid "log entries" msgstr "" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Entrar" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Administración de Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, fuzzy, python-format +msgid "Select %s to change" +msgstr "Faga clic para modificar" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Engadir" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Modificar" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Modificar" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Cambiar contrasinal" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -371,52 +543,49 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Inicio" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "Histórico" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Data/hora" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Engadir" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Usuario" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Engadir" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Acción" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Modificar" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j. N Y, H:i" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Non ten permiso para editar nada." -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Este obxecto non ten histórico de cambios. Posibelmente non se creou usando " -"este sitio de administración." +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Accións recentes" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Administración de sitio Django" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "As miñas accións" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administración de Django" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Ningunha dispoñíbel" #: contrib/admin/templates/admin/500.html:4 #, fuzzy @@ -439,38 +608,42 @@ msgstr "" "Houbo un erro. Xa se informou aos administradores do sitio por correo " "electrónico e debería quedar arranxado pronto. Grazas pola súa paciencia." -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Páxina non atopada" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "Histórico" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Sentímolo, pero non se atopou a páxina solicitada." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Data/hora" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Engadir" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Usuario" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Modificar" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Acción" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Non ten permiso para editar nada." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j. N Y, H:i" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Accións recentes" +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este obxecto non ten histórico de cambios. Posibelmente non se creou usando " +"este sitio de administración." -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "As miñas accións" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Administración de sitio Django" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Ningunha dispoñíbel" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administración de Django" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -484,21 +657,32 @@ msgstr "Contrasinal:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "<a href=\"/password_reset/\">Esqueceu o contrasinal</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Entrar" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Páxina non atopada" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Benvido," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Sentímolo, pero non se atopou a páxina solicitada." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Cambiar contrasinal" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Saír" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, fuzzy, python-format @@ -524,6 +708,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Si, estou seguro" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Benvido," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Cambiar contrasinal" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Saír" + +#: contrib/admin/templates/admin/submit_line.html:3 +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/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -638,6 +859,65 @@ msgstr "Grazas por usar o noso sitio web!" msgid "The %(site_name)s team" msgstr "O equipo de %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "" @@ -1014,82 +1294,120 @@ msgstr "" msgid "Message" msgstr "" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 msgid "Danish" msgstr "" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "" + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Enderezo de correo electrónico:" + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Este valor soamente pode conter letras, números e guións baixos (_)." @@ -1337,14 +1655,34 @@ msgid "" "starts with \"%(start)s\".)" msgstr "" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "" -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" -#~ msgid "Click to change" -#~ msgstr "Faga clic para modificar" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Enderezo de correo electrónico:" + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" diff --git a/django/conf/locale/is/LC_MESSAGES/django.mo b/django/conf/locale/is/LC_MESSAGES/django.mo Binary files differindex af5c7101c1..5f9e335d9c 100644 --- a/django/conf/locale/is/LC_MESSAGES/django.mo +++ b/django/conf/locale/is/LC_MESSAGES/django.mo diff --git a/django/conf/locale/is/LC_MESSAGES/django.po b/django/conf/locale/is/LC_MESSAGES/django.po index f88409ab64..641999b2f9 100644 --- a/django/conf/locale/is/LC_MESSAGES/django.po +++ b/django/conf/locale/is/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Django 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" "PO-Revision-Date: 2005-11-13 18:08-0000\n" "Last-Translator: Dagur Páll Ammendrup <dagurp@gmail.com>\n" "Language-Team: <dagurp@gmail.com>\n" @@ -280,6 +280,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "mánudagur" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "nóv." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "tími aðgerðar" @@ -308,6 +354,134 @@ msgstr "kladdafærsla" msgid "log entries" msgstr "kladdafærslur" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Skrá inn" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Django vefstjórn" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Bæta við" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Breyta" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Breyta" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Breyta lykilorði" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -384,18 +558,72 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Heim" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Bæta við" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Bæta við" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Breyta" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Þú hefur ekki réttindi til að breyta nokkru" + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Nýlega framkvæmdar aðgerðir" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Aðgerðir mínar" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Engin fáanleg" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Kerfisvilla" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Kerfisvilla (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Kerfisvilla <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Villa hefur komið upp. Hún hefur verið tilkynnt vefstjórunum með tölvupósti " +"og ætti að verða lagað fljótlega. Þökkum þolinmæðina." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Saga" @@ -431,59 +659,6 @@ msgstr "Django vefstjóri" msgid "Django administration" msgstr "Django vefstjórn" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Kerfisvilla" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Kerfisvilla (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Kerfisvilla <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Villa hefur komið upp. Hún hefur verið tilkynnt vefstjórunum með tölvupósti " -"og ætti að verða lagað fljótlega. Þökkum þolinmæðina." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Síða fannst ekki" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Því miður fannst umbeðin síða ekki." - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Bæta við" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Breyta" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Þú hefur ekki réttindi til að breyta nokkru" - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Nýlega framkvæmdar aðgerðir" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Aðgerðir mínar" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Engin fáanleg" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Notandanafn:" @@ -496,21 +671,32 @@ msgstr "Lykilorð:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "<a href=\"/password_reset/\">Gleymdir þú lykilorðinu</a> þínu?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Skrá inn" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Síða fannst ekki" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Velkomin(n)," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Því miður fannst umbeðin síða ekki." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Breyta lykilorði" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Skrá út" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -535,6 +721,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Já ég er viss." +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Velkomin(n)," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Breyta lykilorði" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Skrá út" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "virkur" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -652,6 +876,66 @@ msgstr "Takk fyrir að nota vefinn okkar!" msgid "The %(site_name)s team" msgstr "%(site_name)s hópurinn" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "einkenni hlutar" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "beina frá" @@ -1033,83 +1317,125 @@ msgstr "Mikilvægar dagsetningar" msgid "Message" msgstr "Skilaboð" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "Bengalska" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tékkneska" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Velska" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Spænska" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Þýska" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Enska" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spænska" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Franska" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galíska" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Ítalska" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norska" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brasilíska" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "Rúmenska" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Rússneska" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "Slóvanska" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Serbíska" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Einfölduð Kínverska " +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Þessi reitur er ótækur." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Lágstafir eru ekki leyfðir hér." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Settu inn heila tölu." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Settu inn heila tölu." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Settu inn heila tölu." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Þetta gildi má einungis innihalda stafi, tölur og undirstrik." @@ -1372,16 +1698,40 @@ msgstr "" "\"%(attr)s\" eigindið á línu %(line)s hefur ótækt gildi (línan hefst á \"%" "(start)s\")." -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Vinsamlegast skrifaðu gilda IP tölu." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Notaðu kommur til að aðskilja kenni." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Haltu niðri \"Control\", eða \"Command\" á Mac til þess að velja fleira en " "eitt." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Notaðu MD5 hakk -- ekki hrátt lykilorðið" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Skrifaðu gilt tölvupóstfang." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "innihald" diff --git a/django/conf/locale/it/LC_MESSAGES/django.mo b/django/conf/locale/it/LC_MESSAGES/django.mo Binary files differindex 73427cb57d..4cec17c1d4 100644 --- a/django/conf/locale/it/LC_MESSAGES/django.mo +++ b/django/conf/locale/it/LC_MESSAGES/django.mo diff --git a/django/conf/locale/it/LC_MESSAGES/django.po b/django/conf/locale/it/LC_MESSAGES/django.po index 281bc84a0c..1ccbf82105 100644 --- a/django/conf/locale/it/LC_MESSAGES/django.po +++ b/django/conf/locale/it/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\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" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Luned" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Nov." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "data azione" @@ -306,6 +352,134 @@ msgstr "voce di log" msgid "log entries" msgstr "voci di log" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Accedi" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Amministrazione Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, fuzzy, python-format +msgid "Select %s to change" +msgstr "Clicca per cambiare" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Aggiungi" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Cambia" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Cambia" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Cambia la password" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,52 +556,49 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Pagina iniziale" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "Storia" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Data/ora" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Aggiungi" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Utente" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Aggiungi" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Azione" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Cambia" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "Data/ora" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Non hai i permessi di modificare nulla." -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Questo oggetto non ha cambiamenti storicizzati. Probabilmente non stato " -"creato con questo sito di amministrazione." +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Azioni Recenti" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Amministrazione sito Django" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Azioni Proprie" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Amministrazione Django" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Nessuna disponibile" #: contrib/admin/templates/admin/500.html:4 #, fuzzy @@ -450,38 +621,42 @@ msgstr "" "C' stato un errore. E' stato riportato agli amministratori del sito via e-" "mail e verr risolto a breve. Grazie per la pazienza." -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Pagina non trovata" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "Storia" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Spiacente, ma la pagina richiesta non esiste." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Data/ora" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Aggiungi" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Utente" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Cambia" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Azione" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Non hai i permessi di modificare nulla." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "Data/ora" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Azioni Recenti" +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Questo oggetto non ha cambiamenti storicizzati. Probabilmente non stato " +"creato con questo sito di amministrazione." -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Azioni Proprie" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Amministrazione sito Django" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Nessuna disponibile" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Amministrazione Django" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -495,21 +670,32 @@ msgstr "Password:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Hai <a href=\"/password_reset/\">dimenticato la tua password</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Accedi" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Pagina non trovata" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Benvenuto," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Spiacente, ma la pagina richiesta non esiste." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Cambia la password" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Esci" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, fuzzy, python-format @@ -535,6 +721,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "S, sono sicuro" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Benvenuto," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Cambia la password" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Esci" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "attivo" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -650,6 +874,66 @@ msgstr "Ti ringraziamo per l'utilizzo del nostro sito!" msgid "The %(site_name)s team" msgstr "Il team di %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "id dell'oggetto" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "redirigi da" @@ -1032,84 +1316,126 @@ msgstr "Date importanti" msgid "Message" msgstr "Messaggio" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Spagnolo" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Tedesco" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Inglese" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spagnolo" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Francese" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galiziano" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italiano" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brasiliano" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Russo" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 #, fuzzy msgid "Serbian" msgstr "Serbo" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Il campo non valido." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Non sono ammesse lettere minuscole." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Inserire un numero." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Inserire un numero." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Inserire un numero." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Sono ammesse solo lettere, numeri e sottolineature ('_')." @@ -1374,23 +1700,44 @@ msgstr "" "L'attributo \"%(attr)s\" alla linea %(line)s ha un valore non valido. (La " "linea comincia con \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Inserire un indirizzo IP valido." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " Separa ID multipli con virgole." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr " Premi \"Control\", o \"Command\" su Mac, per selezionarne pi di uno." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Usare il codice di controllo MD5 -- non la password." +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Inserire un indirizzo e-mail valido." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "contenuto" #~ msgid "Itialian" #~ msgstr "Italiano" #~ msgid "Server error <em>(500)</em>" #~ msgstr "Errore del server <em>(500)</em>" - -#~ msgid "Click to change" -#~ msgstr "Clicca per cambiare" diff --git a/django/conf/locale/no/LC_MESSAGES/django.mo b/django/conf/locale/no/LC_MESSAGES/django.mo Binary files differindex 7630c5fa4b..efb1b10e5c 100644 --- a/django/conf/locale/no/LC_MESSAGES/django.mo +++ b/django/conf/locale/no/LC_MESSAGES/django.mo diff --git a/django/conf/locale/no/LC_MESSAGES/django.po b/django/conf/locale/no/LC_MESSAGES/django.po index 532f24eef5..77f7f71719 100644 --- a/django/conf/locale/no/LC_MESSAGES/django.po +++ b/django/conf/locale/no/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Espen Grndhaug <espen@grindhaug.org>\n" "Language-Team: Norwegian\n" @@ -20,7 +20,7 @@ msgstr "" #: contrib/comments/models/comments.py:161 #, fuzzy msgid "object ID" -msgstr "objekt id" +msgstr "Vis objekt ID" #: contrib/comments/models/comments.py:9 msgid "headline" @@ -79,9 +79,8 @@ msgid "is public" msgstr "" #: contrib/comments/models/comments.py:26 contrib/admin/views/doc.py:274 -#, fuzzy msgid "IP address" -msgstr "e-post adresse" +msgstr "IP adresse" #: contrib/comments/models/comments.py:27 msgid "is removed" @@ -126,7 +125,7 @@ msgstr "fornavn" #: contrib/comments/models/comments.py:166 #, fuzzy msgid "ip address" -msgstr "e-post adresse" +msgstr "IP adresse" #: contrib/comments/models/comments.py:168 msgid "approved by staff" @@ -185,12 +184,15 @@ msgid "Flag by %r" msgstr "" #: contrib/comments/models/comments.py:271 -#, python-format +#, fuzzy, python-format msgid "" "This comment was flagged by %(user)s:\n" "\n" "%(text)s" msgstr "" +"Denne kommentaren er skrevet med lite omtanke:\n" +"\n" +"%(text)s" #: contrib/comments/models/comments.py:278 #, fuzzy @@ -212,24 +214,24 @@ msgstr "" #: contrib/comments/views/karma.py:18 msgid "Anonymous users cannot vote" -msgstr "" +msgstr "Anonyme brukere kan ikke stemme" #: contrib/comments/views/karma.py:22 -#, fuzzy msgid "Invalid comment ID" -msgstr "tillat kommentarer" +msgstr "Ikke gyldig kommentar ID" #: contrib/comments/views/karma.py:24 msgid "No voting for yourself" -msgstr "" +msgstr "Du kan ikke stemme selv" #: contrib/comments/views/comments.py:25 +#, fuzzy msgid "" "This rating is required because you've entered at least one other rating." -msgstr "" +msgstr "Denne bla bla.." #: contrib/comments/views/comments.py:109 -#, python-format +#, fuzzy, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " "comment:\n" @@ -241,46 +243,107 @@ msgid_plural "" "\n" "%(text)s" msgstr[0] "" +"Denne kommentaren var skrevet av en bruker som har fra før skrevet under %" +"(count)s kommentarer:\n" +"\n" +"%(text)s" msgstr[1] "" +"Denne kommentaren var skrevet av en bruker som har fra før skrevet under %" +"(count)s kommentarer:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:114 -#, python-format +#, fuzzy, python-format msgid "" "This comment was posted by a sketchy user:\n" "\n" "%(text)s" msgstr "" +"Denne kommentaren er skrevet med lite omtanke:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:186 #: contrib/comments/views/comments.py:277 msgid "Only POSTs are allowed" -msgstr "" +msgstr "Bare POST er tillatt" #: contrib/comments/views/comments.py:190 #: contrib/comments/views/comments.py:281 msgid "One or more of the required fields wasn't submitted" -msgstr "" +msgstr "En eller flere av feltene som er krevd ble ikke sendt." #: contrib/comments/views/comments.py:194 #: contrib/comments/views/comments.py:283 msgid "Somebody tampered with the comment form (security violation)" -msgstr "" +msgstr "Noen har endret på komentar feltene (sikkerhets advarsel)" #: contrib/comments/views/comments.py:204 #: contrib/comments/views/comments.py:289 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " "invalid" -msgstr "" +msgstr "Skjemaet hadde en ugyldig verdi - objekt IDen var ugyldig" #: contrib/comments/views/comments.py:254 #: contrib/comments/views/comments.py:318 msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +"Kommentar skjemaet returnerte ikke et 'forhåndsvisning' eller 'post' objekt" + +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" +"<h3>Av %s:</h3>\n" +"<ul>\n" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "Alle" + +#: contrib/admin/filterspecs.py:100 +#, fuzzy +msgid "Any date" +msgstr "Alle datoer" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Mondag" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Nov." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "Ukjent" #: contrib/admin/models/admin.py:6 msgid "action time" -msgstr "handlings tid" +msgstr "tid for handling" #: contrib/admin/models/admin.py:9 msgid "object id" @@ -306,69 +369,199 @@ msgstr "logg notis" msgid "log entries" msgstr "logg innlegg" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "Alle datoer" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Log inn" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Du må logge inn igjen, fordi sesjonen din har gått ut på dato, men ikke ikke " +"bekjymr deg informasjonen du sendte ble lagret." + +#: contrib/admin/views/decorators.py:63 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Det ser ut som om nettleseren din ikke vill ta i mot informasjonskapsler " +"('cookies'). Vennligst omkonfigurer nettleseren din, last siden på ny og " +"prøv igjen." + +#: contrib/admin/views/decorators.py:77 +msgid "Usernames cannot contain the '@' character." +msgstr "Brukernavnet kan ikke inneholde '@'" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "Epost adressen din er ikke brukernavnet ditt, prøv '%s' i stede." + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Django administrasjon" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "Velg %s" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "Velg %s for å endre" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "%(name)s \"%(obj)s\" ble lagt inn i databasen." + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "Du kan endre under" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "Du kan legge til en ny %s under." + +#: contrib/admin/views/main.py:451 +#, python-format +msgid "Add %s" +msgstr "Ny %s" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "La til %s" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "og" + +#: contrib/admin/views/main.py:469 +#, python-format +msgid "Changed %s." +msgstr "Endret %s." + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "Slettet %s." + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "Ingen felt endret." + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "%(name)s \"%(obj)s\" ble endret." + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "%(name)s \"%(obj)s\" ble endret. Du kan endre det igjen under." + +#: contrib/admin/views/main.py:546 +#, python-format +msgid "Change %s" +msgstr "Endre %s" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "En eller flere %(fieldname)s i %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "En eller flere %(fieldname)s i %(name)s:" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "%(name)s \"%(obj)s\" ble slettet." + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "Er du sikker?" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Endre historien: %s" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 msgid "Integer" -msgstr "" +msgstr "Heltall" #: contrib/admin/views/doc.py:263 +#, fuzzy msgid "Boolean (Either True or False)" -msgstr "" +msgstr "Boolean (Enten \"True\" eller \"False\")" #: contrib/admin/views/doc.py:264 #, python-format msgid "String (up to %(maxlength)s)" -msgstr "" +msgstr "Tekst (opp til %(maxlength)s tegn)" #: contrib/admin/views/doc.py:265 msgid "Comma-separated integers" -msgstr "" +msgstr "Heltall skilt med kommaer" #: contrib/admin/views/doc.py:266 -#, fuzzy msgid "Date (without time)" -msgstr "handlings tid" +msgstr "Dato (uten tid)" #: contrib/admin/views/doc.py:267 -#, fuzzy msgid "Date (with time)" msgstr "Dato/tid" #: contrib/admin/views/doc.py:268 -#, fuzzy msgid "E-mail address" -msgstr "Epost adresse:" +msgstr "Epost adresse" #: contrib/admin/views/doc.py:269 contrib/admin/views/doc.py:272 msgid "File path" -msgstr "" +msgstr "Sti til fil" #: contrib/admin/views/doc.py:270 -#, fuzzy msgid "Decimal number" -msgstr "Desember" +msgstr "Desimal tall" #: contrib/admin/views/doc.py:276 +#, fuzzy msgid "Boolean (Either True, False or None)" -msgstr "" +msgstr "Boolean (enten \"True\", \"False\" eller \"None\")" #: contrib/admin/views/doc.py:277 -#, fuzzy msgid "Phone number" -msgstr "Skriv inn et helt nummer." +msgstr "Telefonnummer" #: contrib/admin/views/doc.py:280 msgid "String (up to 50)" -msgstr "" +msgstr "Tekst (opp til 50 tegn)" #: contrib/admin/views/doc.py:282 msgid "Text" -msgstr "" +msgstr "Tekst" #: contrib/admin/views/doc.py:283 msgid "Time" -msgstr "" +msgstr "Tid" #: contrib/admin/views/doc.py:284 contrib/flatpages/models/flatpages.py:6 msgid "URL" @@ -376,58 +569,55 @@ msgstr "Internettadresse" #: contrib/admin/views/doc.py:285 msgid "U.S. state (two uppercase letters)" -msgstr "" +msgstr "Stat (i USA, to store bokstaver)" #: contrib/admin/views/doc.py:286 msgid "XML text" -msgstr "" +msgstr "XML tekst" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Hjem" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "Historie" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Dato/tid" +#: contrib/admin/templates/admin/change_list.html:10 +#, python-format +msgid "Add %(name)s" +msgstr "Legg til %(name)s" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Bruker" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Legg til" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Funksjon" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Endre" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "N j, Y, P" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Du har ikke rettigheter til å endre." -#: 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 "" -"Dette objektet har ingen endrings historie. Den var sannsynligvis ikke laget " -"via denne siden" +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Siste handlinger" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Django administrasjonsside" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Mine handlinger" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Django administrasjon" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Ingen tilgjengelige" #: contrib/admin/templates/admin/500.html:4 msgid "Server error" @@ -449,38 +639,42 @@ msgstr "" "Det har vært en feil. Feilen er blitt rapportert til administrator via e-" "mail, og vill bli fikset snart. Takk for din tålmodighet." -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Fant ikke siden" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "Historie" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Beklager, men siden du spør etter finnest ikke." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Dato/tid" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Legg til" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Bruker" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Endre" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Funksjon" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Du har ikke rettigheter til å endre." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j. M U - h:i" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Siste handlinger" +#: 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 "" +"Dette objektet har ingen endrings historie. Den var sannsynligvis ikke laget " +"via denne siden" -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Mine handlinger" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django administrasjonsside" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Ingen tilgjengelige" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Django administrasjon" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -494,21 +688,32 @@ msgstr "Passord:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Har du <a href=\"/password_reset/\">glemt passordet ditt</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Log inn" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Fant ikke siden" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Velkommen" +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Beklager, men siden du spør etter finnest ikke." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Endre passord" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "Vis på siden" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Log ut" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Vennligst fiks feilen under." +msgstr[1] "Vennligst fiks feilene under." + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "Rekkefølge" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "Rekkefølge:" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -533,6 +738,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Ja, jeg er sikker" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Velkommen" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Endre passord" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Log ut" + +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Slett" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Lagre som ny" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Lagre og legg til en ny" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Lagre og fortsett å endre" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Lagre" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +msgstr "Av %(title)s " + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -648,6 +890,71 @@ msgstr "Takk for at du bruker vår side!" msgid "The %(site_name)s team" msgstr "Hilsen %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentasjon" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bokmerker" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Dokumentasjon bokmerker" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Dokumentasjon for denne siden" + +#: 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 "" +"Hopp fra hvilken som helst side til dokumentasjonen for visnings funksjonen " +"som laget siden." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Vis objekt ID" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Viser \"content-type\" og en unik ID for sider som representerer et enkelt " +"objekt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Endre dette objektet (åpnes i dette vinduet)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +#, fuzzy +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" +"Hopp til administrasjonsiden for siden som representerer et enkelt objekt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Endre dette objektet (åpnes i et nytt vindu)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "Samme som over, men åpner administrasjonsiden i et nytt vindu." + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "omadresser fra" @@ -703,7 +1010,6 @@ msgid "template name" msgstr "mal navn" #: contrib/flatpages/models/flatpages.py:12 -#, fuzzy msgid "" "Example: 'flatpages/contact_page'. If this isn't provided, the system will " "use 'flatpages/default'." @@ -731,15 +1037,15 @@ msgstr "flatsider" #: utils/translation.py:335 msgid "DATE_FORMAT" -msgstr "" +msgstr "j. M U" #: utils/translation.py:336 msgid "DATETIME_FORMAT" -msgstr "" +msgstr "j. M U - h:i" #: utils/translation.py:337 msgid "TIME_FORMAT" -msgstr "" +msgstr "h:i" #: utils/dates.py:6 msgid "Monday" @@ -1033,82 +1339,119 @@ msgstr "Viktige datoer" msgid "Message" msgstr "Meldinger" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "Bengalsk" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tsjekkisk" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Walisisk" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 msgid "Danish" -msgstr "Dnask" +msgstr "Dansk" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Tysk" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Engelsk" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spansk" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Fransk" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galisisk" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "Islandsk" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italiensk" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norsk" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brasiliansk" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "Romansk" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Russisk" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "Slovakisk" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Serbisk" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "Svensk" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Simplifisert Kinesisk" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "Dette feltet er påkrevd." + +#: core/formfields.py:339 +#, fuzzy, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Sjekk at teksten er kortere enn %s bokstaver" +msgstr[1] "Sjekk at teksten er kortere enn %s bokstaver" + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "Det er ikke tillatt med flere linjer her." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Velg et av valga; '%(data)s' er ikke i %(choices)s." + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "Filen er tom." + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Skriv inn et heltall mellom -31768 og 32767." + +#: core/formfields.py:668 +msgid "Enter a positive number." +msgstr "Skriv inn et positivt heltall." + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Skriv inn et heltall mellom 0 og 32767." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Dette feltet må bare inneholde bokstaver, nummer og understreker." @@ -1377,15 +1720,45 @@ msgstr "" "\"%(attr)s\" tillegg på linje $(line)s har en ikke godkjent verdi. (Linja " "starter med \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Vennligst skriv inn en godkjent IP adresse." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "$(optname)s med %(fieldname)s finnes allerede." + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Separer Id-ene med kommaer." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mere enn en." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Bruk en MD5 nøkkel -- ikke passordet i ren tekst" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Skriv inn en godkjent e-post adresse." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#~ msgid "Error in Template" +#~ msgstr "Feil i mal" + +#~ msgid "" +#~ "\n" +#~ "In template %(name)s, error at line %(line)s:\n" +#~ msgstr "" +#~ "\n" +#~ "I mal %(name)s, var det en feil på linje %(line)s:\n" diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo Binary files differindex 8bb9fdb9bc..4655e7be3f 100644 --- a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo +++ b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/django/conf/locale/pt_BR/LC_MESSAGES/django.po index 0219f363e3..a1c44ead54 100644 --- a/django/conf/locale/pt_BR/LC_MESSAGES/django.po +++ b/django/conf/locale/pt_BR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" "PO-Revision-Date: 2005-10-11 09:12GMT-3\n" "Last-Translator: João Paulo Farias <jpaulofarias@gmail.com>\n" "Language-Team: Português do Brasil <pt-br@li.org>\n" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Segunda Feira" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Nov." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "hora da ação" @@ -306,6 +352,134 @@ msgstr "entrada de log" msgid "log entries" msgstr "entradas de log" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Acessar" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Administração do Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, fuzzy, python-format +msgid "Select %s to change" +msgstr "Clique para alterar" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Adicionar" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Modificar" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Modificar" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Alterar senha" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,52 +556,49 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Início" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "Histórico" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Data/hora" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Adicionar" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Usuário" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Adicionar" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Ação" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Modificar" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j. N Y, H:i" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Você não tem permissão para edição." -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Este objeto não tem um histórico de alterações. Ele provavelmente não foi " -"adicionado por este site de administração." +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Ações Recentes" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Site de administração do Django" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Minhas Ações" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administração do Django" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Nenhuma disponível" #: contrib/admin/templates/admin/500.html:4 #, fuzzy @@ -450,38 +621,42 @@ msgstr "" "Houve um erro. Este foi reportado aos administradores do site através d e-" "mail e deve ser consertado em breve. Obrigado pela compreensão." -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Página não encontrada" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "Histórico" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Desculpe, mas a página requisitada não pode ser encontrada." +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Data/hora" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Adicionar" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Usuário" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Modificar" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Ação" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Você não tem permissão para edição." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j. N Y, H:i" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Ações Recentes" +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este objeto não tem um histórico de alterações. Ele provavelmente não foi " +"adicionado por este site de administração." -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Minhas Ações" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Site de administração do Django" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Nenhuma disponível" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administração do Django" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -495,21 +670,32 @@ msgstr "Senha:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Você <a href=\"/password_reset/\"esqueceu a senha</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Acessar" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Página não encontrada" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Bem vindo," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Desculpe, mas a página requisitada não pode ser encontrada." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Alterar senha" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Encerrar sessão" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, fuzzy, python-format @@ -535,6 +721,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Sim, tenho certeza" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Bem vindo," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Alterar senha" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Encerrar sessão" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "ativar" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -649,6 +873,66 @@ msgstr "Obrigado por usar nosso site!" msgid "The %(site_name)s team" msgstr "Time do %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "id do objeto" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "redirecionar de" @@ -1036,84 +1320,126 @@ msgstr "Datas importantes" msgid "Message" msgstr "Mensagem" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tcheco" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Espanhol" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Alemão" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Inglês" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Espanhol" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Francês" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galiciano" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italiano" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brazileiro" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Russo" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 #, fuzzy msgid "Serbian" msgstr "Sérvio" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Este campo é inválido." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Letras em minúsculo não são permitidas aqui." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Informe um número inteiro." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Informe um número inteiro." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Informe um número inteiro." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Deve conter apenas letras, números e sublinhados (_)." @@ -1378,19 +1704,40 @@ msgstr "" "O atributo \"%(attr)s\" na linha %(line)s tem um valor inválido. (Linha " "começa com \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Informe um endereço IP válido." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " Separe IDs múltiplos com vírgulas." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" " Mantenha pressionado \"Control\", ou \"Command\" num Mac para selecionar " "mais de uma opção." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Usar um código MD5 -- não o texto da senha." +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Informe um endereço de email válido." -#~ msgid "Click to change" -#~ msgstr "Clique para alterar" +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "conteúdo" diff --git a/django/conf/locale/ro/LC_MESSAGES/django.mo b/django/conf/locale/ro/LC_MESSAGES/django.mo Binary files differindex 6853fcd59f..01c98da1a7 100644 --- a/django/conf/locale/ro/LC_MESSAGES/django.mo +++ b/django/conf/locale/ro/LC_MESSAGES/django.mo diff --git a/django/conf/locale/ro/LC_MESSAGES/django.po b/django/conf/locale/ro/LC_MESSAGES/django.po index da13e676d5..bf0ca36809 100644 --- a/django/conf/locale/ro/LC_MESSAGES/django.po +++ b/django/conf/locale/ro/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Django \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 18:34+0100\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" "PO-Revision-Date: 2005-11-08 19:06+GMT+2\n" "Last-Translator: Tiberiu Micu <tibimicu@gmx.net>\n" "Language-Team: Romanian <ro@li.org>\n" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Luni" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Noi." + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "timp acţiune" @@ -306,6 +352,134 @@ msgstr "intrare log" msgid "log entries" msgstr "intrări log" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Login" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Administrare Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Adaugă" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Schimbă" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Schimbă" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Schimbă parola" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,18 +556,72 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Acasă" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Adaugă" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Adaugă" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Schimbă" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Nu ai drepturi de editare." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Acţiuni Recente" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Acţiunile Mele" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Indisponibil" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Eroare de server" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Eroare de server (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Eroare server <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"A apărut o eroare. Este raportată către administrator via emailşi va fi " +"fixată în scurt timp. Mulţumim pentru înţelegere." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Istoric" @@ -429,59 +657,6 @@ msgstr "Administrare sit Django" msgid "Django administration" msgstr "Administrare Django" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Eroare de server" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Eroare de server (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Eroare server <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"A apărut o eroare. Este raportată către administrator via emailşi va fi " -"fixată în scurt timp. Mulţumim pentru înţelegere." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Pagină inexistentă" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Ne pare rău, dar pagina cerută nu există." - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Adaugă" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Schimbă" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Nu ai drepturi de editare." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Acţiuni Recente" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Acţiunile Mele" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Indisponibil" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Utilizator:" @@ -494,21 +669,32 @@ msgstr "Parola:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Ai <a href=\"/password_reset/\">uitat parola</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Login" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Pagină inexistentă" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Bine ai venit," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Ne pare rău, dar pagina cerută nu există." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Schimbă parola" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Deautentificare" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -534,6 +720,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Da, sînt sigur" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Bine ai venit," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Schimbă parola" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Deautentificare" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "activ" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -648,6 +872,66 @@ msgstr "Mulţumesc pentru folosirea saitului nostru!" msgid "The %(site_name)s team" msgstr "Echipa %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "id obiect" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "redirectat de la " @@ -1033,83 +1317,125 @@ msgstr "Date importante" msgid "Message" msgstr "Mesaj" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Cehă" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Spaniolă" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Germană" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Engleză" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spaniolă" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Franceză" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galiciană" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italiană" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norvegiană" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Braziliană" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Rusă" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Sîrbă" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Chineză simplificată" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Cîmpul este invalid." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Literele mici nu sînt permise aici." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Introduceţi un număr întreg." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Introduceţi un număr întreg." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Introduceţi un număr întreg." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "" @@ -1378,16 +1704,40 @@ msgstr "" "Atributul \"%(attr)s\" din linia %(line)s are o valoare invalidă. ( Linia " "începe cu \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Introduceţi vă rog o adresă IP validă." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Separă ID-urile multiple cu virgulă." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" " Ţine apăsat \"Control\", sau \"Command\" pe un Mac, pentru a selecta mai " "multe." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Foloseşte un hash MD5 -- nu parola brută" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Introduceţi o adresă de email validă." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "conţinut" diff --git a/django/conf/locale/ru/LC_MESSAGES/django.mo b/django/conf/locale/ru/LC_MESSAGES/django.mo Binary files differindex fe6ae8b76d..2a59acdee8 100644 --- a/django/conf/locale/ru/LC_MESSAGES/django.mo +++ b/django/conf/locale/ru/LC_MESSAGES/django.mo diff --git a/django/conf/locale/ru/LC_MESSAGES/django.po b/django/conf/locale/ru/LC_MESSAGES/django.po index 8f78049cd1..921557eddf 100644 --- a/django/conf/locale/ru/LC_MESSAGES/django.po +++ b/django/conf/locale/ru/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" "PO-Revision-Date: 2005-10-05 00:00\n" "Last-Translator: Dmitry Sorokin <ds@@dial.com.ru>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -26,9 +26,8 @@ msgstr "" #: contrib/comments/models/comments.py:10 #: contrib/comments/models/comments.py:162 -#, fuzzy msgid "comment" -msgstr "" +msgstr "" #: contrib/comments/models/comments.py:11 msgid "rating #1" @@ -96,15 +95,13 @@ msgid "Comment" msgstr "" #: contrib/comments/models/comments.py:32 -#, fuzzy msgid "Comments" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:85 #: contrib/comments/models/comments.py:204 -#, fuzzy msgid "Content object" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:113 #, python-format @@ -117,9 +114,8 @@ msgid "" msgstr "" #: contrib/comments/models/comments.py:163 -#, fuzzy msgid "person's name" -msgstr "" +msgstr "" #: contrib/comments/models/comments.py:166 #, fuzzy @@ -131,23 +127,20 @@ msgid "approved by staff" msgstr "" #: contrib/comments/models/comments.py:172 -#, fuzzy msgid "Free comment" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:173 -#, fuzzy msgid "Free comments" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:209 msgid "score" msgstr "" #: contrib/comments/models/comments.py:210 -#, fuzzy msgid "score date" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:213 msgid "Karma score" @@ -163,9 +156,8 @@ msgid "%(score)d rating by %(user)s" msgstr "" #: contrib/comments/models/comments.py:248 -#, fuzzy msgid "flag date" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:251 #, fuzzy @@ -191,9 +183,8 @@ msgid "" msgstr "" #: contrib/comments/models/comments.py:278 -#, fuzzy msgid "deletion date" -msgstr " " +msgstr "" #: contrib/comments/models/comments.py:281 msgid "Moderator deletion" @@ -213,9 +204,8 @@ msgid "Anonymous users cannot vote" msgstr "" #: contrib/comments/views/karma.py:22 -#, fuzzy msgid "Invalid comment ID" -msgstr " " +msgstr "" #: contrib/comments/views/karma.py:24 msgid "No voting for yourself" @@ -276,6 +266,50 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +msgid "Today" +msgstr "" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "No" +msgstr "" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 #, fuzzy msgid "action time" @@ -305,6 +339,134 @@ msgstr "" msgid "log entries" msgstr "" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr " Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, fuzzy, python-format +msgid "Select %s to change" +msgstr " " + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr " " + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -344,18 +506,16 @@ msgid "File path" msgstr "" #: contrib/admin/views/doc.py:270 -#, fuzzy msgid "Decimal number" -msgstr "" +msgstr "" #: contrib/admin/views/doc.py:276 msgid "Boolean (Either True, False or None)" msgstr "" #: contrib/admin/views/doc.py:277 -#, fuzzy msgid "Phone number" -msgstr " " +msgstr "" #: contrib/admin/views/doc.py:280 msgid "String (up to 50)" @@ -381,18 +541,73 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr " ." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr " " + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr " " + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "" + +#: contrib/admin/templates/admin/500.html:4 +#, fuzzy +msgid "Server error" +msgstr " (500)" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr " (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr " <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +" . e-mail " +" . ." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "" @@ -428,59 +643,6 @@ msgstr " Django" msgid "Django administration" msgstr " Django" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr " " - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr " (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr " <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -" . e-mail " -" . ." - -#: 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:27 -msgid "Add" -msgstr "" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr " ." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr " " - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr " " - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr ":" @@ -493,21 +655,32 @@ msgstr ":" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr " <a href=\"/password_reset/\"> </a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr " " -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -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/base.html:23 -msgid "Change password" -msgstr " " +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, fuzzy, python-format @@ -533,6 +706,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr ", " +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr " ," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr " " + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:3 +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/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -647,6 +857,65 @@ msgstr " !" msgid "The %(site_name)s team" msgstr " di %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr " " @@ -683,7 +952,7 @@ msgstr "" msgid "" "Example: '/about/contact/'. Make sure to have leading and trailing slashes." msgstr "" -": '/about/contact/'. , ." +": '/about/contact/'. , ." #: contrib/flatpages/models/flatpages.py:8 msgid "title" @@ -702,13 +971,10 @@ msgid "template name" msgstr " " #: contrib/flatpages/models/flatpages.py:12 -#, fuzzy msgid "" "Example: 'flatpages/contact_page'. If this isn't provided, the system will " "use 'flatpages/default'." msgstr "" -": 'flatfiles/contact_page'. , " -" 'flatfiles/default'." #: contrib/flatpages/models/flatpages.py:13 msgid "registration required" @@ -1035,82 +1301,120 @@ msgstr " " msgid "Message" msgstr "" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 msgid "Danish" msgstr "" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "" + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "E-mail :" + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr " , ." @@ -1370,22 +1674,46 @@ msgid "" "starts with \"%(start)s\".)" msgstr "" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " ID ." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" " \"Control\", \"Command\" , " "." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr " MD5 -- ." +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "E-mail :" + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#~ msgid "" +#~ "Example: 'flatfiles/contact_page'. If this isn't provided, the system " +#~ "will use 'flatfiles/default'." +#~ msgstr "" +#~ ": 'flatfiles/contact_page'. , " +#~ " 'flatfiles/default'." #~ msgid "Server error <em>(500)</em>" #~ msgstr " <em>(500)</em>" - -#~ msgid "Click to change" -#~ msgstr " " diff --git a/django/conf/locale/sk/LC_MESSAGES/django.mo b/django/conf/locale/sk/LC_MESSAGES/django.mo Binary files differindex 9fddf972d3..26d18a6cec 100644 --- a/django/conf/locale/sk/LC_MESSAGES/django.mo +++ b/django/conf/locale/sk/LC_MESSAGES/django.mo diff --git a/django/conf/locale/sk/LC_MESSAGES/django.po b/django/conf/locale/sk/LC_MESSAGES/django.po index 57bd38c2fd..35d2182837 100644 --- a/django/conf/locale/sk/LC_MESSAGES/django.po +++ b/django/conf/locale/sk/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-24 06:34-0500\n" -"PO-Revision-Date: 2005-11-10 23:22-0500\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Vladimir Labath <vlado@labath.org>\n" "Language-Team: Slovak <sk@li.org>\n" "MIME-Version: 1.0\n" @@ -50,7 +50,7 @@ msgstr "presmerovania" #: contrib/comments/models/comments.py:8 #: contrib/comments/models/comments.py:161 msgid "object ID" -msgstr "objekt ID" +msgstr "Ukáž objekt id" #: contrib/comments/models/comments.py:9 msgid "headline" @@ -100,12 +100,12 @@ msgstr "je platné hodnotenie" #: contrib/comments/models/comments.py:24 #: contrib/comments/models/comments.py:164 msgid "date/time submitted" -msgstr "dátum/čas poslania" +msgstr "dítum/čas odoslania" #: contrib/comments/models/comments.py:25 #: contrib/comments/models/comments.py:165 msgid "is public" -msgstr "je zveréjnený" +msgstr "je zverejnený" #: contrib/comments/models/comments.py:26 contrib/admin/views/doc.py:274 msgid "IP address" @@ -120,8 +120,8 @@ 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ý" -"\" táto správa sa objaví namiesto neho." +"Označ túto voľbu ak je komentár nevhodný. \"Tento komentár bol vymazaný\" " +"sa zobrazí namiesto neho." #: contrib/comments/models/comments.py:31 msgid "Comment" @@ -134,7 +134,7 @@ msgstr "Komentáre" #: contrib/comments/models/comments.py:85 #: contrib/comments/models/comments.py:204 msgid "Content object" -msgstr "Obsah objektu" +msgstr "Obsah objectu" #: contrib/comments/models/comments.py:113 #, python-format @@ -145,7 +145,7 @@ msgid "" "\n" "http://%(domain)s%(url)s" msgstr "" -"Poslal %(user)s at %(date)s\n" +"Poslal %(user)s at %(date)s\n" "\n" "%(comment)s\n" "\n" @@ -153,7 +153,7 @@ msgstr "" #: contrib/comments/models/comments.py:163 msgid "person's name" -msgstr "krstné meno" +msgstr "meno osoby" #: contrib/comments/models/comments.py:166 msgid "ip address" @@ -161,7 +161,7 @@ msgstr "ip adresa" #: contrib/comments/models/comments.py:168 msgid "approved by staff" -msgstr "je zamestnancom" +msgstr "schvalený za zamestnanca" #: contrib/comments/models/comments.py:172 msgid "Free comment" @@ -181,20 +181,20 @@ msgstr "údaje stavu" #: contrib/comments/models/comments.py:213 msgid "Karma score" -msgstr "Karma údaj" +msgstr "Karma stav" #: contrib/comments/models/comments.py:214 msgid "Karma scores" -msgstr "Karma údaje" +msgstr "Karma stavy" #: contrib/comments/models/comments.py:223 #, python-format msgid "%(score)d rating by %(user)s" -msgstr "%(score)d hodnotil %(user)s" +msgstr "%(score)d hodnotil %(user)s" #: contrib/comments/models/comments.py:248 msgid "flag date" -msgstr "dátumové návestie" +msgstr "návestie dátumu" #: contrib/comments/models/comments.py:251 msgid "User flag" @@ -207,55 +207,56 @@ msgstr "Návestia užívateľa" #: contrib/comments/models/comments.py:256 #, python-format msgid "Flag by %r" -msgstr " %r návestie" +msgstr "Návestie %r" #: contrib/comments/models/comments.py:271 -#, python-format +#, fuzzy, python-format msgid "" "This comment was flagged by %(user)s:\n" "\n" "%(text)s" msgstr "" -"Tento komentár bol označený %(user)s:\n" +"Tento komentár bol označený %(user)s:\n" "\n" "%(text)s" #: contrib/comments/models/comments.py:278 msgid "deletion date" -msgstr "odstránené dátumy" +msgstr "vymazaný dátum" #: contrib/comments/models/comments.py:281 msgid "Moderator deletion" -msgstr "Moderátor odstránenia" +msgstr "Prostredník mazania" #: contrib/comments/models/comments.py:282 msgid "Moderator deletions" -msgstr "Moderátor odstránení" +msgstr "Prostredník mazaní" #: contrib/comments/models/comments.py:286 #, python-format msgid "Moderator deletion by %r" -msgstr "Moderátor odstránenia %r" +msgstr "Prostredník mazania bol %r" #: contrib/comments/views/karma.py:18 msgid "Anonymous users cannot vote" -msgstr "Hlasovať môžu len prihlásení užívatelia" +msgstr "Ak chcete hlasovať, najprv sa musíte prihlásiť" #: contrib/comments/views/karma.py:22 msgid "Invalid comment ID" -msgstr "Chybné ID komentára" +msgstr "Neplatný komentár ID" #: contrib/comments/views/karma.py:24 msgid "No voting for yourself" -msgstr "Nemôžeš hlasovať za seba" +msgstr "Nemožete voliť vlastný príspevok" #: contrib/comments/views/comments.py:25 msgid "" "This rating is required because you've entered at least one other rating." msgstr "Toto hlasovanie je nevyhnutné, lebo súvisí s predchádzjúcou voľbou." +"Táto voľba je nevyhnutná nakoľko je pokračovaním vašej predchádzajúcej." #: contrib/comments/views/comments.py:109 -#, python-format +#, fuzzy, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " "comment:\n" @@ -267,12 +268,12 @@ msgid_plural "" "\n" "%(text)s" msgstr[0] "" -"Tento komentár bol užívateľom ktorý doteraz poslal minimálne %(count)s " +"Tento komentár bol poslaný užívateľom, ktorý ma menej než %(count)s " "komentár:\n" "\n" "%(text)s" msgstr[1] "" -"Tento komentár bol užívateľom ktorý doteraz poslal najmenej %(count)s " +"Tento komentár bol poslaný užívateľom, ktorý ma menej než %(count)s " "komentárov:\n" "\n" "%(text)s" @@ -284,90 +285,87 @@ msgid "" "\n" "%(text)s" msgstr "" -"Tento komentár je od veľmi náznakového užívateľa:\n" +"Tento komentár bol poslaný prchkým uzívateľom:\n" "\n" "%(text)s" #: contrib/comments/views/comments.py:186 #: contrib/comments/views/comments.py:277 msgid "Only POSTs are allowed" -msgstr "Dovolené sú len POST" +msgstr "Sú povolené len POST metódy" #: contrib/comments/views/comments.py:190 #: contrib/comments/views/comments.py:281 msgid "One or more of the required fields wasn't submitted" -msgstr "Jedno alebo viac povinných polí nebolo vložených" +msgstr "Jedno alebo viac požadovaných polí nebolo postúpených" #: contrib/comments/views/comments.py:194 #: contrib/comments/views/comments.py:283 msgid "Somebody tampered with the comment form (security violation)" -msgstr "Niekto skúšal manipulovať s formulárom komentára (porušená bezpečnosť)" +msgstr "Bola zistena neoprávnená manipulácia s formulárom komentára " #: contrib/comments/views/comments.py:204 #: contrib/comments/views/comments.py:289 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " "invalid" -msgstr "" +msgstr "Formulár kometára má chybný výstupný parameter -- objectID bol chybný" "Formulár komentára ma chybný 'cieľový' parameter -- the objekt ID bol " "poškodený" #: contrib/comments/views/comments.py:254 #: contrib/comments/views/comments.py:318 msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "Formulár komentára neposkytuje odpoveď buď 'prezri' alebo 'pošli'" - -#: contrib/flatpages/models/flatpages.py:6 contrib/admin/views/doc.py:284 -msgid "URL" -msgstr "URL" +msgstr "Neprišla ani jedna z možných volieb 'preview' alebo 'post'" -#: contrib/flatpages/models/flatpages.py:7 +#: contrib/admin/filterspecs.py:32 +#, python-format msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +"<h3>By %s:</h3>\n" +"<ul>\n" msgstr "" -"Príklad: '/about/contact/'. Uistite sa, že máte vložené ako úvodné tak aj " -"záverečné lomítka." +"<h3>Od %s:</h3>\n" +"<ul>\n" -#: contrib/flatpages/models/flatpages.py:8 -msgid "title" -msgstr "názov" +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "Všetko" -#: contrib/flatpages/models/flatpages.py:9 -msgid "content" -msgstr "obsah" +#: contrib/admin/filterspecs.py:100 +#, fuzzy +msgid "Any date" +msgstr "Ľubovoľný dátum" -#: contrib/flatpages/models/flatpages.py:10 -msgid "enable comments" -msgstr "povolené komentáre" +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "Dnes" -#: contrib/flatpages/models/flatpages.py:11 -msgid "template name" -msgstr "meno predlohy" +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "Posledných 7 dní" -#: contrib/flatpages/models/flatpages.py:12 -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/admin/filterspecs.py:106 +msgid "This month" +msgstr "Tento mesiac" -#: contrib/flatpages/models/flatpages.py:13 -msgid "registration required" -msgstr "musíte byť zaregistrovaný" +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "Tento rok" -#: contrib/flatpages/models/flatpages.py:13 -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/admin/filterspecs.py:134 +msgid "Yes" +msgstr "Áno" -#: contrib/flatpages/models/flatpages.py:17 -msgid "flat page" -msgstr "plochá stránka" +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "Nie" -#: contrib/flatpages/models/flatpages.py:18 -msgid "flat pages" -msgstr "ploché stránky" +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "Neznámy" #: contrib/admin/models/admin.py:6 msgid "action time" @@ -397,24 +395,159 @@ msgstr "záznam priebehu" msgid "log entries" msgstr "záznamy priebehu" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "Všetky dátumy" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Prihlásenie" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Prosím prihláste sa znova, vaše sedenie stratilo platnosť. Žiadne obavy: " +"Všetko čo ste vložili bolo uchované." + +#: contrib/admin/views/decorators.py:63 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Vyzera, že váš prehliadač neakceptuje cookies. Prosím povoľte cookies, " +"znovu natiahnite túto stránku, a skúste znova." + +#: contrib/admin/views/decorators.py:77 +msgid "Usernames cannot contain the '@' character." +msgstr "Meno užívateľa nemôže obsahovať znak '@'." + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Vaša emailová adresa nie je vaším užívateľským menon. Skuste toto '%s' " +"namiesto nej" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Spáva webu" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "Vyber %s" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "Vyber %s na zmenu" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr " %(name)s \"%(obj)s\" bol úspešne pridaný." + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "Môžete to zmeniť znovu nižšie." + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "Môžete pridať ďalší %s nižšie." + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Pridaj" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "Pridal %s" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "a" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Zmenený" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "Vymazaný" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "Polia neboli zmenené." + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr " %(name)s \"%(obj)s\" bol úspešne zmenený." + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" +" %(name)s \"%(obj)s\" bol úspešne pridaný. Môžete ho zmeniť zase nižšie." + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Zmeň" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Jeden alebo viac %(fieldname)s v %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "jeden alebo viac %(fieldname)s v %(name)s:" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr " %(name)s \"%(obj)s\" bol úspešne vymazaný." + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "Ste si istý/á?" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Zmena histórie:" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 msgid "Integer" -msgstr "Celočíselná hodnota" +msgstr "Integer" #: contrib/admin/views/doc.py:263 msgid "Boolean (Either True or False)" -msgstr "Logická hodnota (buď True alebo False)" +msgstr "Boolean (Buď True alebo False)" #: contrib/admin/views/doc.py:264 #, python-format msgid "String (up to %(maxlength)s)" -msgstr "Reťazec (maximálne do %(maxlength)s)" +msgstr "Reťazec (maximálne do %(maxlength)s)" #: contrib/admin/views/doc.py:265 msgid "Comma-separated integers" -msgstr "Čiarka oddeľuje celé čísla" +msgstr "Celé čísla oddelené čiarkami" #: contrib/admin/views/doc.py:266 msgid "Date (without time)" @@ -422,7 +555,7 @@ msgstr "Dátum (bez času)" #: contrib/admin/views/doc.py:267 msgid "Date (with time)" -msgstr "Dátum ( a čas)" +msgstr "Dátum (a čas)" #: contrib/admin/views/doc.py:268 msgid "E-mail address" @@ -438,7 +571,7 @@ msgstr "Desiatkové číslo" #: contrib/admin/views/doc.py:276 msgid "Boolean (Either True, False or None)" -msgstr "Logická hodnota (buď True, False alebo None)" +msgstr "Boolean (Možné hodnoty sú True, False alebo None)" #: contrib/admin/views/doc.py:277 msgid "Phone number" @@ -446,7 +579,7 @@ msgstr "Číslo telefónu" #: contrib/admin/views/doc.py:280 msgid "String (up to 50)" -msgstr "Reťazec (do 50 )" +msgstr "Reťazec (maximálne do 50 znakov)" #: contrib/admin/views/doc.py:282 msgid "Text" @@ -458,58 +591,55 @@ msgstr "Čas" #: contrib/admin/views/doc.py:285 msgid "U.S. state (two uppercase letters)" -msgstr "U.S. štát (dve veľké písmena)" +msgstr "U.S. štát (dve veľké písmená)" #: contrib/admin/views/doc.py:286 msgid "XML text" msgstr "XML text" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Začiatok" -#: contrib/admin/templates/admin/object_history.html:5 -msgid "History" -msgstr "História" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Dátum/čas" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Pridaj %(name)s" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "Uživateľ" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Pridaj" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Udalosť" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Zmeň" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "PLNY_DATUM_AJ_CAS" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Nemáte povolenie na zmeny ." -#: 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 "" -"Tento object nemá históriu zmien. Možno nebol pridaný prostredníctvom tohoto " -"web admina" +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Posledné udalosti" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Django web admin" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Moje udalosti" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administrácia Django" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Nepovolené" #: contrib/admin/templates/admin/500.html:4 msgid "Server error" @@ -531,42 +661,46 @@ 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ť." -#: 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/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +msgstr "História" -#: 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/object_history.html:18 +msgid "Date/time" +msgstr "Dátum/čas" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Pridaj" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "Uživateľ" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Zmeň" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Udalosť" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Nemáte povolenie na zmeny ." +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "PLNY_DATUM_AJ_CAS" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Posledné udalosti" +#: 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 "" +"Tento object nemá históriu zmien. Možno nebol pridaný prostredníctvom tohoto " +"web admina" -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Moje udalosti" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django web admin" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Nepovolené" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Spravované Djangom" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" -msgstr "Meno:" +msgstr "Meno užívateľa:" #: contrib/admin/templates/admin/login.html:18 msgid "Password:" @@ -576,21 +710,37 @@ msgstr "Heslo:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Zabudli ste<a href=\"/password_reset/\"> vaše heslo</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Prihlásenie" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +#, fuzzy +msgid "Page not found" +msgstr "" +"#-#-#-#-# django.po (PACKAGE VERSION) #-#-#-#-#\n" +"Stránka nebola nájdená\n" +"#-#-#-#-# django.po (PACKAGE VERSION) #-#-#-#-#\n" +"Stránka sa nenašla" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Vítajte," +#: 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.html:23 -msgid "Change password" -msgstr "Zmena hesla" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "Pozri tu" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Odhlásenie" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Prosím opravte chybu, je nižšie" +msgstr[1] "Prosím opravte chyby, sú nižšie" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "Objednávanie" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "Objednávka:" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -616,6 +766,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Ano, som si istý" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Vítajte," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Zmena hesla" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Odhlásenie" + +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Vymazať" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Uložiť ako nový" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Uložiť a pridať ďalší" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Uložiť a pokračovať editovať" + +#: contrib/admin/templates/admin/submit_line.html:7 +#, fuzzy +msgid "Save" +msgstr "Uložiť" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +msgstr "Podľa %(title)s " + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -730,6 +918,157 @@ msgstr "Ďakujeme, že používate naše stránky!" msgid "The %(site_name)s team" msgstr "Skupina %(site_name)s" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentácia" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Záložky" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Záložky dokumentácie" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" +"\n" +"<p class=\"help\">Na inštaláciu zarážok, chyťte a potiahnite linku do vášho " +"bookmarks\n" +"toolbar, alebo klik pravou myšou na linku a pridať do vášho bookmarks.\n" +" Teraz si môžete vyberať zarážky z ľubovoľnej stránky webu.\n" +"Poznámka: pri tvorbe niektorých zarážok, sa vyžaduje aby ste sa pohybovali\n" +"po stránke z počítača označeného ako \"internal\" (obrátte sa na vášho \n" +"systémového administrátora, ak nie ste si istý či váš počítač je \"internal" +"\").</p>\n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Dokumentácia tejto stránky" + +#: 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 "Skoč na ľubovoľnú stránku dokumentácie, z ponuky na tejto stránke." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "Ukáž objekt id" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Ukáž content-type a jedinečné ID pre stránky reprezentované jednoduchými " +"objektami." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Edituj tento objekt (aktuálne okno)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "Skoč na admin stránku z jednoduchých objektov zastupujúcich stránku." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +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 hore, ale otvorí admin stránku v novom okne" + +#: contrib/redirects/models/redirects.py:7 +msgid "redirect from" +msgstr "presmerovaný z" + +#: contrib/redirects/models/redirects.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/redirects.py:9 +msgid "redirect to" +msgstr "presmerovaný na " + +#: contrib/redirects/models/redirects.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/redirects.py:12 +msgid "redirect" +msgstr "presmerovanie" + +#: contrib/redirects/models/redirects.py:13 +msgid "redirects" +msgstr "presmerovania" + +#: contrib/flatpages/models/flatpages.py:7 +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/flatpages.py:8 +msgid "title" +msgstr "názov" + +#: contrib/flatpages/models/flatpages.py:9 +msgid "content" +msgstr "obsah" + +#: contrib/flatpages/models/flatpages.py:10 +msgid "enable comments" +msgstr "povolené komentáre" + +#: contrib/flatpages/models/flatpages.py:11 +msgid "template name" +msgstr "meno predlohy" + +#: contrib/flatpages/models/flatpages.py:12 +#, fuzzy +msgid "" +"Example: 'flatpages/contact_page'. If this isn't provided, the system will " +"use 'flatpages/default'." +msgstr "" +"Príklad: 'flatfiles/contact_page'. Ak sa toto nevykonalo, systém použije " +"'flatfiles/default'." + +#: contrib/flatpages/models/flatpages.py:13 +msgid "registration required" +msgstr "musíte byť zaregistrovaný" + +#: contrib/flatpages/models/flatpages.py:13 +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/flatpages.py:17 +msgid "flat page" +msgstr "plochá stránka" + +#: contrib/flatpages/models/flatpages.py:18 +msgid "flat pages" +msgstr "ploché stránky" + #: utils/translation.py:335 msgid "DATE_FORMAT" msgstr "DATUM_FORMAT" @@ -847,22 +1186,24 @@ msgid "Dec." msgstr "Dec." #: utils/timesince.py:12 +#, fuzzy msgid "year" msgid_plural "years" -msgstr[0] "rok" -msgstr[1] "rokov" +msgstr[0] "Tento rok" +msgstr[1] "Tento rok" #: utils/timesince.py:13 +#, fuzzy msgid "month" msgid_plural "months" -msgstr[0] "mesiac" -msgstr[1] "mesiacov" +msgstr[0] "Tento mesiac" +msgstr[1] "Tento mesiac" #: utils/timesince.py:14 msgid "day" msgid_plural "days" -msgstr[0] "ďeň" -msgstr[1] "dní" +msgstr[0] "Dnes" +msgstr[1] "Dnes" #: utils/timesince.py:15 msgid "hour" @@ -981,8 +1322,8 @@ msgid "password" msgstr "heslo" #: models/auth.py:37 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Použi '[algo]$[salt]$[hexdigest]'" +msgid "Use '[algo]$[salt]$[hexdigest]" +msgstr "" #: models/auth.py:38 msgid "staff status" @@ -1108,6 +1449,48 @@ msgstr "Švédsky" msgid "Simplified Chinese" msgstr "Zjednodušená činština " +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Toto pole nie je platné." + +#: core/formfields.py:339 +#, fuzzy, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Uistite sa, že text je kratší ako %s znakov." +msgstr[1] "Uistite sa, že text je kratší ako %s znakov." + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Malé písmena tu nie sú povolené." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Určená platná voľba; '%(data)s' sa nenachádza v %(choices)s." + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "Poslaný súbor je prázdny." + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Vložte celé číslo s hodnotou medzi -32,768 a 32,767." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Vložte celé kladné číslo." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Vložte celé číslo s hodnotou medzi 0 a 32,767." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Toto môže obsahovať len písmená, číslice a podčiarkovníky." @@ -1373,13 +1756,40 @@ msgstr "" "Atribút \"%(attr)s\" na riadku %(line)s má neplatnú hodnotu. (Riadok začína " "s \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Prosím vložte platné %s." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "%(optname)s s týmto %(fieldname)s už existuje." + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr "Identifikátory oddeľte čiarkami." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 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." + +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Vložte platné meno súboru." + +#: core/meta/fields.py:780 +#, 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 chybná" +msgstr[1] "Prosím vložte platné %(self)s IDs. Hodnoty %(value)r sú chybné" + +#~ msgid "Use an MD5 hash -- not the raw password." +#~ msgstr "" +#~ "Vložte takú hodnotu hesla , ako vám ju vráti MD5, nevkladajte ho priamo. " diff --git a/django/conf/locale/sr/LC_MESSAGES/django.mo b/django/conf/locale/sr/LC_MESSAGES/django.mo Binary files differindex f1943fa871..c577f4918a 100644 --- a/django/conf/locale/sr/LC_MESSAGES/django.mo +++ b/django/conf/locale/sr/LC_MESSAGES/django.mo diff --git a/django/conf/locale/sr/LC_MESSAGES/django.po b/django/conf/locale/sr/LC_MESSAGES/django.po index 2b729e0597..1d9cb0a81e 100644 --- a/django/conf/locale/sr/LC_MESSAGES/django.po +++ b/django/conf/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Django Serbian (latin) translation v1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" -"PO-Revision-Date: 2005-11-13 19:21+0100\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" +"PO-Revision-Date: 2005-11-20 19:07+0100\n" "Last-Translator: Nebojša Đorđević <nesh@studioquattro.co.yu>\n" "Language-Team: Nesh <nesh@studioquatro.co.yu> & Petar <petar.maric@gmail." "com>\n" @@ -19,95 +19,92 @@ msgstr "" #: contrib/comments/models/comments.py:8 #: contrib/comments/models/comments.py:161 -#, fuzzy msgid "object ID" msgstr "id objekta" #: contrib/comments/models/comments.py:9 msgid "headline" -msgstr "" +msgstr "naslov" #: contrib/comments/models/comments.py:10 #: contrib/comments/models/comments.py:162 -#, fuzzy msgid "comment" -msgstr "sadržaj" +msgstr "komentar" #: contrib/comments/models/comments.py:11 msgid "rating #1" -msgstr "" +msgstr "rejting #1" #: contrib/comments/models/comments.py:12 msgid "rating #2" -msgstr "" +msgstr "rejting #2" #: contrib/comments/models/comments.py:13 msgid "rating #3" -msgstr "" +msgstr "rejting #3" #: contrib/comments/models/comments.py:14 msgid "rating #4" -msgstr "" +msgstr "rejting #4" #: contrib/comments/models/comments.py:15 msgid "rating #5" -msgstr "" +msgstr "rejting #5" #: contrib/comments/models/comments.py:16 msgid "rating #6" -msgstr "" +msgstr "rejting #6" #: contrib/comments/models/comments.py:17 msgid "rating #7" -msgstr "" +msgstr "rejting #7" #: contrib/comments/models/comments.py:18 msgid "rating #8" -msgstr "" +msgstr "rejting #8" #: contrib/comments/models/comments.py:23 msgid "is valid rating" -msgstr "" +msgstr "da li je rejting validan" #: contrib/comments/models/comments.py:24 #: contrib/comments/models/comments.py:164 msgid "date/time submitted" -msgstr "" +msgstr "datum/vreme slanja" #: contrib/comments/models/comments.py:25 #: contrib/comments/models/comments.py:165 msgid "is public" -msgstr "" +msgstr "da li je javni" #: contrib/comments/models/comments.py:26 contrib/admin/views/doc.py:274 -#, fuzzy msgid "IP address" -msgstr "e-mail adresa" +msgstr "IP adresa" #: contrib/comments/models/comments.py:27 msgid "is removed" -msgstr "" +msgstr "obrisan je" #: contrib/comments/models/comments.py:27 msgid "" "Check this box if the comment is inappropriate. A \"This comment has been " "removed\" message will be displayed instead." msgstr "" +"Selektujte ako je komentar neodgovarajući. Biće ispisano \"Ovaj komentar je " +"obrisan\" umesto teksta komentara." #: contrib/comments/models/comments.py:31 msgid "Comment" -msgstr "" +msgstr "Komentar" #: contrib/comments/models/comments.py:32 -#, fuzzy msgid "Comments" -msgstr "omogućite komentare" +msgstr "Komentari" #: contrib/comments/models/comments.py:85 #: contrib/comments/models/comments.py:204 -#, fuzzy msgid "Content object" -msgstr "tip sadržaja" +msgstr "Objekt sa sadržajem" #: contrib/comments/models/comments.py:113 #, python-format @@ -118,72 +115,69 @@ msgid "" "\n" "http://%(domain)s%(url)s" msgstr "" +"Poslao %(user)s u %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" #: contrib/comments/models/comments.py:163 -#, fuzzy msgid "person's name" msgstr "ime" #: contrib/comments/models/comments.py:166 -#, fuzzy msgid "ip address" -msgstr "e-mail adresa" +msgstr "ip adresa" #: contrib/comments/models/comments.py:168 msgid "approved by staff" -msgstr "" +msgstr "odobreno od moderatora" #: contrib/comments/models/comments.py:172 -#, fuzzy msgid "Free comment" -msgstr "omogućite komentare" +msgstr "Slobodan komentar" #: contrib/comments/models/comments.py:173 -#, fuzzy msgid "Free comments" -msgstr "omogućite komentare" +msgstr "Slobodni komentari" #: contrib/comments/models/comments.py:209 msgid "score" -msgstr "" +msgstr "rezultat" #: contrib/comments/models/comments.py:210 -#, fuzzy msgid "score date" -msgstr "datum prestanka važenja sesije" +msgstr "datum rezultata" #: contrib/comments/models/comments.py:213 msgid "Karma score" -msgstr "" +msgstr "\"Karma\" rezultat" #: contrib/comments/models/comments.py:214 msgid "Karma scores" -msgstr "" +msgstr "\"Karma\" rezultati" #: contrib/comments/models/comments.py:223 #, python-format msgid "%(score)d rating by %(user)s" -msgstr "" +msgstr "Rezultat %(score)d od %(user)s" #: contrib/comments/models/comments.py:248 -#, fuzzy msgid "flag date" -msgstr "statična strana" +msgstr "datum markiranja" #: contrib/comments/models/comments.py:251 -#, fuzzy msgid "User flag" -msgstr "Korisnik" +msgstr "Korisnički marker" #: contrib/comments/models/comments.py:252 -#, fuzzy msgid "User flags" -msgstr "Korisnici" +msgstr "Korisnički markeri" #: contrib/comments/models/comments.py:256 #, python-format msgid "Flag by %r" -msgstr "" +msgstr "%r je markirao" #: contrib/comments/models/comments.py:271 #, python-format @@ -192,42 +186,44 @@ msgid "" "\n" "%(text)s" msgstr "" +"Ovaj komentar je markiran od %(user)s:\n" +"\n" +"%(text)s" #: contrib/comments/models/comments.py:278 -#, fuzzy msgid "deletion date" -msgstr "podaci sesije" +msgstr "datum brisanja" #: contrib/comments/models/comments.py:281 msgid "Moderator deletion" -msgstr "" +msgstr "Brisanje od strane moderatora" #: contrib/comments/models/comments.py:282 msgid "Moderator deletions" -msgstr "" +msgstr "Brisanja od strane moderatora" #: contrib/comments/models/comments.py:286 #, python-format msgid "Moderator deletion by %r" -msgstr "" +msgstr "Obrisao moderator %r" #: contrib/comments/views/karma.py:18 msgid "Anonymous users cannot vote" -msgstr "" +msgstr "Anonimni korisnici ne mogu da glasaju" #: contrib/comments/views/karma.py:22 -#, fuzzy msgid "Invalid comment ID" -msgstr "omogućite komentare" +msgstr "Neispravan ID komentara" #: contrib/comments/views/karma.py:24 msgid "No voting for yourself" -msgstr "" +msgstr "Ne možete da glasate sami za sebe" +# nesh: grrrrr, ala je rogobatno #: contrib/comments/views/comments.py:25 msgid "" "This rating is required because you've entered at least one other rating." -msgstr "" +msgstr "Ovaj rejting je obavezan pošto ste uneli još najmanje jedan rejting." #: contrib/comments/views/comments.py:109 #, python-format @@ -242,9 +238,22 @@ msgid_plural "" "\n" "%(text)s" msgstr[0] "" +"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s " +"komentara:\n" +"\n" +"%(text)s" msgstr[1] "" +"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s " +"komentara:\n" +"\n" +"%(text)s" msgstr[2] "" +"Ovaj komentar je poslat od korisnika koji je poslao manje od %(count)s " +"komentara:\n" +"\n" +"%(text)s" +# nesh: skethcy??? #: contrib/comments/views/comments.py:114 #, python-format msgid "" @@ -252,21 +261,24 @@ msgid "" "\n" "%(text)s" msgstr "" +"Ovaj komentar je poslat od \"sketcy\" korisnika:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:186 #: contrib/comments/views/comments.py:277 msgid "Only POSTs are allowed" -msgstr "" +msgstr "Jedino je POST dozvoljen" #: contrib/comments/views/comments.py:190 #: contrib/comments/views/comments.py:281 msgid "One or more of the required fields wasn't submitted" -msgstr "" +msgstr "Jedno ili više obaveznih polja nije poslato." #: contrib/comments/views/comments.py:194 #: contrib/comments/views/comments.py:283 msgid "Somebody tampered with the comment form (security violation)" -msgstr "" +msgstr "Neko je menjao form za komentare (povreda sigurnosti)" #: contrib/comments/views/comments.py:204 #: contrib/comments/views/comments.py:289 @@ -274,15 +286,62 @@ msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " "invalid" msgstr "" +"Form komentara ima neispravni 'target' parametar -- ID objekta nije ispravan" #: contrib/comments/views/comments.py:254 #: contrib/comments/views/comments.py:318 msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "Ovaj komentar nije koristio 'preview' ili 'post'" + +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" msgstr "" +"<h3>Od %s:</h3>\n" +"<ul>\n" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "Sve" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "Bilo koji datum" + +#: contrib/admin/filterspecs.py:101 +msgid "Today" +msgstr "Danas" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "Zadnjih sedam dana" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "Ovaj mesec" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "Ova godina" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "Da" + +#: contrib/admin/filterspecs.py:134 +msgid "No" +msgstr "Ne" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "Nepoznato" #: contrib/admin/models/admin.py:6 msgid "action time" -msgstr "Datum/vreme akcije" +msgstr "vreme akcije" #: contrib/admin/models/admin.py:9 msgid "object id" @@ -308,96 +367,276 @@ msgstr "unos u dnevnik izmena" msgid "log entries" msgstr "unosi u dnevnik izmena" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "Svi datumi" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Prijavi se" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Ponovo se prijavite pošto je vaša sesija istekla. Ne brinite, vaši podaci su " +"sačuvani." + +#: contrib/admin/views/decorators.py:63 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Izgleda da vaš browser ne podržava \"cookie\". Uključite ih, ponovo učitajte " +"stranu i pokušajte ponovo." + +#: contrib/admin/views/decorators.py:77 +msgid "Usernames cannot contain the '@' character." +msgstr "Korisnička imena ne mogu sadržati karakter '@'." + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "Vaša e-mail adresa nije koriničko ime. Probajte sa '%s'." + +#: contrib/admin/views/main.py:50 +msgid "Site administration" +msgstr "Administracija sajta" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "Izaberi %s" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "Izaberi %s za izmenu" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "Uspešno dodat %(name)s \"%(obj)s\"." + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "Ispod ga možete ponovo izmeniti." + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "Ispod možete dodati još jedan %s." + +#: contrib/admin/views/main.py:451 +#, python-format +msgid "Add %s" +msgstr "Dodaj %s" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "Dodat %s" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "i" + +#: contrib/admin/views/main.py:469 +#, python-format +msgid "Changed %s." +msgstr "Izmenjen %s." + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "Obrisan %s" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "Nijedno polje nije promenjeno." + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "Uspešno izmenjen: %(name)s \"%(obj)s\"." + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "%(name)s \"%(obj)s\" je uspešno dodat. Ispod ga možete ponovo menjati." + +#: contrib/admin/views/main.py:546 +#, python-format +msgid "Change %s" +msgstr "Izmeni %s" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Jedno ili više %(fieldname)s u %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Jedan ili više %(fieldname)s u %(name)s:" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Uspešno obrisan: %(name)s \"%(obj)s\"." + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "Da li ste sigurni?" + +#: contrib/admin/views/main.py:678 +#, python-format +msgid "Change history: %s" +msgstr "Istorija izmena: %s" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 msgid "Integer" -msgstr "" +msgstr "Ceo broj" #: contrib/admin/views/doc.py:263 msgid "Boolean (Either True or False)" -msgstr "" +msgstr "Logička vrednost (Tačno ili Netačno)" #: contrib/admin/views/doc.py:264 #, python-format msgid "String (up to %(maxlength)s)" -msgstr "" +msgstr "Niz karaktera (maksimalno %(maxlength)s karaktera)" #: contrib/admin/views/doc.py:265 msgid "Comma-separated integers" -msgstr "" +msgstr "Brojevi razdvojeni zarezima" #: contrib/admin/views/doc.py:266 -#, fuzzy msgid "Date (without time)" -msgstr "Datum/vreme akcije" +msgstr "Datum (bez vremena)" #: contrib/admin/views/doc.py:267 -#, fuzzy msgid "Date (with time)" -msgstr "Datum/vreme" +msgstr "Datum (sa vremenom)" #: contrib/admin/views/doc.py:268 -#, fuzzy msgid "E-mail address" -msgstr "E-mail adresa:" +msgstr "E-mail adresa" #: contrib/admin/views/doc.py:269 contrib/admin/views/doc.py:272 msgid "File path" -msgstr "" +msgstr "Putanja do fajla" #: contrib/admin/views/doc.py:270 -#, fuzzy msgid "Decimal number" -msgstr "Decembar" +msgstr "Decimalni broj" #: contrib/admin/views/doc.py:276 msgid "Boolean (Either True, False or None)" -msgstr "" +msgstr "Logička vrednost (Tačno, Netačno ili prazno)" #: contrib/admin/views/doc.py:277 -#, fuzzy msgid "Phone number" -msgstr "Unesite celi broj." +msgstr "Telefonski broj" #: contrib/admin/views/doc.py:280 msgid "String (up to 50)" -msgstr "" +msgstr "Niz karaktera (maksimalno 50 karaktera)" #: contrib/admin/views/doc.py:282 msgid "Text" -msgstr "" +msgstr "Tekst" #: contrib/admin/views/doc.py:283 msgid "Time" -msgstr "" +msgstr "Vreme" # nesh: ovo se valjda ne prevodi # petar: ne prevodi se #: contrib/admin/views/doc.py:284 contrib/flatpages/models/flatpages.py:6 msgid "URL" -msgstr "" +msgstr "URL" #: contrib/admin/views/doc.py:285 msgid "U.S. state (two uppercase letters)" -msgstr "" +msgstr "U.S. država (dva VELIKA slova)" #: contrib/admin/views/doc.py:286 msgid "XML text" -msgstr "" +msgstr "XML tekst" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 "Početna strana" +#: contrib/admin/templates/admin/change_list.html:10 +#, python-format +msgid "Add %(name)s" +msgstr "Dodaj %(name)s" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Dodaj" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Izmena" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Nemate prava da vršite izmene." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Skorije akcije" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Moje akcije" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Nema dostupnih" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Greška na serveru" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Greška na serveru (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Greška na serveru <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Dogodila se greška koja je prijavljena administratorima i biće popravljena " +"uskoro. Hvala Vam na strpljenju." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Istorija" @@ -433,59 +672,6 @@ msgstr "Django administracija sajta" msgid "Django administration" msgstr "Django administracija" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Greška na serveru" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Greška na serveru (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Greška na serveru <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Dogodila se greška koja je prijavljena administratorima i biće popravljena " -"uskoro. Hvala Vam na strpljenju." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Strana nije pronađena" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Tražena strana ne postoji." - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Dodaj" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Izmena" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Nemate prava da vršite izmene." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Skorije akcije" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Moje akcije" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Nema dostupnih" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Korisničko ime:" @@ -498,21 +684,33 @@ msgstr "Lozinka:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Da li ste <a href=\"/password_reset/\">zaboravili Vašu lozinku?</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Prijavi se" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Strana nije pronađena" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Dobrodošli," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Tražena strana ne postoji." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Izmeni lozinku" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "Pogledaj na sajtu" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Odjavi se" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Ispravite dole navedenu grešku." +msgstr[1] "Ispravite dole navedene greške." +msgstr[2] "Ispravite dole navedene greške." + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "Redosled" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "Red:" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -537,6 +735,43 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Da, siguran sam" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Dobrodošli," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Izmeni lozinku" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Odjavi se" + +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Obriši" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Snimi kao novi" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Snimi i dodaj još jedan" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Snimi i nastavi sa izmenama" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Snimi" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +msgstr "Po %(title)s " + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -651,6 +886,76 @@ msgstr "Hvala Vam na poseti!" msgid "The %(site_name)s team" msgstr "%(site_name)s tim" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentacija" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Dokumentacioni \"bookmarklets\"" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" +"\n" +"<p class=\"help\">Da bi ste instalirali \"bookmarklet\", odvučite link u " +"vaše \"bookmark\"-e, ili kliknite desnim tasterom i dodajte ga. Sada možete " +"da izaberete \"bookmark\" sa bilo koje strane na sajtu. Napomena: pristup " +"nekima od strana mora biti sa kompjutera čija je IP adresa označena kao " +"\"internal\" (kontaktirajte sistem administratora ako niste sigurni da li je " +"vaš IP označen kao \"internal\").</p>\n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Dokumentacija za ovu stranu" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Skače sa bilo koje strane na stranu sa dokumentacijom za \"view\" koji " +"generiše tu stranu." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Prikaži ID objekta" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Prikazuje \"content-type\" i jedinstveni ID strane koje predstavlja jedan " +"objekt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Izmena objekta (u aktivnom prozoru)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "Skače na admin stranu za strane koje predstavljaju objekt." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Izmeni objekt (novi prozor)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "Kao iznad, samo otvara admin stranu u novom prozoru." + #: contrib/redirects/models/redirects.py:7 msgid "redirect from" msgstr "redirekcija od" @@ -711,8 +1016,8 @@ msgid "" "Example: 'flatpages/contact_page'. If this isn't provided, the system will " "use 'flatpages/default'." msgstr "" -"Primer: 'flatfiles/contact-page'. Ako nije dato sistem će koristiti " -"'flatfiles/default'." +"Primer: 'flatpages/contact-page'. Ako nije dato sistem će koristiti " +"flatpages/default'." #: contrib/flatpages/models/flatpages.py:13 msgid "registration required" @@ -903,7 +1208,7 @@ msgstr "sajtovi" #: models/core.py:28 msgid "label" -msgstr "" +msgstr "labela" #: models/core.py:29 models/core.py:40 models/auth.py:6 models/auth.py:19 msgid "name" @@ -911,11 +1216,11 @@ msgstr "ime" #: models/core.py:31 msgid "package" -msgstr "" +msgstr "paket" #: models/core.py:32 msgid "packages" -msgstr "" +msgstr "paketi" #: models/core.py:42 msgid "python module name" @@ -951,7 +1256,7 @@ msgstr "sesije" #: models/auth.py:8 msgid "codename" -msgstr "" +msgstr "kodno ime" #: models/auth.py:10 msgid "Permission" @@ -1040,83 +1345,120 @@ msgstr "Važni datumi" msgid "Message" msgstr "Poruka" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "Bengalski" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Češki" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Welšski" -#: conf/global_settings.py:39 -#, fuzzy +#: conf/global_settings.py:40 msgid "Danish" -msgstr "Španski" +msgstr "Danski" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Nemački" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Engleski" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Španski" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Francuski" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" -msgstr "" +msgstr "Galski" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" -msgstr "" +msgstr "Islandski" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italijanski" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norveški" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brazilski" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "Rumunski" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Ruski" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "Slovački" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Srpski" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "Švedski" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Kineski (pojednostavljen)" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +msgid "This field is required." +msgstr "Obavezno polje." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Tekst mora imati manje od %s karaktera." +msgstr[1] "Tekst mora imati manje od %s karaktera." +msgstr[2] "Tekst mora imati manje od %s karaktera." + +#: core/formfields.py:344 +msgid "Line breaks are not allowed here." +msgstr "Novi redovi ovde nisu dozvoljeni." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Izaberite validnu opciju: '%(data)s' nije u %(choices)s." + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "Poslati fajl je prazan." + +#: core/formfields.py:659 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Unesite celi broj između -32,768 i 32,767." + +#: core/formfields.py:668 +msgid "Enter a positive number." +msgstr "Unesite pozitivan broj." + +#: core/formfields.py:677 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Unesite celi broj između 0 i 32,767." + # nesh: Ovo je opis za stari SlugField #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." @@ -1201,6 +1543,7 @@ msgstr "URL %s ne pokazuje na ispravnu sliku" #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "" +"Telefonski brojevi moraju biti u formatu XXX-XXX-XXXX. \"%s\" je neispravan." #: core/validators.py:169 #, python-format @@ -1238,7 +1581,7 @@ msgstr "URL %s je neispravan link." # nesh: Ni ovo nije interesantno za i18n #: core/validators.py:216 msgid "Enter a valid U.S. state abbreviation." -msgstr "" +msgstr "Unesite ispravnu skraćenicu za U.S. državu." #: core/validators.py:231 #, python-format @@ -1385,16 +1728,50 @@ msgstr "" "Atribut \"%(attr)s\" u redu %(line)s ima neispravnu vrednost. (Red počinje " "sa \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, python-format +msgid "Please enter a valid %s." +msgstr "Unesite ispravan %s." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "%(optname)s sa ovim %(fieldname)s već postoji." + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " Odvojite višestruke ID-ove zarezima." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" " Koristite \"Ctrl\" (PC) ili \"Jabuku\" (Mek) da bi ste selektovali više " "stavki." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Unesite MD5 hash šifre -- ne unosite sam tekst šifre." +#: core/meta/fields.py:511 +msgid "Enter a valid filename." +msgstr "Unesite ispravno ime fajla." + +#: core/meta/fields.py:780 +#, 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] "Unesite validne %(self)s ID-ove. Vrednost %(value)r je neispravna." +msgstr[1] "Unesite validne %(self)s ID-ove. Vrednost %(value)r je neispravna." +msgstr[2] "Unesite validne %(self)s ID-ove. Vrednost %(value)r je neispravna." + +#~ msgid "Error in Template" +#~ msgstr "Greška u templejtu" + +#~ msgid "" +#~ "\n" +#~ "In template %(name)s, error at line %(line)s:\n" +#~ msgstr "" +#~ "\n" +#~ "U templejtu %(name)s, greška u redu %(line)s:\n" + +#, fuzzy +#~ msgid "count" +#~ msgstr "sadržaj" diff --git a/django/conf/locale/sv/LC_MESSAGES/django.mo b/django/conf/locale/sv/LC_MESSAGES/django.mo Binary files differindex 14f4211804..3a9be99f22 100644 --- a/django/conf/locale/sv/LC_MESSAGES/django.mo +++ b/django/conf/locale/sv/LC_MESSAGES/django.mo diff --git a/django/conf/locale/sv/LC_MESSAGES/django.po b/django/conf/locale/sv/LC_MESSAGES/django.po index fa0fde66c5..ae3c42826b 100644 --- a/django/conf/locale/sv/LC_MESSAGES/django.po +++ b/django/conf/locale/sv/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:35-0600\n" +"POT-Creation-Date: 2005-11-23 00:06+0100\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" @@ -278,6 +278,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "måndag" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "nov" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "tid för händelse" @@ -306,6 +352,134 @@ msgstr "loggpost" msgid "log entries" msgstr "loggpost" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "Logga in" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Administration för Django" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "Lägg till" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "Ändra" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "Ändra" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "Ändra lösenord" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -382,18 +556,72 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 #: contrib/admin/templates/registration/logged_out.html:4 #: contrib/admin/templates/registration/password_reset_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Home" msgstr "Hem" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "Lägg till" + +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "Lägg till" + +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "Ändra" + +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "Du har inte rättigheter att ändra något." + +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "Senaste händelserna" + +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "Mina händelser" + +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "Inga tillgängliga" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Serverfel" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Serverfel (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error <em>(500)</em>" +msgstr "Serverfel <em>(500)</em>" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ett fel har uppstått. Sidadministratören har meddelats via e-post och felet " +"bör åtgärdas snart. Tack för ditt tålamod." + #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 msgid "History" msgstr "Historik" @@ -429,59 +657,6 @@ msgstr "Djangos sidadministration" msgid "Django administration" msgstr "Administration för Django" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Serverfel" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Serverfel (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error <em>(500)</em>" -msgstr "Serverfel <em>(500)</em>" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Ett fel har uppstått. Sidadministratören har meddelats via e-post och felet " -"bör åtgärdas snart. Tack för ditt tålamod." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Sidan kunde inte hittas" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Vi är ledsna, men den efterfrågade sidan kunde inte hittas." - -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "Lägg till" - -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "Ändra" - -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "Du har inte rättigheter att ändra något." - -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "Senaste händelserna" - -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "Mina händelser" - -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "Inga tillgängliga" - #: contrib/admin/templates/admin/login.html:15 msgid "Username:" msgstr "Användarnamn:" @@ -494,21 +669,32 @@ msgstr "Lösenord:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "Har du <a href=\"/password_reset/\">glömt ditt lösenord</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "Logga in" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Sidan kunde inte hittas" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Välkommen," +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Vi är ledsna, men den efterfrågade sidan kunde inte hittas." -#: contrib/admin/templates/admin/base.html:23 -msgid "Change password" -msgstr "Ändra lösenord" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "Logga ut" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -534,6 +720,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "Ja, jag är säker" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "Välkommen," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "Ändra lösenord" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "Logga ut" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "aktiv" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -650,6 +874,66 @@ msgstr "Tack för att du använder vår sida!" msgid "The %(site_name)s team" msgstr "%(site_name)s-laget" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "objektets id" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "vidarebefodra från" @@ -1034,83 +1318,125 @@ msgstr "Viktiga datum" msgid "Message" msgstr "Meddelande" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "Bengaliska" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "Tjeckiska" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "Walesiska" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 #, fuzzy msgid "Danish" msgstr "Spanska" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "Tyska" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "Engelska" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "Spanska" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "Franska" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "Galisiska" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "Italienska" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "Norska" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "Brasilianska" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" msgstr "Rumänska" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "Ryska" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" msgstr "Slovakiska" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "Serbiska" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "Förenklad kinesiska" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "Det här fältet är ogiltigt." + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" +msgstr[1] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "Små bokstäver är inte tillåtna här." + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Fyll i ett heltal." + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "Fyll i ett heltal." + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "Fyll i ett heltal." + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "Det här värdet får bara innehålla bokstäver, tal och understräck." @@ -1377,15 +1703,39 @@ msgstr "" "Attributet \"%(attr)s\" på rad %(line)s har ett ogiltigt värde. (Raden " "börjar med \"%(start)s\".)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "Var god fyll i ett giltigt IP-nummer." + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " Separera flera ID:n med kommatecken." -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" " Håll ner \"Control\", eller \"Command\" på en Mac, för att välja mer än en." -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "Använd en MD5-hash -- inte lösenordet i ren text." +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "Fyll i en giltig e-postadress." + +#: core/meta/fields.py:780 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid" +msgstr[0] "" +msgstr[1] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "innehåll" diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo Binary files differindex 70e29ea3ba..669bc72cea 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo +++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/django/conf/locale/zh_CN/LC_MESSAGES/django.po index 0ce4c6d4cf..fd108e2492 100644 --- a/django/conf/locale/zh_CN/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: django v1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-11-23 11:34-0600\n" +"POT-Creation-Date: 2005-11-23 00:05+0100\n" "PO-Revision-Date: 2005-11-16 12:55+0800\n" "Last-Translator: limodou <limodou@gmail.com>\n" "Language-Team: Simplified Chinese <limodou@gmail.com>\n" @@ -280,6 +280,52 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "" +#: contrib/admin/filterspecs.py:32 +#, python-format +msgid "" +"<h3>By %s:</h3>\n" +"<ul>\n" +msgstr "" + +#: contrib/admin/filterspecs.py:62 contrib/admin/filterspecs.py:79 +#: contrib/admin/filterspecs.py:134 +msgid "All" +msgstr "" + +#: contrib/admin/filterspecs.py:100 +msgid "Any date" +msgstr "" + +#: contrib/admin/filterspecs.py:101 +#, fuzzy +msgid "Today" +msgstr "星期一" + +#: contrib/admin/filterspecs.py:104 +msgid "Past 7 days" +msgstr "" + +#: contrib/admin/filterspecs.py:106 +msgid "This month" +msgstr "" + +#: contrib/admin/filterspecs.py:108 +msgid "This year" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +msgid "Yes" +msgstr "" + +#: contrib/admin/filterspecs.py:134 +#, fuzzy +msgid "No" +msgstr "十一月" + +#: contrib/admin/filterspecs.py:142 +msgid "Unknown" +msgstr "" + #: contrib/admin/models/admin.py:6 msgid "action time" msgstr "动作时间" @@ -308,6 +354,134 @@ msgstr "日志记录" msgid "log entries" msgstr "日志记录" +#: contrib/admin/templatetags/admin_list.py:244 +msgid "All dates" +msgstr "" + +#: contrib/admin/views/decorators.py:22 +#: contrib/admin/templates/admin/login.html:24 +msgid "Log in" +msgstr "登录" + +#: contrib/admin/views/decorators.py:56 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:63 +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:77 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:79 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:50 +#, fuzzy +msgid "Site administration" +msgstr "Django管理员" + +#: contrib/admin/views/main.py:65 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:66 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:421 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:426 contrib/admin/views/main.py:502 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:434 contrib/admin/views/main.py:511 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:451 +#, fuzzy, python-format +msgid "Add %s" +msgstr "增加" + +#: contrib/admin/views/main.py:467 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:467 contrib/admin/views/main.py:469 +#: contrib/admin/views/main.py:471 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:469 +#, fuzzy, python-format +msgid "Changed %s." +msgstr "修改" + +#: contrib/admin/views/main.py:471 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:474 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:499 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:508 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:546 +#, fuzzy, python-format +msgid "Change %s" +msgstr "修改" + +#: contrib/admin/views/main.py:626 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:631 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:660 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:663 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:678 +#, fuzzy, python-format +msgid "Change history: %s" +msgstr "修改口令" + #: contrib/admin/views/doc.py:262 contrib/admin/views/doc.py:271 #: contrib/admin/views/doc.py:273 contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:281 @@ -384,50 +558,49 @@ msgstr "" msgid "XML text" msgstr "" -#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:12 #: contrib/admin/templates/admin/base.html:29 #: 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 -msgid "History" -msgstr "历史" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "日期/时间" +#: contrib/admin/templates/admin/change_list.html:10 +#, fuzzy, python-format +msgid "Add %(name)s" +msgstr "增加" -#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 -msgid "User" -msgstr "用户" +#: contrib/admin/templates/admin/index.html:27 +#: contrib/admin/templates/admin/change_form.html:14 +msgid "Add" +msgstr "增加" -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "动作" +#: contrib/admin/templates/admin/index.html:33 +msgid "Change" +msgstr "修改" -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "N j, Y, P" +#: contrib/admin/templates/admin/index.html:43 +msgid "You don't have permission to edit anything." +msgstr "你无权修改任何东西。" -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "此对象没有修改历史。可能不能通过这个管理站点来增加。" +#: contrib/admin/templates/admin/index.html:51 +msgid "Recent Actions" +msgstr "最近动作" -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Django管理站点" +#: contrib/admin/templates/admin/index.html:52 +msgid "My Actions" +msgstr "我的动作" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Django管理员" +#: contrib/admin/templates/admin/index.html:56 +msgid "None available" +msgstr "无可用的" #: contrib/admin/templates/admin/500.html:4 msgid "Server error" @@ -449,38 +622,40 @@ msgstr "" "存在一个错误。它已经通过电子邮件被报告给站点管理员了,并且应该很快被改正。谢" "谢你的关心。" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "页面没有找到" +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_form.html:19 +msgid "History" +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/object_history.html:18 +msgid "Date/time" +msgstr "日期/时间" -#: contrib/admin/templates/admin/index.html:27 -msgid "Add" -msgstr "增加" +#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47 +msgid "User" +msgstr "用户" -#: contrib/admin/templates/admin/index.html:33 -msgid "Change" -msgstr "修改" +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "动作" -#: contrib/admin/templates/admin/index.html:43 -msgid "You don't have permission to edit anything." -msgstr "你无权修改任何东西。" +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "N j, Y, P" -#: contrib/admin/templates/admin/index.html:51 -msgid "Recent Actions" -msgstr "最近动作" +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "此对象没有修改历史。可能不能通过这个管理站点来增加。" -#: contrib/admin/templates/admin/index.html:52 -msgid "My Actions" -msgstr "我的动作" +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django管理站点" -#: contrib/admin/templates/admin/index.html:56 -msgid "None available" -msgstr "无可用的" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Django管理员" #: contrib/admin/templates/admin/login.html:15 msgid "Username:" @@ -494,21 +669,32 @@ msgstr "口令:" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgstr "<a href=\"/password_reset/\">忘记你的密码</a>?" -#: contrib/admin/templates/admin/login.html:24 -msgid "Log in" -msgstr "登录" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "页面没有找到" -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -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/base.html:23 -msgid "Change password" -msgstr "修改口令" +#: contrib/admin/templates/admin/change_form.html:20 +msgid "View on site" +msgstr "" -#: contrib/admin/templates/admin/base.html:23 -msgid "Log out" -msgstr "注销" +#: contrib/admin/templates/admin/change_form.html:28 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#: contrib/admin/templates/admin/change_form.html:45 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:48 +msgid "Order:" +msgstr "" #: contrib/admin/templates/admin/delete_confirmation.html:7 #, python-format @@ -532,6 +718,44 @@ msgstr "" msgid "Yes, I'm sure" msgstr "是的,我确定" +#: contrib/admin/templates/admin/base.html:23 +msgid "Welcome," +msgstr "欢迎," + +#: contrib/admin/templates/admin/base.html:23 +msgid "Change password" +msgstr "修改口令" + +#: contrib/admin/templates/admin/base.html:23 +msgid "Log out" +msgstr "注销" + +#: contrib/admin/templates/admin/submit_line.html:3 +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 +#, fuzzy +msgid "Save" +msgstr "活动" + +#: contrib/admin/templates/admin/filter.html:1 +#, python-format +msgid " By %(title)s " +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 @@ -645,6 +869,66 @@ msgstr "感谢使用我们的站点!" msgid "The %(site_name)s team" msgstr "%(site_name)s 小组" +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").</p>\n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +#, fuzzy +msgid "Show object ID" +msgstr "对象id" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: 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/redirects/models/redirects.py:7 msgid "redirect from" msgstr "重定向自" @@ -1015,82 +1299,123 @@ msgstr "重要日期" msgid "Message" msgstr "消息" -#: conf/global_settings.py:36 +#: conf/global_settings.py:37 msgid "Bengali" msgstr "孟加拉语" -#: conf/global_settings.py:37 +#: conf/global_settings.py:38 msgid "Czech" msgstr "捷克语" -#: conf/global_settings.py:38 +#: conf/global_settings.py:39 msgid "Welsh" msgstr "威尔士语" -#: conf/global_settings.py:39 +#: conf/global_settings.py:40 msgid "Danish" msgstr "丹麦语" -#: conf/global_settings.py:40 +#: conf/global_settings.py:41 msgid "German" msgstr "德语" -#: conf/global_settings.py:41 +#: conf/global_settings.py:42 msgid "English" msgstr "英语" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Spanish" msgstr "西班牙语" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "French" msgstr "法语" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Galician" msgstr "加利西亚语" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Icelandic" msgstr "冰岛语" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Italian" msgstr "意大利语" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Norwegian" msgstr "挪威语" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Brazilian" msgstr "巴西语" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Romanian" -msgstr "罗马尼亚语" +msgstr "" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Russian" msgstr "俄语" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Slovak" -msgstr "斯洛伐克语" +msgstr "" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Serbian" msgstr "塞尔维亚语" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Swedish" msgstr "瑞典语" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Simplified Chinese" msgstr "简体中文" +#: core/formfields.py:59 core/meta/fields.py:287 core/meta/fields.py:491 +#: core/meta/fields.py:502 +#, fuzzy +msgid "This field is required." +msgstr "这个字段无效。" + +#: core/formfields.py:339 +#, python-format +msgid "Ensure your text is less than %s character" +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "" + +#: core/formfields.py:344 +#, fuzzy +msgid "Line breaks are not allowed here." +msgstr "这里不允许小写字母。" + +#: core/formfields.py:440 core/formfields.py:511 core/formfields.py:549 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: core/formfields.py:605 +msgid "The submitted file is empty." +msgstr "" + +#: core/formfields.py:659 +#, fuzzy +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "输入整数。" + +#: core/formfields.py:668 +#, fuzzy +msgid "Enter a positive number." +msgstr "输入整数。" + +#: core/formfields.py:677 +#, fuzzy +msgid "Enter a whole number between 0 and 32,767." +msgstr "输入整数。" + #: core/validators.py:62 msgid "This value must contain only letters, numbers and underscores." msgstr "此值只能包含字母、数字和下划线。" @@ -1341,14 +1666,37 @@ msgid "" msgstr "" "在行 %(line)s 的\"%(attr)s\"属性有一个无效的值。(行开始于 \"%(start)s\"。)" -#: core/meta/fields.py:111 +#: core/meta/fields.py:46 +#, fuzzy, python-format +msgid "Please enter a valid %s." +msgstr "请输入一个有效的IP地址。" + +#: core/meta/fields.py:60 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: core/meta/fields.py:131 msgid " Separate multiple IDs with commas." msgstr " 用逗号分隔多个ID。" -#: core/meta/fields.py:114 +#: core/meta/fields.py:134 msgid "" " Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr " 按下 \"Control\",或者在Mac上按 \"Command\" 来选择一个或多个值。" -#~ msgid "Use an MD5 hash -- not the raw password." -#~ msgstr "使用MD5的哈希值 -- 不是原始的口令。" +#: core/meta/fields.py:511 +#, fuzzy +msgid "Enter a valid filename." +msgstr "输入一个有效的邮件地址。" + +#: core/meta/fields.py:780 +#, 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] "" + +#, fuzzy +#~ msgid "count" +#~ msgstr "内容" diff --git a/django/contrib/admin/filterspecs.py b/django/contrib/admin/filterspecs.py new file mode 100644 index 0000000000..31a6ba37c9 --- /dev/null +++ b/django/contrib/admin/filterspecs.py @@ -0,0 +1,152 @@ +""" +FilterSpec encapsulates the logic for displaying filters in the Django admin. +Filters are specified in models with the "list_filter" option. + +Each filter subclass knows how to display a filter for a field that passes a +certain test -- e.g. being a DateField or ForeignKey. +""" + +from django.core import meta +import datetime + +class FilterSpec(object): + filter_specs = [] + def __init__(self, f, request, params): + self.field = f + self.params = params + + def register(cls, test, factory): + cls.filter_specs.append( (test, factory) ) + register = classmethod(register) + + def create(cls, f, request, params): + for test, factory in cls.filter_specs: + if test(f): + return factory(f, request, params) + create = classmethod(create) + + def has_output(self): + return True + + def choices(self, cl): + raise NotImplementedError() + + def title(self): + return self.field.verbose_name + + def output(self, cl): + t = [] + if self.has_output(): + t.append(_('<h3>By %s:</h3>\n<ul>\n') % self.title()) + + for choice in self.choices(cl): + t.append('<li%s><a href="%s">%s</a></li>\n' % \ + ((choice['selected'] and ' class="selected"' or ''), + choice['query_string'] , + choice['display'])) + t.append('</ul>\n\n') + return "".join(t) + +class RelatedFilterSpec(FilterSpec): + def __init__(self, f, request, params): + super(RelatedFilterSpec, self).__init__(f, request, params) + if isinstance(f, meta.ManyToManyField): + self.lookup_title = f.rel.to.verbose_name + else: + self.lookup_title = f.verbose_name + self.lookup_kwarg = '%s__%s__exact' % (f.name, f.rel.to.pk.name) + self.lookup_val = request.GET.get(self.lookup_kwarg, None) + self.lookup_choices = f.rel.to.get_model_module().get_list() + + def has_output(self): + return len(self.lookup_choices) > 1 + + def title(self): + return self.lookup_title + + def choices(self, cl): + yield {'selected': self.lookup_val is None, + 'query_string': cl.get_query_string({}, [self.lookup_kwarg]), + 'display': _('All')} + for val in self.lookup_choices: + pk_val = getattr(val, self.field.rel.to.pk.attname) + yield {'selected': self.lookup_val == str(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) + 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]), + '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}), + '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) + + self.field_generic = '%s__' % self.field.name + + self.date_params = dict([(k, v) for k, v in params.items() if k.startswith(self.field_generic)]) + + today = datetime.date.today() + one_week_ago = today - datetime.timedelta(days=7) + today_str = isinstance(self.field, meta.DateTimeField) and today.strftime('%Y-%m-%d 23:59:59') or today.strftime('%Y-%m-%d') + + self.links = ( + (_('Any date'), {}), + (_('Today'), {'%s__year' % self.field.name: str(today.year), + '%s__month' % self.field.name: str(today.month), + '%s__day' % self.field.name: str(today.day)}), + (_('Past 7 days'), {'%s__gte' % self.field.name: one_week_ago.strftime('%Y-%m-%d'), + '%s__lte' % f.name: today_str}), + (_('This month'), {'%s__year' % self.field.name: str(today.year), + '%s__month' % f.name: str(today.month)}), + (_('This year'), {'%s__year' % self.field.name: str(today.year)}) + ) + + def title(self): + return self.field.verbose_name + + 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), + 'display': title} + +FilterSpec.register(lambda f: isinstance(f, meta.DateField), DateFieldFilterSpec) + +class BooleanFieldFilterSpec(FilterSpec): + def __init__(self, f, request, params): + super(BooleanFieldFilterSpec, self).__init__(f, request, params) + self.lookup_kwarg = '%s__exact' % f.name + self.lookup_kwarg2 = '%s__isnull' % f.name + self.lookup_val = request.GET.get(self.lookup_kwarg, None) + self.lookup_val2 = request.GET.get(self.lookup_kwarg2, None) + + def title(self): + return self.field.verbose_name + + 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]), + 'display': k} + if isinstance(self.field, meta.NullBooleanField): + yield {'selected': self.lookup_val2 == 'True', + 'query_string': cl.get_query_string( {self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]), + 'display': _('Unknown')} + +FilterSpec.register(lambda f: isinstance(f, meta.BooleanField) or isinstance(f, meta.NullBooleanField), BooleanFieldFilterSpec) diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html new file mode 100644 index 0000000000..b5ae024866 --- /dev/null +++ b/django/contrib/admin/templates/admin/change_form.html @@ -0,0 +1,75 @@ +{% extends "admin/base_site" %} +{% load i18n %} +{% load admin_modify %} +{% load adminmedia %} +{% block extrahead %} +{% for js in bound_manipulator.javascript_imports %}{% include_admin_script js %}{% endfor %} +{% endblock %} +{% block coltype %}{{ bound_manipulator.coltype }}{% endblock %} +{% block bodyclass %}{{ app_label }}-{{ bound_manipulator.object_name.lower }} change-form{% endblock %} +{% block breadcrumbs %}{% if not is_popup %} +<div class="breadcrumbs"> + <a href="../../../">{% trans "Home" %}</a> › + <a href="../">{{ bound_manipulator.verbose_name_plural|capfirst }}</a> › + {% if add %}{% trans "Add" %} {{ bound_manipulator.verbose_name }}{% else %}{{ bound_manipulator.original|striptags|truncatewords:"18" }}{% endif %} +</div> +{% endif %}{% endblock %} +{% block content %}<div id="content-main"> +{% if change %}{% if not is_popup %} + <ul class="object-tools"><li><a href="history/" class="historylink">{% trans "History" %}</a></li> + {% if bound_manipulator.has_absolute_url %}<li><a href="/r/{{ bound_manipulator.content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%} + </ul> +{% endif %}{% endif %} +<form {{ bound_manipulator.form_enc_attrib }} action='{{ form_url }}' method="post">{% block form_top %}{% endblock %} +{% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %} +{% if bound_manipulator.save_on_top %}{% submit_row bound_manipulator %}{% endif %} +{% if form.error_dict %} + <p class="errornote"> + {% blocktrans count form.error_dict.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} + </p> +{% endif %} +{% for bound_field_set in bound_manipulator.bound_field_sets %} + <fieldset class="module aligned {{ bound_field_set.classes }}"> + {% if bound_field_set.name %}<h2>{{ bound_field_set.name }}</h2>{% endif %} + {% for bound_field_line in bound_field_set %} + {% admin_field_line bound_field_line %} + {% for bound_field in bound_field_line %} + {% filter_interface_script_maybe bound_field %} + {% endfor %} + {% endfor %} + </fieldset> +{% endfor %} +{% block after_field_sets %}{% endblock %} +{% if change %} + {% if bound_manipulator.ordered_objects %} + <fieldset class="module"><h2>{% trans "Ordering" %}</h2> + <div class="form-row{% if form.order_.errors %} error{% endif %} "> + {% if form.order_.errors %}{{ form.order_.html_error_list }}{% endif %} + <p><label for="id_order_">{% trans "Order:" %}</label> {{ form.order_ }}</p> + </div></fieldset> + {% endif %} +{% endif %} +{% for related_object in bound_manipulator.inline_related_objects %}{% edit_inline related_object %}{% endfor %} +{% block after_related_objects %}{% endblock %} +{% submit_row bound_manipulator %} +{% if add %} + <script type="text/javascript">document.getElementById("{{ bound_manipulator.first_form_field_id }}").focus();</script> +{% endif %} +{% if bound_manipulator.auto_populated_fields %} + <script type="text/javascript"> + {% auto_populated_field_script bound_manipulator.auto_populated_fields change %} + </script> +{% endif %} +{% if change %} + {% if bound_manipulator.ordered_objects %} + {% if form.order_objects %}<ul id="orderthese"> + {% for object in form.order_objects %} + <li id="p{% object_pk bound_manipulator object %}"> + <span id="handlep{% object_pk bound_manipulator object %}">{{ object|truncatewords:"5" }}</span> + </li> + {% endfor %} + </ul>{% endif %} + {% endif %} +{% endif %} +</form></div> +{% endblock %} diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html new file mode 100644 index 0000000000..ccc3990519 --- /dev/null +++ b/django/contrib/admin/templates/admin/change_list.html @@ -0,0 +1,20 @@ +{% load admin_list %} +{% load i18n %} +{% extends "admin/base_site" %} +{% block bodyclass %}change-list{% endblock %} +{% if not is_popup %}{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> › {{ cl.opts.verbose_name_plural|capfirst }} </div>{% endblock %}{% endif %} +{% block coltype %}flex{% endblock %} +{% block content %} +<div id="content-main"> +{% if has_add_permission %} +<ul class="object-tools"><li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a></li></ul> +{% endif %} +<div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist"> +{% search_form cl %} +{% date_hierarchy cl %} +{% filters cl %} +{% result_list cl %} +{% pagination cl %} +</div> +</div> +{% endblock %} diff --git a/django/contrib/admin/templates/admin/change_list_results.html b/django/contrib/admin/templates/admin/change_list_results.html new file mode 100644 index 0000000000..92e06c5fff --- /dev/null +++ b/django/contrib/admin/templates/admin/change_list_results.html @@ -0,0 +1,13 @@ +<table cellspacing="0"> +<thead> +<tr> +{% for header in result_headers %}<th{{ header.class_attrib }}> +{% if header.sortable %}<a href="{{ header.url }}">{% endif %} +{{ header.text|capfirst }} +{% if header.sortable %}</a>{% endif %}</th>{% endfor %} +</tr> +</thead> +{% for result in results %} +<tr class="{% cycle row1,row2 %}">{% for item in result %}{{ item }}{% endfor %}</tr> +{% endfor %} +</table> diff --git a/django/contrib/admin/templates/admin/date_hierarchy.html b/django/contrib/admin/templates/admin/date_hierarchy.html new file mode 100644 index 0000000000..a53d810f93 --- /dev/null +++ b/django/contrib/admin/templates/admin/date_hierarchy.html @@ -0,0 +1,10 @@ +{% if show %} +<div class="xfull"> +<ul class="toplinks"> +{% if back %}<li class="date-back"><a href="{{ back.link }}">‹ {{ back.title }}</a></li>{% endif %} +{% for choice in choices %} +<li> {% if choice.link %}<a href="{{ choice.link }}">{% endif %}{{ choice.title }}{% if choice.link %}</a>{% endif %}</li> +{% endfor %} +</ul><br class="clear" /> +</div> +{% endif %}
\ No newline at end of file diff --git a/django/contrib/admin/templates/admin/edit_inline_stacked.html b/django/contrib/admin/templates/admin/edit_inline_stacked.html new file mode 100644 index 0000000000..5e5ea8c0fc --- /dev/null +++ b/django/contrib/admin/templates/admin/edit_inline_stacked.html @@ -0,0 +1,15 @@ +<fieldset class="module aligned"> + {% for fcw in bound_related_object.form_field_collection_wrappers %} + <h2>{{ bound_related_object.relation.opts.verbose_name|capfirst }} #{{ forloop.counter }}</h2> + {% if bound_related_object.show_url %}{% if fcw.obj.original %} + <p><a href="/r/{{ fcw.obj.original.content_type_id }}/{{ fcw.obj.original.id }}/">View on site</a></p> + {% endif %}{% endif %} + {% for bound_field in fcw.bound_fields %} + {% if bound_field.hidden %} + {% field_widget bound_field %} + {% else %} + {% admin_field_line bound_field %} + {% endif %} + {% endfor %} + {% endfor %} +</fieldset>
\ No newline at end of file diff --git a/django/contrib/admin/templates/admin/edit_inline_tabular.html b/django/contrib/admin/templates/admin/edit_inline_tabular.html new file mode 100644 index 0000000000..c06ee05df8 --- /dev/null +++ b/django/contrib/admin/templates/admin/edit_inline_tabular.html @@ -0,0 +1,42 @@ +<fieldset class="module"> + <h2>{{ bound_related_object.relation.opts.verbose_name_plural|capfirst }}</h2><table> + <thead><tr> + {% for fw in bound_related_object.field_wrapper_list %} + {% if fw.needs_header %} + <th{{ fw.header_class_attribute }}>{{ fw.field.verbose_name|capfirst }}</th> + {% endif %} + {% endfor %} + {% for fcw in bound_related_object.form_field_collection_wrappers %} + {% if change %}{% if original_row_needed %} + {% if fcw.obj.original %} + <tr class="row-label {% cycle row1,row2 %}"><td colspan="{{ num_headers }}"><strong>{{ fcw.obj.original }}</strong></tr> + {% endif %} + {% endif %}{% endif %} + {% if fcw.obj.errors %} + <tr class="errorlist"><td colspan="{{ num_headers }}"> + {{ fcw.obj.html_combined_error_list }} + </tr> + {% endif %} + <tr class="{% cycle row1,row2 %}"> + {% for bound_field in fcw.bound_fields %} + {% if not bound_field.hidden %} + <td {{ bound_field.cell_class_attribute }}> + {% field_widget bound_field %} + </td> + {% endif %} + {% endfor %} + {% if bound_related_object.show_url %}<td> + {% if fcw.obj.original %}<a href="/r/{{ fcw.obj.original.content_type_id }}/{{ fcw.obj.original.id }}/">View on site</a>{% endif %} + </td>{% endif %} + </tr> + + {% endfor %} </table> + + {% for fcw in bound_related_object.form_field_collection_wrappers %} + {% for bound_field in fcw.bound_fields %} + {% if bound_field.hidden %} + {% field_widget bound_field %} + {% endif %} + {% endfor %} + {% endfor %} +</fieldset> diff --git a/django/contrib/admin/templates/admin/field_line.html b/django/contrib/admin/templates/admin/field_line.html new file mode 100644 index 0000000000..5e526e6fd6 --- /dev/null +++ b/django/contrib/admin/templates/admin/field_line.html @@ -0,0 +1,21 @@ +<div class="{{ class_names }}" > +{% for bound_field in bound_fields %}{{ bound_field.html_error_list }}{% endfor %} +{% for bound_field in bound_fields %} + {% if bound_field.has_label_first %} + {% field_label bound_field %} + {% endif %} + {% field_widget bound_field %} + {% if not bound_field.has_label_first %} + {% field_label bound_field %} + {% endif %} + {% if change %} + {% if bound_field.field.primary_key %} + {{ bound_field.original_value }} + {% endif %} + {% if bound_field.raw_id_admin %} + {% if bound_field.existing_display %} <strong>{{ bound_field.existing_display|truncatewords:"14" }}</strong>{% endif %} + {% endif %} + {% endif %} + {% if bound_field.field.help_text %}<p class="help">{{ bound_field.field.help_text }}</p>{% endif %} +{% endfor %} +</div> diff --git a/django/contrib/admin/templates/admin/filter.html b/django/contrib/admin/templates/admin/filter.html new file mode 100644 index 0000000000..385b1824f2 --- /dev/null +++ b/django/contrib/admin/templates/admin/filter.html @@ -0,0 +1,7 @@ +<h3>{% blocktrans %} By {{ title }} {% endblocktrans %}</h3> +<ul> +{% for choice in choices %} + <li{% if choice.selected %} class="selected"{% endif %}> + <a href="{{ choice.query_string }}">{{ choice.display }}</a></li> +{% endfor %} +</ul> diff --git a/django/contrib/admin/templates/admin/filters.html b/django/contrib/admin/templates/admin/filters.html new file mode 100644 index 0000000000..b3c6a25831 --- /dev/null +++ b/django/contrib/admin/templates/admin/filters.html @@ -0,0 +1,5 @@ +{% if cl.has_filters %}<div id="changelist-filter"> +<h2>Filter</h2> +{% for spec in cl.filter_specs %} + {% filter cl spec %} +{% endfor %}</div>{% endif %} diff --git a/django/contrib/admin/templates/admin/pagination.html b/django/contrib/admin/templates/admin/pagination.html new file mode 100644 index 0000000000..5d80ecdcc4 --- /dev/null +++ b/django/contrib/admin/templates/admin/pagination.html @@ -0,0 +1,9 @@ +<p class="paginator"> +{% if pagination_required %} +{% for i in page_range %} + {% paginator_number cl i %} +{% 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 %} <a href="{{ show_all_url }}" class="showall">Show all</a>{% endif %} +</p> diff --git a/django/contrib/admin/templates/admin/search_form.html b/django/contrib/admin/templates/admin/search_form.html new file mode 100644 index 0000000000..19b6b7eb95 --- /dev/null +++ b/django/contrib/admin/templates/admin/search_form.html @@ -0,0 +1,14 @@ +{% if cl.lookup_opts.admin.search_fields %} +<div id="toolbar"><form id="changelist-search" action="" method="get"> +<label><img src="{% admin_media_prefix %}img/admin/icon_searchbox.png" /></label> +<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query|escape }}" id="searchbar" /> +<input type="submit" value="Go" /> +{% if show_result_count %} + <span class="small quiet">{{ cl.result_count }} result{{ cl.result_count|pluralize }} (<a href="?">{{ cl.full_result_count }} total</a>)</span> +{% endif %} +{% for pair in cl.params.items %} + {% ifnotequal pair.0 search_var %}<input type="hidden" name="{{ pair.0|escape }}" value="{{ pair.1|escape }}"/>{% endifnotequal %} +{% endfor %} +</form></div> +<script type="text/javascript">document.getElementById("searchbar").focus();</script> +{% endif %} diff --git a/django/contrib/admin/templates/admin/submit_line.html b/django/contrib/admin/templates/admin/submit_line.html new file mode 100644 index 0000000000..25f581963e --- /dev/null +++ b/django/contrib/admin/templates/admin/submit_line.html @@ -0,0 +1,8 @@ +{% load i18n %} +<div class="submit-row"> +{% if show_delete_link %}<p class="float-left"><a href="delete/" class="deletelink">{% trans "Delete" %}</a></p>{% endif %} +{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" {{ onclick_attrib }}/>{%endif%} +{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" {{ onclick_attrib }} />{% endif %} +{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" {{ onclick_attrib }}/>{% endif %} +{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" {{ onclick_attrib }}/>{% endif %} +</div> diff --git a/django/contrib/admin/templates/admin_doc/bookmarklets.html b/django/contrib/admin/templates/admin_doc/bookmarklets.html index d396ec53b5..c069597219 100644 --- a/django/contrib/admin/templates/admin_doc/bookmarklets.html +++ b/django/contrib/admin/templates/admin_doc/bookmarklets.html @@ -1,30 +1,32 @@ {% extends "admin/base_site" %} -{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> › <a href="../">Documentation</a> › Bookmarklets</div>{% endblock %} +{% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> › <a href="../">{% trans "Documentation" %}</a> › {% trans "Bookmarklets" %}</div>{% endblock %} -{% block title %}Documentation bookmarklets{% endblock %} +{% block title %}{% trans "Documentation bookmarklets" %}{% endblock %} {% block content %} +{% blocktrans %} <p class="help">To install bookmarklets, drag the link to your bookmarks toolbar, or right-click the link and add it to your bookmarks. Now you can select the bookmarklet from any page in the site. Note that some of these bookmarklets require you to be viewing the site from a computer designated as "internal" (talk to your system administrator if you aren't sure if your computer is "internal").</p> +{% endblocktrans %} <div id="content-main"> - <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('HEAD',location.href,false);x.send(null);try{view=x.getResponseHeader('x-view');}catch(e){alert('No view found for this page');return;}if(view=="undefined"){alert("No view found for this page");}document.location='{{ admin_url }}/doc/views/'+view+'/';})()">Documentation for this page</a></h3> - <p>Jumps you from any page to the documentation for the view that generates that page.</p> + <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('HEAD',location.href,false);x.send(null);try{view=x.getResponseHeader('x-view');}catch(e){alert('No view found for this page');return;}if(view=="undefined"){alert("No view found for this page");}document.location='{{ admin_url }}/doc/views/'+view+'/';})()">{% trans "Documentation for this page" %}</a></h3> + <p>{% trans "Jumps you from any page to the documentation for the view that generates that page." %}</p> - <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{type=x.getResponseHeader('x-object-type');id=x.getResponseHeader('x-object-id');}catch(e){type='(none)';id='(none)';}d=document;b=d.body;e=d.createElement('div');e.id='xxxhhh';s=e.style;s.position='absolute';s.left='10px';s.top='10px';s.font='10px monospace';s.border='1px black solid';s.padding='4px';s.backgroundColor='#eee';e.appendChild(d.createTextNode('Type: '+type));e.appendChild(d.createElement('br'));e.appendChild(d.createTextNode('ID: '+id));e.appendChild(d.createElement('br'));l=d.createElement('a');l.href='#';l.onclick=function(){b.removeChild(e);};l.appendChild(d.createTextNode('[close]'));l.style.textDecoration='none';e.appendChild(l);b.appendChild(e);})();">Show object ID</a></h3> - <p>Shows the content-type and unique ID for pages that represent a single object.</p> + <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{type=x.getResponseHeader('x-object-type');id=x.getResponseHeader('x-object-id');}catch(e){type='(none)';id='(none)';}d=document;b=d.body;e=d.createElement('div');e.id='xxxhhh';s=e.style;s.position='absolute';s.left='10px';s.top='10px';s.font='10px monospace';s.border='1px black solid';s.padding='4px';s.backgroundColor='#eee';e.appendChild(d.createTextNode('Type: '+type));e.appendChild(d.createElement('br'));e.appendChild(d.createTextNode('ID: '+id));e.appendChild(d.createElement('br'));l=d.createElement('a');l.href='#';l.onclick=function(){b.removeChild(e);};l.appendChild(d.createTextNode('[close]'));l.style.textDecoration='none';e.appendChild(l);b.appendChild(e);})();">{% trans "Show object ID" %}</a></h3> + <p>{% trans "Shows the content-type and unique ID for pages that represent a single object." %}</p> - <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){var x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){var x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{var type=x.getResponseHeader('x-object-type');var id=x.getResponseHeader('x-object-id');}catch(e){return;}document.location='{{ admun_url }}/'+type.split('.').join('/')+'/'+id+'/';})()">Edit this object (current window)</a></h3> - <p>Jumps to the admin page for pages that represent a single object.</p> + <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){var x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){var x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{var type=x.getResponseHeader('x-object-type');var id=x.getResponseHeader('x-object-id');}catch(e){return;}document.location='{{ admun_url }}/'+type.split('.').join('/')+'/'+id+'/';})()">{% trans "Edit this object (current window)" %}</a></h3> + <p>{% trans "Jumps to the admin page for pages that represent a single object." %}</p> - <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){var x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){var x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{var type=x.getResponseHeader('x-object-type');var id=x.getResponseHeader('x-object-id');}catch(e){return;}window.open('{{ admun_url }}/'+type.split('.').join('/')+'/'+id+'/');})()">Edit this object (new window)</a></h3> - <p>As above, but opens the admin page in a new window.</p> + <h3><a href="javascript:(function(){if(typeof ActiveXObject!='undefined'){var x=new ActiveXObject('Microsoft.XMLHTTP')}else if(typeof XMLHttpRequest!='undefined'){var x=new XMLHttpRequest()}else{return;}x.open('GET',location.href,false);x.send(null);try{var type=x.getResponseHeader('x-object-type');var id=x.getResponseHeader('x-object-id');}catch(e){return;}window.open('{{ admun_url }}/'+type.split('.').join('/')+'/'+id+'/');})()">{% trans "Edit this object (new window)" %}</a></h3> + <p>{% trans "As above, but opens the admin page in a new window." %}</p> </div> {% endblock %} diff --git a/django/contrib/admin/templates/widget/date_time.html b/django/contrib/admin/templates/widget/date_time.html new file mode 100644 index 0000000000..2d5126c5bb --- /dev/null +++ b/django/contrib/admin/templates/widget/date_time.html @@ -0,0 +1,4 @@ +<p class="datetime"> + Date: {{ bound_field.form_fields.0 }}<br /> + Time: {{ bound_field.form_fields.1 }} +</p> diff --git a/django/contrib/admin/templates/widget/default.html b/django/contrib/admin/templates/widget/default.html new file mode 100644 index 0000000000..08a82fdbfa --- /dev/null +++ b/django/contrib/admin/templates/widget/default.html @@ -0,0 +1 @@ +{% output_all bound_field.form_fields %} diff --git a/django/contrib/admin/templates/widget/file.html b/django/contrib/admin/templates/widget/file.html new file mode 100644 index 0000000000..f81534b474 --- /dev/null +++ b/django/contrib/admin/templates/widget/file.html @@ -0,0 +1,4 @@ +{% if bound_field.original_value %} +Currently: <a href="{{ bound_field.original_url }}" > {{ bound_field.original_value }} </a><br /> +Change: {% output_all bound_field.form_fields %} +{% else %} {% output_all bound_field.form_fields %} {% endif %} diff --git a/django/contrib/admin/templates/widget/foreign.html b/django/contrib/admin/templates/widget/foreign.html new file mode 100644 index 0000000000..9decb1143c --- /dev/null +++ b/django/contrib/admin/templates/widget/foreign.html @@ -0,0 +1,7 @@ +{% output_all bound_field.form_fields %} +{% if bound_field.raw_id_admin %} + <a href="../../../{{ bound_field.field.rel.to.app_label }}/{{ bound_field.field.rel.to.module_name }}/" class="related-lookup" id="lookup_{{bound_field.element_id}}" onclick="return showRelatedObjectLookupPopup(this);"> <img src="{% admin_media_prefix %}img/admin/selector-search.gif" width="16" height="16" alt="Lookup"></a> +{% else %} +{% if bound_field.needs_add_label %} + <a href="../../../{{ bound_field.field.rel.to.app_label }}/{{ bound_field.field.rel.to.module_name }}/add/" class="add-another" id="add_{{ bound_field.element_id}}" onclick="return showAddAnotherPopup(this);"> <img src="{% admin_media_prefix %}img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a> +{% endif %} {% endif %} diff --git a/django/contrib/admin/templates/widget/many_to_many.html b/django/contrib/admin/templates/widget/many_to_many.html new file mode 100644 index 0000000000..151fe04f30 --- /dev/null +++ b/django/contrib/admin/templates/widget/many_to_many.html @@ -0,0 +1 @@ +{% include "widget/foreign" %} diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py new file mode 100644 index 0000000000..9733114872 --- /dev/null +++ b/django/contrib/admin/templatetags/admin_list.py @@ -0,0 +1,278 @@ +from django.contrib.admin.views.main import MAX_SHOW_ALL_ALLOWED, DEFAULT_RESULTS_PER_PAGE, ALL_VAR +from django.contrib.admin.views.main import ORDER_VAR, ORDER_TYPE_VAR, PAGE_VAR, SEARCH_VAR +from django.contrib.admin.views.main import IS_POPUP_VAR, EMPTY_CHANGELIST_VALUE, MONTHS +from django.core import meta, template +from django.core.exceptions import ObjectDoesNotExist +from django.core.template.decorators import simple_tag, inclusion_tag +from django.utils import dateformat +from django.utils.html import strip_tags, escape +from django.utils.text import capfirst +from django.utils.translation import get_date_formats +from django.conf.settings import ADMIN_MEDIA_PREFIX + +DOT = '.' + +#@simple_tag +def paginator_number(cl,i): + if i == DOT: + return '... ' + elif i == cl.page_num: + return '<span class="this-page">%d</span> ' % (i+1) + else: + return '<a href="%s"%s>%d</a> ' % (cl.get_query_string({PAGE_VAR: i}), (i == cl.paginator.pages-1 and ' class="end"' or ''), i+1) +paginator_number = simple_tag(paginator_number) + +#@inclusion_tag('admin/pagination') +def pagination(cl): + paginator, page_num = cl.paginator, cl.page_num + + pagination_required = (not cl.show_all or not cl.can_show_all) and cl.multi_page + if not pagination_required: + page_range = [] + else: + ON_EACH_SIDE = 3 + ON_ENDS = 2 + + # If there are 10 or fewer pages, display links to every page. + # Otherwise, do some fancy + if paginator.pages <= 10: + page_range = range(paginator.pages) + else: + # Insert "smart" pagination links, so that there are always ON_ENDS + # links at either end of the list of pages, and there are always + # ON_EACH_SIDE links at either end of the "current page" link. + page_range = [] + if page_num > (ON_EACH_SIDE + ON_ENDS): + page_range.extend(range(0, ON_EACH_SIDE - 1)) + page_range.append(DOT) + page_range.extend(range(page_num - ON_EACH_SIDE, page_num + 1)) + else: + page_range.extend(range(0, page_num + 1)) + if page_num < (paginator.pages - ON_EACH_SIDE - ON_ENDS - 1): + page_range.extend(range(page_num + 1, page_num + ON_EACH_SIDE + 1)) + page_range.append(DOT) + page_range.extend(range(paginator.pages - ON_ENDS, paginator.pages)) + else: + page_range.extend(range(page_num + 1, paginator.pages)) + + need_show_all_link = cl.can_show_all and not cl.show_all and cl.multi_page + return { + 'cl': cl, + 'pagination_required': pagination_required, + 'show_all_url': need_show_all_link and cl.get_query_string({ALL_VAR: ''}), + 'page_range': page_range, + 'ALL_VAR': ALL_VAR, + '1': 1, + } +pagination = inclusion_tag('admin/pagination')(pagination) + +def result_headers(cl): + lookup_opts = cl.lookup_opts + + for i, field_name in enumerate(lookup_opts.admin.list_display): + try: + f = lookup_opts.get_field(field_name) + except meta.FieldDoesNotExist: + # For non-field list_display values, check for the function + # attribute "short_description". If that doesn't exist, fall + # back to the method name. And __repr__ is a special-case. + if field_name == '__repr__': + header = lookup_opts.verbose_name + else: + func = getattr(cl.mod.Klass, field_name) # Let AttributeErrors propogate. + try: + header = func.short_description + except AttributeError: + header = func.__name__.replace('_', ' ') + # Non-field list_display values don't get ordering capability. + yield {"text": header} + else: + if isinstance(f.rel, meta.ManyToOne) and f.null: + yield {"text": f.verbose_name} + else: + th_classes = [] + new_order_type = 'asc' + if field_name == cl.order_field: + th_classes.append('sorted %sending' % cl.order_type.lower()) + new_order_type = {'asc': 'desc', 'desc': 'asc'}[cl.order_type.lower()] + + yield {"text": f.verbose_name, + "sortable": True, + "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}), + "class_attrib": (th_classes and ' class="%s"' % ' '.join(th_classes) or '')} + +def items_for_result(cl, result): + first = True + pk = cl.lookup_opts.pk.attname + for field_name in cl.lookup_opts.admin.list_display: + row_class = '' + try: + f = cl.lookup_opts.get_field(field_name) + except meta.FieldDoesNotExist: + # For non-field list_display values, the value is a method + # name. Execute the method. + try: + func = getattr(result, field_name) + result_repr = str(func()) + except AttributeError, ObjectDoesNotExist: + result_repr = EMPTY_CHANGELIST_VALUE + else: + # Strip HTML tags in the resulting text, except if the + # function has an "allow_tags" attribute set to True. + if not getattr(func, 'allow_tags', False): + result_repr = strip_tags(result_repr) + else: + field_val = getattr(result, f.attname) + + if isinstance(f.rel, meta.ManyToOne): + if field_val is not None: + result_repr = getattr(result, 'get_%s' % f.name)() + else: + result_repr = EMPTY_CHANGELIST_VALUE + # Dates and times are special: They're formatted in a certain way. + elif isinstance(f, meta.DateField) or isinstance(f, meta.TimeField): + if field_val: + (date_format, datetime_format, time_format) = get_date_formats() + if isinstance(f, meta.DateTimeField): + result_repr = capfirst(dateformat.format(field_val, datetime_format)) + elif isinstance(f, meta.TimeField): + result_repr = capfirst(dateformat.time_format(field_val, time_format)) + else: + result_repr = capfirst(dateformat.format(field_val, date_format)) + else: + result_repr = EMPTY_CHANGELIST_VALUE + row_class = ' class="nowrap"' + # Booleans are special: We use images. + elif isinstance(f, meta.BooleanField) or isinstance(f, meta.NullBooleanField): + BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'} + result_repr = '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val) + # ImageFields are special: Use a thumbnail. + elif isinstance(f, meta.ImageField): + from django.parts.media.photos import get_thumbnail_url + result_repr = '<img src="%s" alt="%s" title="%s" />' % (get_thumbnail_url(getattr(result, 'get_%s_url' % f.name)(), '120'), field_val, field_val) + # FloatFields are special: Zero-pad the decimals. + elif isinstance(f, meta.FloatField): + if field_val is not None: + result_repr = ('%%.%sf' % f.decimal_places) % field_val + else: + result_repr = EMPTY_CHANGELIST_VALUE + # Fields with choices are special: Use the representation + # of the choice. + elif f.choices: + result_repr = dict(f.choices).get(field_val, EMPTY_CHANGELIST_VALUE) + else: + result_repr = strip_tags(str(field_val)) + if result_repr == '': + result_repr = ' ' + if first: # First column is a special case + first = False + url = cl.url_for_result(result) + result_id = getattr(result, pk) + yield ('<th%s><a href="%s"%s>%s</a></th>' % \ + (row_class, url, (cl.is_popup and ' onclick="opener.dismissRelatedLookupPopup(window, %r); return false;"' % result_id or ''), result_repr)) + else: + yield ('<td%s>%s</td>' % (row_class, result_repr)) + +def results(cl): + for res in cl.result_list: + yield list(items_for_result(cl,res)) + +#@inclusion_tag("admin/change_list_results") +def result_list(cl): + res = list(results(cl)) + return {'cl': cl, + 'result_headers': list(result_headers(cl)), + 'results': list(results(cl))} +result_list = inclusion_tag("admin/change_list_results")(result_list) + +#@inclusion_tag("admin/date_hierarchy") +def date_hierarchy(cl): + lookup_opts, params, lookup_params, lookup_mod = \ + cl.lookup_opts, cl.params, cl.lookup_params, cl.lookup_mod + + if lookup_opts.admin.date_hierarchy: + field_name = lookup_opts.admin.date_hierarchy + + year_field = '%s__year' % field_name + month_field = '%s__month' % field_name + day_field = '%s__day' % field_name + field_generic = '%s__' % field_name + year_lookup = params.get(year_field) + month_lookup = params.get(month_field) + day_lookup = params.get(day_field) + + def link(d): + return cl.get_query_string(d, [field_generic]) + + def get_dates(unit, params): + return getattr(lookup_mod, 'get_%s_list' % field_name)(unit, **params) + + if year_lookup and month_lookup and day_lookup: + month_name = MONTHS[int(month_lookup)] + return { + 'show': True, + 'back': { + 'link': link({year_field: year_lookup, month_field: month_lookup}), + 'title': "%s %s" % (month_name, year_lookup) + }, + 'choices': [{'title': "%s %s" % (month_name, day_lookup)}] + } + elif year_lookup and month_lookup: + date_lookup_params = lookup_params.copy() + date_lookup_params.update({year_field: year_lookup, month_field: month_lookup}) + days = get_dates('day', date_lookup_params) + return { + 'show': True, + 'back': { + 'link': link({year_field: year_lookup}), + 'title': year_lookup + }, + 'choices': [{ + 'link': link({year_field: year_lookup, month_field: month_lookup, day_field: day.day}), + 'title': day.strftime('%B %d') + } for day in days] + } + elif year_lookup: + date_lookup_params = lookup_params.copy() + date_lookup_params.update({year_field: year_lookup}) + months = get_dates('month', date_lookup_params) + return { + 'show' : True, + 'back': { + 'link' : link({}), + 'title': _('All dates') + }, + 'choices': [{ + 'link': link( {year_field: year_lookup, month_field: month.month}), + 'title': "%s %s" % (month.strftime('%B') , month.year) + } for month in months] + } + else: + years = get_dates('year', lookup_params) + return { + 'show': True, + 'choices': [{ + 'link': link({year_field: year.year}), + 'title': year.year + } for year in years ] + } +date_hierarchy = inclusion_tag('admin/date_hierarchy')(date_hierarchy) + +#@inclusion_tag('admin/search_form') +def search_form(cl): + return { + 'cl': cl, + 'show_result_count': cl.result_count != cl.full_result_count and not cl.opts.one_to_one_field, + 'search_var': SEARCH_VAR + } +search_form = inclusion_tag('admin/search_form')(search_form) + +#@inclusion_tag('admin/filter') +def filter(cl, spec): + return {'title': spec.title(), 'choices' : list(spec.choices(cl))} +filter = inclusion_tag('admin/filter')(filter) + +#@inclusion_tag('admin/filters') +def filters(cl): + return {'cl': cl} +filters = inclusion_tag('admin/filters')(filters) diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py new file mode 100644 index 0000000000..891aec1b1f --- /dev/null +++ b/django/contrib/admin/templatetags/admin_modify.py @@ -0,0 +1,258 @@ +from django.core import template, template_loader, meta +from django.utils.html import escape +from django.utils.text import capfirst +from django.utils.functional import curry +from django.core.template.decorators import simple_tag, inclusion_tag +from django.contrib.admin.views.main import AdminBoundField +from django.core.meta.fields import BoundField, Field +from django.core.meta import BoundRelatedObject, TABULAR, STACKED +from django.conf.settings import ADMIN_MEDIA_PREFIX +import re + +word_re = re.compile('[A-Z][a-z]+') + +def class_name_to_underscored(name): + return '_'.join([s.lower() for s in word_re.findall(name)[:-1]]) + +#@simple_tag +def include_admin_script(script_path): + return '<script type="text/javascript" src="%s%s"></script>' % (ADMIN_MEDIA_PREFIX, script_path) +include_admin_script = simple_tag(include_admin_script) + +#@inclusion_tag('admin/submit_line', takes_context=True) +def submit_row(context, bound_manipulator): + change = context['change'] + add = context['add'] + show_delete = context['show_delete'] + has_delete_permission = context['has_delete_permission'] + is_popup = context['is_popup'] + return { + 'onclick_attrib': (bound_manipulator.ordered_objects and change + and 'onclick="submitOrderForm();"' or ''), + 'show_delete_link': (not is_popup and has_delete_permission + and (change or show_delete)), + 'show_save_as_new': not is_popup and change and bound_manipulator.save_as, + 'show_save_and_add_another': not is_popup and (not bound_manipulator.save_as or add), + 'show_save_and_continue': not is_popup, + 'show_save': True + } +submit_row = inclusion_tag('admin/submit_line', takes_context=True)(submit_row) + +#@simple_tag +def field_label(bound_field): + class_names = [] + if isinstance(bound_field.field, meta.BooleanField): + class_names.append("vCheckboxLabel") + colon = "" + else: + if not bound_field.field.blank: + class_names.append('required') + if not bound_field.first: + class_names.append('inline') + colon = ":" + class_str = class_names and ' class="%s"' % ' '.join(class_names) or '' + return '<label for="%s"%s>%s%s</label> ' % (bound_field.element_id, class_str, \ + capfirst(bound_field.field.verbose_name), colon) +field_label = simple_tag(field_label) + +class FieldWidgetNode(template.Node): + nodelists = {} + default = None + + def __init__(self, bound_field_var): + self.bound_field_var = bound_field_var + + def get_nodelist(cls, klass): + if not cls.nodelists.has_key(klass): + try: + field_class_name = klass.__name__ + template_name = "widget/%s" % \ + class_name_to_underscored(field_class_name) + nodelist = template_loader.get_template(template_name).nodelist + except template.TemplateDoesNotExist: + super_klass = bool(klass.__bases__) and klass.__bases__[0] or None + if super_klass and super_klass != Field: + nodelist = cls.get_nodelist(super_klass) + else: + if not cls.default: + cls.default = template_loader.get_template("widget/default").nodelist + nodelist = cls.default + + cls.nodelists[klass] = nodelist + return nodelist + else: + return cls.nodelists[klass] + get_nodelist = classmethod(get_nodelist) + + def render(self, context): + bound_field = template.resolve_variable(self.bound_field_var, context) + + context.push() + context['bound_field'] = bound_field + + output = self.get_nodelist(bound_field.field.__class__).render(context) + context.pop() + return output + +class FieldWrapper(object): + def __init__(self, field ): + self.field = field + + def needs_header(self): + return not isinstance(self.field, meta.AutoField) + + def header_class_attribute(self): + return self.field.blank and ' class="optional"' or '' + + def use_raw_id_admin(self): + return isinstance(self.field.rel, (meta.ManyToOne, meta.ManyToMany)) \ + and self.field.rel.raw_id_admin + +class FormFieldCollectionWrapper(object): + def __init__(self, field_mapping, fields): + self.field_mapping = field_mapping + self.fields = fields + self.bound_fields = [AdminBoundField(field, self.field_mapping, field_mapping['original']) + for field in self.fields] + +class TabularBoundRelatedObject(BoundRelatedObject): + def __init__(self, related_object, field_mapping, original): + super(TabularBoundRelatedObject, self).__init__(related_object, field_mapping, original) + self.field_wrapper_list = [FieldWrapper(field) for field in self.relation.editable_fields()] + + fields = self.relation.editable_fields() + + self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping, fields) + for field_mapping in self.field_mappings] + self.original_row_needed = max([fw.use_raw_id_admin() for fw in self.field_wrapper_list]) + self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') + + def template_name(self): + return "admin/edit_inline_tabular" + +class StackedBoundRelatedObject(BoundRelatedObject): + def __init__(self, related_object, field_mapping, original): + super(StackedBoundRelatedObject, self).__init__(related_object, field_mapping, original) + fields = self.relation.editable_fields() + self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping ,fields) + for field_mapping in self.field_mappings] + self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') + + def template_name(self): + return "admin/edit_inline_stacked" + +bound_related_object_overrides = { + TABULAR: TabularBoundRelatedObject, + STACKED: StackedBoundRelatedObject, +} + +class EditInlineNode(template.Node): + def __init__(self, rel_var): + self.rel_var = rel_var + + def render(self, context): + relation = template.resolve_variable(self.rel_var, context) + + context.push() + + klass = relation.field.rel.edit_inline + bound_related_object_class = bound_related_object_overrides.get(klass, klass) + + original = context.get('original', None) + + bound_related_object = relation.bind(context['form'], original, bound_related_object_class) + context['bound_related_object'] = bound_related_object + + t = template_loader.get_template(bound_related_object.template_name()) + + output = t.render(context) + + context.pop() + return output + +#@simple_tag +def output_all(form_fields): + return ''.join([str(f) for f in form_fields]) +output_all = simple_tag(output_all) + +#@simple_tag +def auto_populated_field_script(auto_pop_fields, change = False): + for field in auto_pop_fields: + t = [] + if change: + t.append('document.getElementById("id_%s")._changed = true;' % field.name) + else: + t.append('document.getElementById("id_%s").onchange = function() { this._changed = true; };' % field.name) + + add_values = ' + " " + '.join(['document.getElementById("id_%s").value' % g for g in field.prepopulate_from]) + for f in field.prepopulate_from: + t.append('document.getElementById("id_%s").onkeyup = function() {' \ + ' var e = document.getElementById("id_%s");' \ + ' if(!e._changed) { e.value = URLify(%s, %s);} }; ' % ( + f, field.name, add_values, field.maxlength)) + return ''.join(t) +auto_populated_field_script = simple_tag(auto_populated_field_script) + +#@simple_tag +def filter_interface_script_maybe(bound_field): + f = bound_field.field + if f.rel and isinstance(f.rel, meta.ManyToMany) and f.rel.filter_interface: + return '<script type="text/javascript">addEvent(window, "load", function(e) {' \ + ' SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % ( + f.name, f.verbose_name, f.rel.filter_interface-1, ADMIN_MEDIA_PREFIX) + else: + return '' +filter_interface_script_maybe = simple_tag(filter_interface_script_maybe) + +def do_one_arg_tag(node_factory, parser,token): + tokens = token.contents.split() + if len(tokens) != 2: + raise template.TemplateSyntaxError("%s takes 1 argument" % tokens[0]) + return node_factory(tokens[1]) + +def register_one_arg_tag(node): + tag_name = class_name_to_underscored(node.__name__) + parse_func = curry(do_one_arg_tag, node) + template.register_tag(tag_name, parse_func) + +one_arg_tag_nodes = ( + FieldWidgetNode, + EditInlineNode, +) + +for node in one_arg_tag_nodes: + register_one_arg_tag(node) + +#@inclusion_tag('admin/field_line', takes_context=True) +def admin_field_line(context, argument_val): + if (isinstance(argument_val, BoundField)): + bound_fields = [argument_val] + else: + bound_fields = [bf for bf in argument_val] + add = context['add'] + change = context['change'] + + class_names = ['form-row'] + for bound_field in bound_fields: + for f in bound_field.form_fields: + if f.errors(): + class_names.append('errors') + break + + # Assumes BooleanFields won't be stacked next to each other! + if isinstance(bound_fields[0].field, meta.BooleanField): + class_names.append('checkbox-row') + + return { + 'add': context['add'], + 'change': context['change'], + 'bound_fields': bound_fields, + 'class_names': " ".join(class_names), + } +admin_field_line = inclusion_tag('admin/field_line', takes_context=True)(admin_field_line) + +#@simple_tag +def object_pk(bound_manip, ordered_obj): + return bound_manip.get_ordered_object_pk(ordered_obj) + +object_pk = simple_tag(object_pk) diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 9c2927000a..f62fbbc01d 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -1,19 +1,36 @@ -# Generic admin views, with admin templates created dynamically at runtime. - +# Generic admin views. from django.contrib.admin.views.decorators import staff_member_required -from django.core import formfields, meta +from django.contrib.admin.filterspecs import FilterSpec +from django.core import formfields, meta, template from django.core.template import loader +from django.core.meta.fields import BoundField, BoundFieldLine, BoundFieldSet from django.core.exceptions import Http404, ObjectDoesNotExist, PermissionDenied from django.core.extensions import DjangoContext as Context from django.core.extensions import get_object_or_404, render_to_response +from django.core.paginator import ObjectPaginator, InvalidPage +from django.conf.settings import ADMIN_MEDIA_PREFIX from django.models.admin import log from django.utils.html import strip_tags from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect from django.utils.text import capfirst, get_text_list -from django.conf.settings import ADMIN_MEDIA_PREFIX -from django.utils.translation import get_date_formats +from django.utils import dateformat +from django.utils.dates import MONTHS +from django.utils.html import escape import operator +# The system will display a "Show all" link only if the total result count +# is less than or equal to this setting. +MAX_SHOW_ALL_ALLOWED = 200 + +DEFAULT_RESULTS_PER_PAGE = 100 + +ALL_VAR = 'all' +ORDER_VAR = 'o' +ORDER_TYPE_VAR = 'ot' +PAGE_VAR = 'p' +SEARCH_VAR = 'q' +IS_POPUP_VAR = 'pop' + # Text to display within changelist table cells if the value is blank. EMPTY_CHANGELIST_VALUE = '(None)' @@ -28,747 +45,354 @@ def _get_mod_opts(app_label, module_name): raise Http404 # This object is valid but has no admin interface. return mod, opts -def get_query_string(original_params, new_params={}, remove=[]): - """ - >>> get_query_string({'first_name': 'adrian', 'last_name': 'smith'}) - '?first_name=adrian&last_name=smith' - >>> get_query_string({'first_name': 'adrian', 'last_name': 'smith'}, {'first_name': 'john'}) - '?first_name=john&last_name=smith' - >>> get_query_string({'test': 'yes'}, {'blah': 'no'}, ['te']) - '?blah=no' - """ - p = original_params.copy() - for r in remove: - for k in p.keys(): - if k.startswith(r): - del p[k] - for k, v in new_params.items(): - if p.has_key(k) and v is None: - del p[k] - elif v is not None: - p[k] = v - return '?' + '&'.join(['%s=%s' % (k, v) for k, v in p.items()]).replace(' ', '%20') - def index(request): - return render_to_response('admin/index', {'title': 'Site administration'}, context_instance=Context(request)) + return render_to_response('admin/index', {'title': _('Site administration')}, context_instance=Context(request)) index = staff_member_required(index) -def change_list(request, app_label, module_name): - from django.core import paginator - from django.utils import dateformat - from django.utils.dates import MONTHS - from django.utils.html import escape - import datetime - - # The system will display a "Show all" link only if the total result count - # is less than or equal to this setting. - MAX_SHOW_ALL_ALLOWED = 200 +class IncorrectLookupParameters(Exception): + pass - DEFAULT_RESULTS_PER_PAGE = 100 +class ChangeList(object): + def __init__(self, request, app_label, module_name): + self.get_modules_and_options(app_label, module_name, request) + self.get_search_parameters(request) + self.get_ordering() + self.query = request.GET.get(SEARCH_VAR,'') + self.get_lookup_params() + self.get_results(request) + self.title = (self.is_popup + and _('Select %s') % self.opts.verbose_name + or _('Select %s to change') % self.opts.verbose_name) + self.get_filters(request) + self.pk_attname = self.lookup_opts.pk.attname - ALL_VAR = 'all' - ORDER_VAR = 'o' - ORDER_TYPE_VAR = 'ot' - PAGE_VAR = 'p' - SEARCH_VAR = 'q' - IS_POPUP_VAR = 'pop' - - mod, opts = _get_mod_opts(app_label, module_name) - if not request.user.has_perm(app_label + '.' + opts.get_change_permission()): - raise PermissionDenied + def get_filters(self, request): + self.filter_specs = [] + if self.lookup_opts.admin.list_filter and not self.opts.one_to_one_field: + 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) + if spec.has_output(): + self.filter_specs.append(spec) + self.has_filters = bool(self.filter_specs) - lookup_mod, lookup_opts = mod, opts + def get_query_string(self, new_params={}, remove=[]): + p = self.params.copy() + for r in remove: + for k in p.keys(): + if k.startswith(r): + del p[k] + for k, v in new_params.items(): + if p.has_key(k) and v is None: + del p[k] + elif v is not None: + p[k] = v + return '?' + '&'.join(['%s=%s' % (k, v) for k, v in p.items()]).replace(' ', '%20') - # Get search parameters from the query string. - try: - page_num = int(request.GET.get(PAGE_VAR, 0)) - except ValueError: - page_num = 0 - show_all = request.GET.has_key(ALL_VAR) - is_popup = request.GET.has_key(IS_POPUP_VAR) - params = dict(request.GET.copy()) - if params.has_key(PAGE_VAR): - del params[PAGE_VAR] - # For ordering, first check the "ordering" parameter in the admin options, - # then check the object's default ordering. If neither of those exist, - # order descending by ID by default. Finally, look for manually-specified - # ordering from the query string. - ordering = lookup_opts.admin.ordering or lookup_opts.ordering or ['-' + lookup_opts.pk.name] + def get_modules_and_options(self, app_label, module_name, request): + self.mod, self.opts = _get_mod_opts(app_label, module_name) + if not request.user.has_perm(app_label + '.' + self.opts.get_change_permission()): + raise PermissionDenied - # Normalize it to new-style ordering. - ordering = meta.handle_legacy_orderlist(ordering) + self.lookup_mod, self.lookup_opts = self.mod, self.opts - if ordering[0].startswith('-'): - order_field, order_type = ordering[0][1:], 'desc' - else: - order_field, order_type = ordering[0], 'asc' - if params.has_key(ORDER_VAR): + def get_search_parameters(self, request): + # Get search parameters from the query string. try: - try: - f = lookup_opts.get_field(lookup_opts.admin.list_display[int(params[ORDER_VAR])]) - except meta.FieldDoesNotExist: - pass - else: - if not isinstance(f.rel, meta.ManyToOne) or not f.null: - order_field = f.name - except (IndexError, ValueError): - pass # Invalid ordering specified. Just use the default. - if params.has_key(ORDER_TYPE_VAR) and params[ORDER_TYPE_VAR] in ('asc', 'desc'): - order_type = params[ORDER_TYPE_VAR] - query = request.GET.get(SEARCH_VAR, '') - - # Prepare the lookup parameters for the API lookup. - lookup_params = params.copy() - for i in (ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, SEARCH_VAR, IS_POPUP_VAR): - if lookup_params.has_key(i): - del lookup_params[i] - # If the order-by field is a field with a relationship, order by the value - # in the related table. - lookup_order_field = order_field - if isinstance(lookup_opts.get_field(order_field).rel, meta.ManyToOne): - f = lookup_opts.get_field(order_field) - rel_ordering = f.rel.to.ordering and f.rel.to.ordering[0] or f.rel.to.pk.column - lookup_order_field = '%s.%s' % (f.rel.to.db_table, rel_ordering) - if lookup_opts.admin.list_select_related: - lookup_params['select_related'] = True - else: - # Use select_related if one of the list_display options is a field with - # a relationship. - for field_name in lookup_opts.admin.list_display: - try: - f = lookup_opts.get_field(field_name) - except meta.FieldDoesNotExist: - pass - else: - if isinstance(f.rel, meta.ManyToOne): - lookup_params['select_related'] = True - break - lookup_params['order_by'] = ((order_type == 'desc' and '-' or '') + lookup_order_field,) - if lookup_opts.admin.search_fields and query: - or_queries = [] - for bit in query.split(): - or_query = [] - for field_name in lookup_opts.admin.search_fields: - or_query.append(('%s__icontains' % field_name, bit)) - or_queries.append(or_query) - lookup_params['_or'] = or_queries + self.req_get = request.GET + self.page_num = int(request.GET.get(PAGE_VAR, 0)) + except ValueError: + self.page_num = 0 + self.show_all = request.GET.has_key(ALL_VAR) + self.is_popup = request.GET.has_key(IS_POPUP_VAR) + self.params = dict(request.GET.copy()) + if self.params.has_key(PAGE_VAR): + del self.params[PAGE_VAR] - if opts.one_to_one_field: - lookup_params.update(opts.one_to_one_field.rel.limit_choices_to) - - # Get the results. - try: - p = paginator.ObjectPaginator(lookup_mod, lookup_params, DEFAULT_RESULTS_PER_PAGE) - # Naked except! Because we don't have any other way of validating "params". - # They might be invalid if the keyword arguments are incorrect, or if the - # values are not in the correct type (which would result in a database - # error). - except: - return HttpResponseRedirect(request.path) - - # Get the total number of objects, with no filters applied. - real_lookup_params = lookup_params.copy() - del real_lookup_params['order_by'] - if real_lookup_params: - full_result_count = lookup_mod.get_count() - else: - full_result_count = p.hits - del real_lookup_params - result_count = p.hits - can_show_all = result_count <= MAX_SHOW_ALL_ALLOWED - multi_page = result_count > DEFAULT_RESULTS_PER_PAGE - - # Get the list of objects to display on this page. - if (show_all and can_show_all) or not multi_page: - result_list = lookup_mod.get_list(**lookup_params) - else: + def get_results(self, request): + lookup_mod, lookup_params, show_all, page_num = \ + self.lookup_mod, self.lookup_params, self.show_all, self.page_num + # Get the results. try: - result_list = p.get_page(page_num) - except paginator.InvalidPage: - result_list = [] + paginator = ObjectPaginator(lookup_mod, lookup_params, DEFAULT_RESULTS_PER_PAGE) + # Naked except! Because we don't have any other way of validating "params". + # They might be invalid if the keyword arguments are incorrect, or if the + # values are not in the correct type (which would result in a database + # error). + except: + raise IncorrectLookupParameters() - # Calculate filters first, because a CSS class high in the document depends - # on whether they are available. - filter_template = [] - if lookup_opts.admin.list_filter and not opts.one_to_one_field: - filter_fields = [lookup_opts.get_field(field_name) for field_name in lookup_opts.admin.list_filter] - for f in filter_fields: - # Many-to-many or many-to-one filter. - if f.rel: - if isinstance(f, meta.ManyToManyField): - lookup_title = f.rel.to.verbose_name - else: - lookup_title = f.verbose_name - lookup_kwarg = '%s__%s__exact' % (f.name, f.rel.to.pk.name) - lookup_val = request.GET.get(lookup_kwarg, None) - lookup_choices = f.rel.to.get_model_module().get_list() - if len(lookup_choices) > 1: - filter_template.append('<h3>By %s:</h3>\n<ul>\n' % lookup_title) - filter_template.append('<li%s><a href="%s">All</a></li>\n' % \ - ((lookup_val is None and ' class="selected"' or ''), - get_query_string(params, {}, [lookup_kwarg]))) - for val in lookup_choices: - pk_val = getattr(val, f.rel.to.pk.attname) - filter_template.append('<li%s><a href="%s">%r</a></li>\n' % \ - ((lookup_val == str(pk_val) and ' class="selected"' or ''), - get_query_string(params, {lookup_kwarg: pk_val}), val)) - filter_template.append('</ul>\n\n') - # Field with choices. - elif f.choices: - lookup_kwarg = '%s__exact' % f.name - lookup_val = request.GET.get(lookup_kwarg, None) - filter_template.append('<h3>By %s:</h3><ul>\n' % f.verbose_name) - filter_template.append('<li%s><a href="%s">All</a></li>\n' % \ - ((lookup_val is None and ' class="selected"' or ''), - get_query_string(params, {}, [lookup_kwarg]))) - for k, v in f.choices: - filter_template.append('<li%s><a href="%s">%s</a></li>' % \ - ((str(k) == lookup_val) and ' class="selected"' or '', - get_query_string(params, {lookup_kwarg: k}), v)) - filter_template.append('</ul>\n\n') - # Date filter. - elif isinstance(f, meta.DateField): - today = datetime.date.today() - one_week_ago = today - datetime.timedelta(days=7) - field_generic = '%s__' % f.name - filter_template.append('<h3>By %s:</h3><ul>\n' % f.verbose_name) - date_params = dict([(k, v) for k, v in params.items() if k.startswith(field_generic)]) - today_str = isinstance(f, meta.DateTimeField) and today.strftime('%Y-%m-%d 23:59:59') or today.strftime('%Y-%m-%d') - for title, param_dict in ( - ('Any date', {}), - ('Today', {'%s__year' % f.name: str(today.year), '%s__month' % f.name: str(today.month), '%s__day' % f.name: str(today.day)}), - ('Past 7 days', {'%s__gte' % f.name: one_week_ago.strftime('%Y-%m-%d'), '%s__lte' % f.name: today_str}), - ('This month', {'%s__year' % f.name: str(today.year), '%s__month' % f.name: str(today.month)}), - ('This year', {'%s__year' % f.name: str(today.year)}) - ): - filter_template.append('<li%s><a href="%s">%s</a></li>\n' % \ - ((date_params == param_dict) and ' class="selected"' or '', - get_query_string(params, param_dict, field_generic), title)) - filter_template.append('</ul>\n\n') - elif isinstance(f, meta.BooleanField) or isinstance(f, meta.NullBooleanField): - lookup_kwarg = '%s__exact' % f.name - lookup_kwarg2 = '%s__isnull' % f.name - lookup_val = request.GET.get(lookup_kwarg, None) - lookup_val2 = request.GET.get(lookup_kwarg2, None) - filter_template.append('<h3>By %s:</h3><ul>\n' % f.verbose_name) - for k, v in (('All', None), ('Yes', '1'), ('No', '0')): - filter_template.append('<li%s><a href="%s">%s</a></li>\n' % \ - (((lookup_val == v and not lookup_val2) and ' class="selected"' or ''), - get_query_string(params, {lookup_kwarg: v}, [lookup_kwarg2]), k)) - if isinstance(f, meta.NullBooleanField): - filter_template.append('<li%s><a href="%s">%s</a></li>\n' % \ - (((lookup_val2 == 'True') and ' class="selected"' or ''), - get_query_string(params, {lookup_kwarg2: 'True'}, [lookup_kwarg]), 'Unknown')) - filter_template.append('</ul>\n\n') - else: - pass # Invalid argument to "list_filter" + # Get the total number of objects, with no filters applied. + real_lookup_params = lookup_params.copy() + del real_lookup_params['order_by'] + if real_lookup_params: + full_result_count = lookup_mod.get_count() + else: + full_result_count = paginator.hits + del real_lookup_params + result_count = paginator.hits + can_show_all = result_count <= MAX_SHOW_ALL_ALLOWED + multi_page = result_count > DEFAULT_RESULTS_PER_PAGE - raw_template = ['{% extends "admin/base_site" %}\n'] - raw_template.append('{% block bodyclass %}change-list{% endblock %}\n') - if not is_popup: - raw_template.append('{%% block breadcrumbs %%}<div class="breadcrumbs"><a href="../../">Home</a> › %s</div>{%% endblock %%}\n' % capfirst(opts.verbose_name_plural)) - raw_template.append('{% block coltype %}flex{% endblock %}') - raw_template.append('{% block content %}\n') - raw_template.append('<div id="content-main">\n') - if request.user.has_perm(app_label + '.' + lookup_opts.get_add_permission()): - raw_template.append('<ul class="object-tools"><li><a href="add/%s" class="addlink">Add %s</a></li></ul>\n' % ((is_popup and '?_popup=1' or ''), opts.verbose_name)) - raw_template.append('<div class="module%s" id="changelist">\n' % (filter_template and ' filtered' or '')) + # Get the list of objects to display on this page. + if (show_all and can_show_all) or not multi_page: + result_list = lookup_mod.get_list(**lookup_params) + else: + try: + result_list = paginator.get_page(page_num) + except InvalidPage: + result_list = [] + (self.result_count, self.full_result_count, self.result_list, + self.can_show_all, self.multi_page, self.paginator) = (result_count, + full_result_count, result_list, can_show_all, multi_page, paginator ) - # Search form. - if lookup_opts.admin.search_fields: - raw_template.append('<div id="toolbar">\n<form id="changelist-search" action="" method="get">\n') - raw_template.append('<label><img src="%simg/admin/icon_searchbox.png" /></label> ' % ADMIN_MEDIA_PREFIX) - raw_template.append('<input type="text" size="40" name="%s" value="%s" id="searchbar" /> ' % \ - (SEARCH_VAR, escape(query))) - raw_template.append('<input type="submit" value="Go" /> ') - if result_count != full_result_count and not opts.one_to_one_field: - raw_template.append('<span class="small quiet">%s result%s (<a href="?">%s total</a>)</span>' % \ - (result_count, (result_count != 1 and 's' or ''), full_result_count)) - for k, v in params.items(): - if k != SEARCH_VAR: - raw_template.append('<input type="hidden" name="%s" value="%s" />' % (escape(k), escape(v))) - raw_template.append('</form></div>\n') - raw_template.append('<script type="text/javascript">document.getElementById("searchbar").focus();</script>') + def url_for_result(self, result): + return "%s/" % getattr(result, self.pk_attname) - # Date-based navigation. - if lookup_opts.admin.date_hierarchy: - field_name = lookup_opts.admin.date_hierarchy + def get_ordering(self): + lookup_opts, params = self.lookup_opts, self.params + # For ordering, first check the "ordering" parameter in the admin options, + # then check the object's default ordering. If neither of those exist, + # order descending by ID by default. Finally, look for manually-specified + # ordering from the query string. + ordering = lookup_opts.admin.ordering or lookup_opts.ordering or ['-' + lookup_opts.pk.name] - year_field = '%s__year' % field_name - month_field = '%s__month' % field_name - day_field = '%s__day' % field_name - field_generic = '%s__' % field_name - year_lookup = params.get(year_field) - month_lookup = params.get(month_field) - day_lookup = params.get(day_field) + # Normalize it to new-style ordering. + ordering = meta.handle_legacy_orderlist(ordering) - raw_template.append('<div class="xfull">\n<ul class="toplinks">\n') - if year_lookup and month_lookup and day_lookup: - raw_template.append('<li class="date-back"><a href="%s">‹ %s %s </a></li>' % \ - (get_query_string(params, {year_field: year_lookup, month_field: month_lookup}, [field_generic]), MONTHS[int(month_lookup)], year_lookup)) - raw_template.append('<li>%s %s</li>' % (MONTHS[int(month_lookup)], day_lookup)) - elif year_lookup and month_lookup: - raw_template.append('<li class="date-back"><a href="%s">‹ %s</a></li>' % \ - (get_query_string(params, {year_field: year_lookup}, [field_generic]), year_lookup)) - date_lookup_params = lookup_params.copy() - date_lookup_params.update({year_field: year_lookup, month_field: month_lookup}) - for day in getattr(lookup_mod, 'get_%s_list' % field_name)('day', **date_lookup_params): - raw_template.append('<li><a href="%s">%s</a></li>' % \ - (get_query_string(params, {year_field: year_lookup, month_field: month_lookup, day_field: day.day}, [field_generic]), day.strftime('%B %d'))) - elif year_lookup: - raw_template.append('<li class="date-back"><a href="%s">‹ All dates</a></li>' % \ - get_query_string(params, {}, [year_field])) - date_lookup_params = lookup_params.copy() - date_lookup_params.update({year_field: year_lookup}) - for month in getattr(lookup_mod, 'get_%s_list' % field_name)('month', **date_lookup_params): - raw_template.append('<li><a href="%s">%s %s</a></li>' % \ - (get_query_string(params, {year_field: year_lookup, month_field: month.month}, [field_generic]), month.strftime('%B'), month.year)) + if ordering[0].startswith('-'): + order_field, order_type = ordering[0][1:], 'desc' else: - for year in getattr(lookup_mod, 'get_%s_list' % field_name)('year', **lookup_params): - raw_template.append('<li><a href="%s">%s</a></li>\n' % \ - (get_query_string(params, {year_field: year.year}, [field_generic]), year.year)) - raw_template.append('</ul><br class="clear" />\n</div>\n') - - # Filters. - if filter_template: - raw_template.append('<div id="changelist-filter">\n<h2>Filter</h2>\n') - raw_template.extend(filter_template) - raw_template.append('</div>') - del filter_template - - # Result table. - if result_list: - # Table headers. - raw_template.append('<table cellspacing="0">\n<thead>\n<tr>\n') - for i, field_name in enumerate(lookup_opts.admin.list_display): + order_field, order_type = ordering[0], 'asc' + if params.has_key(ORDER_VAR): try: - f = lookup_opts.get_field(field_name) - except meta.FieldDoesNotExist: - # For non-field list_display values, check for the function - # attribute "short_description". If that doesn't exist, fall - # back to the method name. And __repr__ is a special-case. - if field_name == '__repr__': - header = lookup_opts.verbose_name - else: - func = getattr(mod.Klass, field_name) # Let AttributeErrors propogate. - try: - header = func.short_description - except AttributeError: - header = func.__name__.replace('_', ' ') - # Non-field list_display values don't get ordering capability. - raw_template.append('<th>%s</th>' % capfirst(header)) - else: - if isinstance(f.rel, meta.ManyToOne) and f.null: - raw_template.append('<th>%s</th>' % capfirst(f.verbose_name)) + try: + f = lookup_opts.get_field(lookup_opts.admin.list_display[int(params[ORDER_VAR])]) + except meta.FieldDoesNotExist: + pass else: - th_classes = [] - new_order_type = 'asc' - if field_name == order_field: - th_classes.append('sorted %sending' % order_type.lower()) - new_order_type = {'asc': 'desc', 'desc': 'asc'}[order_type.lower()] - raw_template.append('<th%s><a href="%s">%s</a></th>' % \ - ((th_classes and ' class="%s"' % ' '.join(th_classes) or ''), - get_query_string(params, {ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}), - capfirst(f.verbose_name))) - raw_template.append('</tr>\n</thead>\n') - # Result rows. - pk = lookup_opts.pk.attname - for i, result in enumerate(result_list): - raw_template.append('<tr class="row%s">\n' % (i % 2 + 1)) - for j, field_name in enumerate(lookup_opts.admin.list_display): - row_class = '' + if not isinstance(f.rel, meta.ManyToOne) or not f.null: + order_field = f.name + except (IndexError, ValueError): + pass # Invalid ordering specified. Just use the default. + if params.has_key(ORDER_TYPE_VAR) and params[ORDER_TYPE_VAR] in ('asc', 'desc'): + order_type = params[ORDER_TYPE_VAR] + self.order_field, self.order_type = order_field, order_type + + def get_lookup_params(self): + # Prepare the lookup parameters for the API lookup. + (params, order_field, lookup_opts, order_type, opts, query) = \ + (self.params, self.order_field, self.lookup_opts, self.order_type, self.opts, self.query) + + lookup_params = params.copy() + for i in (ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, SEARCH_VAR, IS_POPUP_VAR): + if lookup_params.has_key(i): + del lookup_params[i] + # If the order-by field is a field with a relationship, order by the value + # in the related table. + lookup_order_field = order_field + try: + f = lookup_opts.get_field(order_field) + except meta.FieldDoesNotExist: + pass + else: + if isinstance(lookup_opts.get_field(order_field).rel, meta.ManyToOne): + f = lookup_opts.get_field(order_field) + rel_ordering = f.rel.to.ordering and f.rel.to.ordering[0] or f.rel.to.pk.column + lookup_order_field = '%s.%s' % (f.rel.to.db_table, rel_ordering) + # Use select_related if one of the list_display options is a field with a + # relationship. + if lookup_opts.admin.list_select_related: + lookup_params['select_related'] = True + else: + for field_name in lookup_opts.admin.list_display: try: f = lookup_opts.get_field(field_name) except meta.FieldDoesNotExist: - # For non-field list_display values, the value is a method - # name. Execute the method. - func = getattr(result, field_name) - try: - result_repr = str(func()) - except ObjectDoesNotExist: - result_repr = EMPTY_CHANGELIST_VALUE - else: - # Strip HTML tags in the resulting text, except if the - # function has an "allow_tags" attribute set to True. - if not getattr(func, 'allow_tags', False): - result_repr = strip_tags(result_repr) + pass else: - field_val = getattr(result, f.attname) - # Foreign-key fields are special: Use the repr of the - # related object. if isinstance(f.rel, meta.ManyToOne): - if field_val is not None: - result_repr = getattr(result, 'get_%s' % f.name)() - else: - result_repr = EMPTY_CHANGELIST_VALUE - # Dates and times are special: They're formatted in a certain way. - elif isinstance(f, meta.DateField) or isinstance(f, meta.TimeField): - if field_val: - (date_format, datetime_format, time_format) = get_date_formats() - if isinstance(f, meta.DateTimeField): - result_repr = capfirst(dateformat.format(field_val, datetime_format)) - elif isinstance(f, meta.TimeField): - result_repr = capfirst(dateformat.time_format(field_val, time_format)) - else: - result_repr = capfirst(dateformat.format(field_val, date_format)) - else: - result_repr = EMPTY_CHANGELIST_VALUE - row_class = ' class="nowrap"' - # Booleans are special: We use images. - elif isinstance(f, meta.BooleanField) or isinstance(f, meta.NullBooleanField): - BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'} - result_repr = '<img src="%simg/admin/icon-%s.gif" alt="%s" />' % (ADMIN_MEDIA_PREFIX, BOOLEAN_MAPPING[field_val], field_val) - # ImageFields are special: Use a thumbnail. - elif isinstance(f, meta.ImageField): - from django.parts.media.photos import get_thumbnail_url - result_repr = '<img src="%s" alt="%s" title="%s" />' % (get_thumbnail_url(getattr(result, 'get_%s_url' % f.name)(), '120'), field_val, field_val) - # FloatFields are special: Zero-pad the decimals. - elif isinstance(f, meta.FloatField): - if field_val is not None: - result_repr = ('%%.%sf' % f.decimal_places) % field_val - else: - result_repr = EMPTY_CHANGELIST_VALUE - # Fields with choices are special: Use the representation - # of the choice. - elif f.choices: - result_repr = dict(f.choices).get(field_val, EMPTY_CHANGELIST_VALUE) - else: - result_repr = strip_tags(str(field_val)) - # Some browsers don't like empty "<td></td>"s. - if result_repr == '': - result_repr = ' ' - if j == 0: # First column is a special case - result_id = getattr(result, pk) - raw_template.append('<th%s><a href="%s/"%s>%s</a></th>' % \ - (row_class, result_id, (is_popup and ' onclick="opener.dismissRelatedLookupPopup(window, %r); return false;"' % result_id or ''), result_repr)) - else: - raw_template.append('<td%s>%s</td>' % (row_class, result_repr)) - raw_template.append('</tr>\n') - del result_list # to free memory - raw_template.append('</table>\n') - else: - raw_template.append('<p>No %s matched your search criteria.</p>' % opts.verbose_name_plural) + lookup_params['select_related'] = True + break + lookup_params['order_by'] = ((order_type == 'desc' and '-' or '') + lookup_order_field,) + if lookup_opts.admin.search_fields and query: + or_queries = [] + for bit in query.split(): + or_query = [] + for field_name in lookup_opts.admin.search_fields: + or_query.append(('%s__icontains' % field_name, bit)) + or_queries.append(or_query) + lookup_params['_or'] = or_queries + + if opts.one_to_one_field: + lookup_params.update(opts.one_to_one_field.rel.limit_choices_to) + self.lookup_params = lookup_params - # Pagination. - raw_template.append('<p class="paginator">') - if (show_all and can_show_all) or not multi_page: - pass - else: - raw_template.append('Page › ') - ON_EACH_SIDE = 3 - ON_ENDS = 2 - DOT = '.' - # If there are 10 or fewer pages, display links to every page. - # Otherwise, do some fancy - if p.pages <= 10: - page_range = range(p.pages) - else: - # Insert "smart" pagination links, so that there are always ON_ENDS - # links at either end of the list of pages, and there are always - # ON_EACH_SIDE links at either end of the "current page" link. - page_range = [] - if page_num > (ON_EACH_SIDE + ON_ENDS): - page_range.extend(range(0, ON_EACH_SIDE - 1)) - page_range.append(DOT) - page_range.extend(range(page_num - ON_EACH_SIDE, page_num + 1)) - else: - page_range.extend(range(0, page_num + 1)) - if page_num < (p.pages - ON_EACH_SIDE - ON_ENDS - 1): - page_range.extend(range(page_num + 1, page_num + ON_EACH_SIDE + 1)) - page_range.append(DOT) - page_range.extend(range(p.pages - ON_ENDS, p.pages)) - else: - page_range.extend(range(page_num + 1, p.pages)) - for i in page_range: - if i == DOT: - raw_template.append('... ') - elif i == page_num: - raw_template.append('<span class="this-page">%d</span> ' % (i+1)) - else: - raw_template.append('<a href="%s"%s>%d</a> ' % \ - (get_query_string(params, {PAGE_VAR: i}), (i == p.pages-1 and ' class="end"' or ''), i+1)) - raw_template.append('%s %s' % (result_count, result_count == 1 and opts.verbose_name or opts.verbose_name_plural)) - if can_show_all and not show_all and multi_page: - raw_template.append(' <a href="%s" class="showall">Show all</a>' % \ - get_query_string(params, {ALL_VAR: ''})) - raw_template.append('</p>') - raw_template.append('</div>\n</div>') - raw_template.append('{% endblock %}\n') - t = loader.get_template_from_string(''.join(raw_template)) +def change_list(request, app_label, module_name): + try: + cl = ChangeList(request, app_label, module_name) + except IncorrectLookupParameters: + return HttpResponseRedirect(request.path) + c = Context(request, { - 'title': (is_popup and 'Select %s' % opts.verbose_name or 'Select %s to change' % opts.verbose_name), - 'is_popup': is_popup, + 'title': cl.title, + 'is_popup': cl.is_popup, + 'cl' : cl }) - return HttpResponse(t.render(c)) + c.update( { 'has_add_permission': c['perms'][app_label][cl.opts.get_add_permission()]}), + return render_to_response('admin/change_list', + context_instance = c) change_list = staff_member_required(change_list) -def _get_flattened_data(field, val): - """ - Returns a dictionary mapping the field's manipulator field names to its - "flattened" string values for the admin view. "val" is an instance of the - field's value. - """ - if isinstance(field, meta.DateTimeField): - date_field, time_field = field.get_manipulator_field_names('') - return {date_field: (val is not None and val.strftime("%Y-%m-%d") or ''), - time_field: (val is not None and val.strftime("%H:%M:%S") or '')} - elif isinstance(field, meta.DateField): - return {field.name: (val is not None and val.strftime("%Y-%m-%d") or '')} - elif isinstance(field, meta.TimeField): - return {field.name: (val is not None and val.strftime("%H:%M:%S") or '')} - else: - return {field.name: val} use_raw_id_admin = lambda field: isinstance(field.rel, (meta.ManyToOne, meta.ManyToMany)) and field.rel.raw_id_admin -def _get_submit_row_template(opts, app_label, add, change, show_delete, ordered_objects): - t = ['<div class="submit-row">'] - if change or show_delete: - t.append('{%% if perms.%s.%s %%}{%% if not is_popup %%}<p class="float-left"><a href="delete/" class="deletelink">Delete</a></p>{%% endif %%}{%% endif %%}' % \ - (app_label, opts.get_delete_permission())) - if change and opts.admin.save_as: - t.append('{%% if not is_popup %%}<input type="submit" value="Save as new" name="_saveasnew" %s/>{%% endif %%}' % \ - (ordered_objects and change and 'onclick="submitOrderForm();"' or '')) - if not opts.admin.save_as or add: - t.append('{%% if not is_popup %%}<input type="submit" value="Save and add another" name="_addanother" %s/>{%% endif %%}' % \ - (ordered_objects and change and 'onclick="submitOrderForm();"' or '')) - t.append('{%% if not is_popup %%}<input type="submit" value="Save and continue editing" name="_continue" %s/>{%% endif %%}' % \ - (ordered_objects and change and 'onclick="submitOrderForm();"' or '')) - t.append('<input type="submit" value="Save" class="default" %s/>' % \ - (ordered_objects and change and 'onclick="submitOrderForm();"' or '')) - t.append('</div>\n') - return t - -def _get_template(opts, app_label, add=False, change=False, show_delete=False, form_url=''): - admin_field_objs = opts.admin.get_field_objs(opts) - ordered_objects = opts.get_ordered_objects()[:] - auto_populated_fields = [f for f in opts.fields if f.prepopulate_from] - t = ['{% extends "admin/base_site" %}\n'] - t.append('{% block extrahead %}') - # Put in any necessary JavaScript imports. - javascript_imports = ['%sjs/core.js' % ADMIN_MEDIA_PREFIX, '%sjs/admin/RelatedObjectLookups.js' % ADMIN_MEDIA_PREFIX] +def get_javascript_imports(opts,auto_populated_fields, ordered_objects, field_sets): +# Put in any necessary JavaScript imports. + js = ['js/core.js', 'js/admin/RelatedObjectLookups.js'] if auto_populated_fields: - javascript_imports.append('%sjs/urlify.js' % ADMIN_MEDIA_PREFIX) + js.append('js/urlify.js') if opts.has_field_type(meta.DateTimeField) or opts.has_field_type(meta.TimeField) or opts.has_field_type(meta.DateField): - javascript_imports.extend(['%sjs/calendar.js' % ADMIN_MEDIA_PREFIX, '%sjs/admin/DateTimeShortcuts.js' % ADMIN_MEDIA_PREFIX]) + js.extend(['js/calendar.js', 'js/admin/DateTimeShortcuts.js']) if ordered_objects: - javascript_imports.extend(['%sjs/getElementsBySelector.js' % ADMIN_MEDIA_PREFIX, '%sjs/dom-drag.js' % ADMIN_MEDIA_PREFIX, '%sjs/admin/ordering.js' % ADMIN_MEDIA_PREFIX]) + js.extend(['js/getElementsBySelector.js', 'js/dom-drag.js' , 'js/admin/ordering.js']) if opts.admin.js: - javascript_imports.extend(opts.admin.js) + js.extend(opts.admin.js) seen_collapse = False - for _, options in admin_field_objs: - if not seen_collapse and 'collapse' in options.get('classes', ''): + for field_set in field_sets: + if not seen_collapse and 'collapse' in field_set.classes: seen_collapse = True - javascript_imports.append('%sjs/admin/CollapsedFieldsets.js' % ADMIN_MEDIA_PREFIX) - for field_list in options['fields']: + js.append('js/admin/CollapsedFieldsets.js' ) + + for field_line in field_set: try: - for f in field_list: + for f in field_line: if f.rel and isinstance(f, meta.ManyToManyField) and f.rel.filter_interface: - javascript_imports.extend(['%sjs/SelectBox.js' % ADMIN_MEDIA_PREFIX, '%sjs/SelectFilter2.js' % ADMIN_MEDIA_PREFIX]) + js.extend(['js/SelectBox.js' , 'js/SelectFilter2.js']) raise StopIteration except StopIteration: break - for j in javascript_imports: - t.append('<script type="text/javascript" src="%s"></script>' % j) + return js - t.append('{% endblock %}\n') - if ordered_objects: - coltype = 'colMS' - else: - coltype = 'colM' - t.append('{%% block coltype %%}%s{%% endblock %%}\n' % coltype) - t.append('{%% block bodyclass %%}%s-%s change-form{%% endblock %%}\n' % (app_label, opts.object_name.lower())) - breadcrumb_title = add and "Add %s" % opts.verbose_name or '{{ original|striptags|truncatewords:"18" }}' - t.append('{%% block breadcrumbs %%}{%% if not is_popup %%}<div class="breadcrumbs"><a href="../../../">Home</a> › <a href="../">%s</a> › %s</div>{%% endif %%}{%% endblock %%}\n' % \ - (capfirst(opts.verbose_name_plural), breadcrumb_title)) - t.append('{% block content %}<div id="content-main">\n') - if change: - t.append('{% if not is_popup %}') - t.append('<ul class="object-tools"><li><a href="history/" class="historylink">History</a></li>') - if hasattr(opts.get_model_module().Klass, 'get_absolute_url'): - t.append('<li><a href="/r/%s/{{ object_id }}/" class="viewsitelink">View on site</a></li>' % opts.get_content_type_id()) - t.append('</ul>\n') - t.append('{% endif %}') - t.append('<form ') - if opts.has_field_type(meta.FileField): - t.append('enctype="multipart/form-data" ') - t.append('action="%s" method="post">\n' % form_url) - t.append('{% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %}') - if opts.admin.save_on_top: - t.extend(_get_submit_row_template(opts, app_label, add, change, show_delete, ordered_objects)) - t.append('{% if form.error_dict %}<p class="errornote">Please correct the error{{ form.error_dict.items|pluralize }} below.</p>{% endif %}\n') - for fieldset_name, options in admin_field_objs: - t.append('<fieldset class="module aligned %s">\n\n' % options.get('classes', '')) - if fieldset_name: - t.append('<h2>%s</h2>\n' % fieldset_name) - for field_list in options['fields']: - t.append(_get_admin_field(field_list, 'form.', False, add, change)) - for f in field_list: - if f.rel and isinstance(f, meta.ManyToManyField) and f.rel.filter_interface: - t.append('<script type="text/javascript">addEvent(window, "load", function(e) { SelectFilter.init("id_%s", "%s", %s, %r); });</script>\n' % (f.name, f.verbose_name, f.rel.filter_interface-1, ADMIN_MEDIA_PREFIX)) - t.append('</fieldset>\n') - if ordered_objects and change: - t.append('<fieldset class="module"><h2>Ordering</h2>') - t.append('<div class="form-row{% if form.order_.errors %} error{% endif %} ">\n') - t.append('{% if form.order_.errors %}{{ form.order_.html_error_list }}{% endif %}') - t.append('<p><label for="id_order_">Order:</label> {{ form.order_ }}</p>\n') - t.append('</div></fieldset>\n') - for rel_obj, rel_field in opts.get_inline_related_objects(): - var_name = rel_obj.object_name.lower() - field_list = [f for f in rel_obj.fields + rel_obj.many_to_many if f.editable and f != rel_field] - t.append('<fieldset class="module%s">\n' % ((rel_field.rel.edit_inline != meta.TABULAR) and ' aligned' or '')) - view_on_site = '' - if change and hasattr(rel_obj, 'get_absolute_url'): - view_on_site = '{%% if %s.original %%}<a href="/r/{{ %s.content_type_id }}/{{ %s.original.id }}/">View on site</a>{%% endif %%}' % (var_name, var_name, var_name) - if rel_field.rel.edit_inline == meta.TABULAR: - t.append('<h2>%s</h2>\n<table>\n' % capfirst(rel_obj.verbose_name_plural)) - t.append('<thead><tr>') - for f in field_list: - if isinstance(f, meta.AutoField): - continue - t.append('<th%s>%s</th>' % (f.blank and ' class="optional"' or '', capfirst(f.verbose_name))) - t.append('</tr></thead>\n') - t.append('{%% for %s in form.%s %%}\n' % (var_name, rel_obj.module_name)) - if change: - for f in field_list: - if use_raw_id_admin(f): - t.append('{%% if %s.original %%}' % var_name) - t.append('<tr class="row-label {% cycle row1,row2 %}">') - t.append('<td colspan="%s"><strong>{{ %s.original }}</strong></td>' % (30, var_name)) - t.append('</tr>{% endif %}\n') - break - t.append('{%% if %s %%}\n' % ' or '.join(['%s.%s.errors' % (var_name, f.name) for f in field_list])) - t.append('<tr class="errorlist"><td colspan="%s">%s</td></tr>\n{%% endif %%}\n' % \ - (len(field_list), ''.join(['{{ %s.%s.html_error_list }}' % (var_name, f.name) for f in field_list]))) - t.append('<tr class="{% cycle row1,row2 %}">\n') - hidden_fields = [] - for f in field_list: - form_widget = _get_admin_field_form_widget(f, var_name+'.', True, add, change) - # Don't put AutoFields within a <td>, because they're hidden. - if not isinstance(f, meta.AutoField): - # Fields with raw_id_admin=True get class="nowrap". - if use_raw_id_admin(f): - t.append('<td class="nowrap {%% if %s.%s.errors %%}error"{%% endif %%}">%s</td>\n' % (var_name, f.name, form_widget)) - else: - t.append('<td{%% if %s.%s.errors %%} class="error"{%% endif %%}>%s</td>\n' % (var_name, f.name, form_widget)) - else: - hidden_fields.append(form_widget) - if hasattr(rel_obj, 'get_absolute_url'): - t.append('<td>%s</td>\n' % view_on_site) - t.append('</tr>\n') - t.append('{% endfor %}\n</table>\n') - # Write out the hidden fields. We didn't write them out earlier - # because it would've been invalid HTML. - t.append('{%% for %s in form.%s %%}\n' % (var_name, rel_obj.module_name)) - t.extend(hidden_fields) - t.append('{% endfor %}\n') - else: # edit_inline == STACKED - t.append('{%% for %s in form.%s %%}' % (var_name, rel_obj.module_name)) - t.append('<h2>%s #{{ forloop.counter }}</h2>' % capfirst(rel_obj.verbose_name)) - if view_on_site: - t.append('<p>%s</p>' % view_on_site) - for f in field_list: - # Don't put AutoFields within the widget -- just use the field. - if isinstance(f, meta.AutoField): - t.append(_get_admin_field_form_widget(f, var_name+'.', True, add, change)) - else: - t.append(_get_admin_field([f], var_name+'.', True, add, change)) - t.append('{% endfor %}\n') - t.append('</fieldset>\n') - t.extend(_get_submit_row_template(opts, app_label, add, change, show_delete, ordered_objects)) - if add: - # Add focus to the first field on the form, if this is an "add" form. - t.append('<script type="text/javascript">document.getElementById("id_%s").focus();</script>' % \ - admin_field_objs[0][1]['fields'][0][0].get_manipulator_field_names('')[0]) - if auto_populated_fields: - t.append('<script type="text/javascript">') - for field in auto_populated_fields: - if change: - t.append('document.getElementById("id_%s")._changed = true;' % field.name) - else: - t.append('document.getElementById("id_%s").onchange = function() { this._changed = true; };' % field.name) - for f in field.prepopulate_from: - t.append('document.getElementById("id_%s").onkeyup = function() { var e = document.getElementById("id_%s"); if (!e._changed) { e.value = URLify(%s, %s);}};' % \ - (f, field.name, ' + " " + '.join(['document.getElementById("id_%s").value' % g for g in field.prepopulate_from]), field.maxlength)) - t.append('</script>\n') - if change and ordered_objects: - t.append('{% if form.order_objects %}<ul id="orderthese">{% for object in form.order_objects %}') - t.append('<li id="p{%% firstof %(x)s %%}"><span id="handlep{%% firstof %(x)s %%}">{{ object|truncatewords:"5" }}</span></li>' % \ - {'x': ' '.join(['object.%s' % o.pk.name for o in ordered_objects])}) - t.append('{% endfor %}</ul>{% endif %}\n') - t.append('</form>\n</div>\n{% endblock %}') - return ''.join(t) -def _get_admin_field(field_list, name_prefix, rel, add, change): - "Returns the template code for editing the given list of fields in the admin template." - field_names = [] - for f in field_list: - field_names.extend(f.get_manipulator_field_names(name_prefix)) - div_class_names = ['form-row', '{%% if %s %%} error{%% endif %%}' % ' or '.join(['%s.errors' % n for n in field_names])] - # Assumes BooleanFields won't be stacked next to each other! - if isinstance(field_list[0], meta.BooleanField): - div_class_names.append('checkbox-row') - t = [] - t.append('<div class="%s">\n' % ' '.join(div_class_names)) - for n in field_names: - t.append('{%% if %s.errors %%}{{ %s.html_error_list }}{%% endif %%}\n' % (n, n)) - for i, field in enumerate(field_list): - label_name = 'id_%s%s' % ((rel and "%s{{ forloop.counter0 }}." % name_prefix or ""), field.get_manipulator_field_names('')[0]) - # BooleanFields are a special case, because the checkbox widget appears to - # the *left* of the label. - if isinstance(field, meta.BooleanField): - t.append(_get_admin_field_form_widget(field, name_prefix, rel, add, change)) - t.append(' <label for="%s" class="vCheckboxLabel">%s</label>' % (label_name, capfirst(field.verbose_name))) - else: - class_names = [] - if not field.blank: - class_names.append('required') - if i > 0: - class_names.append('inline') - t.append('<label for="%s"%s>%s:</label> ' % (label_name, class_names and ' class="%s"' % ' '.join(class_names) or '', capfirst(field.verbose_name))) - t.append(_get_admin_field_form_widget(field, name_prefix, rel, add, change)) - if change and field.primary_key: - t.append('{{ %soriginal.%s }}' % ((rel and name_prefix or ''), field.name)) - if change and use_raw_id_admin(field): - if isinstance(field.rel, meta.ManyToOne): - if_bit = '%soriginal.get_%s' % (rel and name_prefix or '', field.name) - obj_repr = if_bit + '|truncatewords:"14"' - elif isinstance(field.rel, meta.ManyToMany): - if_bit = '%soriginal.get_%s_list' % (rel and name_prefix or '', field.name) - obj_repr = if_bit + '|join:", "|truncatewords:"14"' - t.append('{%% if %s %%} <strong>{{ %s }}</strong>{%% endif %%}' % (if_bit, obj_repr)) - if field.help_text: - t.append('<p class="help">%s</p>\n' % field.help_text) - t.append('</div>\n\n') - return ''.join(t) +class AdminBoundField(BoundField): + def __init__(self, field, field_mapping, original): + super(AdminBoundField, self).__init__(field,field_mapping,original) + + self.element_id = self.form_fields[0].get_id() + self.has_label_first = not isinstance(self.field, meta.BooleanField) + self.raw_id_admin = use_raw_id_admin(field) + self.is_date_time = isinstance(field, meta.DateTimeField) + self.is_file_field = isinstance(field, meta.FileField) + self.needs_add_label = field.rel and isinstance(field.rel, meta.ManyToOne) or isinstance(field.rel, meta.ManyToMany) and field.rel.to.admin + self.hidden = isinstance(self.field, meta.AutoField) + self.first = False + + classes = [] + if(self.raw_id_admin): + classes.append('nowrap') + if max([bool(f.errors()) for f in self.form_fields]): + classes.append('error') + if classes: + self.cell_class_attribute = ' class="%s" ' % ' '.join(classes) + self._repr_filled = False + + def _fetch_existing_display(self, func_name): + class_dict = self.original.__class__.__dict__ + func = class_dict.get(func_name) + return func(self.original) + + def _fill_existing_display(self): + if self._display_filled: + return + #HACK + if isinstance(self.field.rel, meta.ManyToOne): + func_name = 'get_%s' % self.field.name + self._display = self._fetch_existing_display(func_name) + elif isinstance(self.field.rel, meta.ManyToMany): + func_name = 'get_%s_list' % self.field.name + self._display = ",".join(self._fetch_existing_display(func_name)) + self._display_filled = True -def _get_admin_field_form_widget(field, name_prefix, rel, add, change): - "Returns JUST the formfield widget for the field's admin interface." - field_names = field.get_manipulator_field_names(name_prefix) - if isinstance(field, meta.DateTimeField): - return '<p class="datetime">Date: {{ %s }}<br />Time: {{ %s }}</p>' % tuple(field_names) - t = ['{{ %s }}' % n for n in field_names] - if change and isinstance(field, meta.FileField): - return '{%% if %soriginal.%s %%}Currently: <a href="{{ %soriginal.get_%s_url }}">{{ %soriginal.%s }}</a><br />Change: %s{%% else %%}%s{%% endif %%}' % \ - (name_prefix, field.name, name_prefix, field.name, name_prefix, field.name, ''.join(t), ''.join(t)) - field_id = 'id_%s%s' % ((rel and "%s{{ forloop.counter0 }}." % name_prefix or ""), field.get_manipulator_field_names('')[0]) - # raw_id_admin fields get the little lookup link next to them - if use_raw_id_admin(field): - t.append(' <a href="../../../%s/%s/" class="related-lookup" id="lookup_%s" onclick="return showRelatedObjectLookupPopup(this);">' % \ - (field.rel.to.app_label, field.rel.to.module_name, field_id)) - t.append('<img src="%simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>' % ADMIN_MEDIA_PREFIX) - # fields with relationships to editable objects get an "add another" link, - # but only if the field doesn't have raw_admin ('cause in that case they get - # the "add" button in the popup) - elif field.rel and (isinstance(field.rel, meta.ManyToOne) or isinstance(field.rel, meta.ManyToMany)) and field.rel.to.admin: - t.append('{%% if perms.%s.%s %%}' % (field.rel.to.app_label, field.rel.to.get_add_permission())) - t.append(' <a href="../../../%s/%s/add/" class="add-another" id="add_%s" onclick="return showAddAnotherPopup(this);">' % \ - (field.rel.to.app_label, field.rel.to.module_name, field_id)) - t.append('<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="Add Another" /></a>' % ADMIN_MEDIA_PREFIX) - t.append('{% endif %}') - return ''.join(t) + def existing_display(self): + self._fill_existing_display() + return self._display + + def __repr__(self): + return repr(self.__dict__) + + def html_error_list(self): + return " ".join([form_field.html_error_list() for form_field in self.form_fields if form_field.errors]) + +class AdminBoundFieldLine(BoundFieldLine): + def __init__(self, field_line, field_mapping, original): + super(AdminBoundFieldLine, self).__init__(field_line, field_mapping, original, AdminBoundField) + for bound_field in self: + bound_field.first = True + break + +class AdminBoundFieldSet(BoundFieldSet): + def __init__(self, field_set, field_mapping, original): + super(AdminBoundFieldSet, self).__init__(field_set, field_mapping, original, AdminBoundFieldLine) + +class BoundManipulator(object): + def __init__(self, opts, manipulator, field_mapping): + self.inline_related_objects = opts.get_followed_related_objects(manipulator.follow) + self.original = hasattr(manipulator, 'original_object') and manipulator.original_object or None + self.bound_field_sets = [field_set.bind(field_mapping, self.original, AdminBoundFieldSet) + for field_set in opts.admin.get_field_sets(opts)] + self.ordered_objects = opts.get_ordered_objects()[:] + +class AdminBoundManipulator(BoundManipulator): + def __init__(self, opts, manipulator, field_mapping): + super(AdminBoundManipulator, self).__init__(opts, manipulator, field_mapping) + field_sets = opts.admin.get_field_sets(opts) + + self.auto_populated_fields = [f for f in opts.fields if f.prepopulate_from] + self.javascript_imports = get_javascript_imports(opts, self.auto_populated_fields, self.ordered_objects, field_sets); + + self.coltype = self.ordered_objects and 'colMS' or 'colM' + self.has_absolute_url = hasattr(opts.get_model_module().Klass, 'get_absolute_url') + self.form_enc_attrib = opts.has_field_type(meta.FileField) and \ + 'enctype="multipart/form-data" ' or '' + + self.first_form_field_id = self.bound_field_sets[0].bound_field_lines[0].bound_fields[0].form_fields[0].get_id(); + self.ordered_object_pk_names = [o.pk.name for o in self.ordered_objects] + + self.save_on_top = opts.admin.save_on_top + self.save_as = opts.admin.save_as + + self.content_type_id = opts.get_content_type_id() + self.verbose_name_plural = opts.verbose_name_plural + self.verbose_name = opts.verbose_name + self.object_name = opts.object_name + + def get_ordered_object_pk(self, ordered_obj): + for name in self.ordered_object_pk_names: + if hasattr(ordered_obj, name): + return str(getattr(ordered_obj, name)) + return "" + +def render_change_form(opts, manipulator, app_label, context, add=False, change=False, show_delete=False, form_url=''): + extra_context = { + 'add': add, + 'change': change, + 'bound_manipulator' : AdminBoundManipulator(opts, manipulator, context['form']), + 'has_delete_permission' : context['perms'][app_label][opts.get_delete_permission()], + 'form_url' : form_url, + 'app_label': app_label, + } + context.update(extra_context) + return render_to_response(["admin/%s/%s/change_form" % (app_label, opts.object_name.lower() ), + "admin/%s/change_form" % app_label , + "admin/change_form"], context_instance=context) + +def log_add_message(user, opts,manipulator,new_object): + pk_value = getattr(new_object, opts.pk.attname) + log.log_action(user.id, opts.get_content_type_id(), pk_value, str(new_object), log.ADDITION) def add_stage(request, app_label, module_name, show_delete=False, form_url='', post_url='../', post_url_continue='../%s/', object_id_override=None): mod, opts = _get_mod_opts(app_label, module_name) @@ -780,19 +404,17 @@ def add_stage(request, app_label, module_name, show_delete=False, form_url='', p if opts.has_field_type(meta.FileField): new_data.update(request.FILES) errors = manipulator.get_validation_errors(new_data) + manipulator.do_html2python(new_data) + if not errors and not request.POST.has_key("_preview"): - for f in opts.many_to_many: - if f.rel.raw_id_admin: - new_data.setlist(f.name, new_data[f.name].split(",")) - manipulator.do_html2python(new_data) new_object = manipulator.save(new_data) - pk_value = getattr(new_object, opts.pk.attname) - log.log_action(request.user.id, opts.get_content_type_id(), pk_value, repr(new_object), log.ADDITION) - msg = 'The %s "%s" was added successfully.' % (opts.verbose_name, new_object) + log_add_message(request.user, opts,manipulator,new_object) + msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name':opts.verbose_name, 'obj':new_object} + pk_value = getattr(new_object,opts.pk.attname) # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if request.POST.has_key("_continue"): - request.user.add_message("%s You may edit it again below." % msg) + request.user.add_message(msg + ' ' + _("You may edit it again below.")) if request.POST.has_key("_popup"): post_url_continue += "?_popup=1" return HttpResponseRedirect(post_url_continue % pk_value) @@ -800,70 +422,49 @@ def add_stage(request, app_label, module_name, show_delete=False, form_url='', p return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopup(window, %s, "%s");</script>' % \ (pk_value, repr(new_object).replace('"', '\\"'))) elif request.POST.has_key("_addanother"): - request.user.add_message("%s You may add another %s below." % (msg, opts.verbose_name)) + request.user.add_message(msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) return HttpResponseRedirect(request.path) else: request.user.add_message(msg) return HttpResponseRedirect(post_url) - if request.POST.has_key("_preview"): - manipulator.do_html2python(new_data) else: - new_data = {} # Add default data. - for f in opts.fields: - if f.has_default(): - new_data.update(_get_flattened_data(f, f.get_default())) - # In required many-to-one fields with only one available choice, - # select that one available choice. Note: We have to check that - # the length of choices is *2*, not 1, because SelectFields always - # have an initial "blank" value. - elif not f.blank and ((isinstance(f.rel, meta.ManyToOne) and not f.rel.raw_id_admin) or f.choices) and len(manipulator[f.name].choices) == 2: - new_data[f.name] = manipulator[f.name].choices[1][0] - # In required many-to-many fields with only one available choice, - # select that one available choice. - for f in opts.many_to_many: - if not f.blank and not f.rel.edit_inline and not f.rel.raw_id_admin and len(manipulator[f.name].choices) == 1: - new_data[f.name] = [manipulator[f.name].choices[0][0]] - # Add default data for related objects. - for rel_opts, rel_field in opts.get_inline_related_objects(): - var_name = rel_opts.object_name.lower() - for i in range(rel_field.rel.num_in_admin): - for f in rel_opts.fields + rel_opts.many_to_many: - if f.has_default(): - for field_name in f.get_manipulator_field_names(''): - new_data['%s.%d.%s' % (var_name, i, field_name)] = f.get_default() + new_data = manipulator.flatten_data() + # Override the defaults with request.GET, if it exists. new_data.update(request.GET) errors = {} # Populate the FormWrapper. - form = formfields.FormWrapper(manipulator, new_data, errors) - for rel_opts, rel_field in opts.get_inline_related_objects(): - var_name = rel_opts.object_name.lower() - wrapper = [] - for i in range(rel_field.rel.num_in_admin): - collection = {} - for f in rel_opts.fields + rel_opts.many_to_many: - if f.editable and f != rel_field and not isinstance(f, meta.AutoField): - for field_name in f.get_manipulator_field_names(''): - full_field_name = '%s.%d.%s' % (var_name, i, field_name) - collection[field_name] = formfields.FormFieldWrapper(manipulator[full_field_name], new_data.get(full_field_name, ''), errors.get(full_field_name, [])) - wrapper.append(formfields.FormFieldCollection(collection)) - setattr(form, rel_opts.module_name, wrapper) + form = formfields.FormWrapper(manipulator, new_data, errors, edit_inline=True) c = Context(request, { - 'title': 'Add %s' % opts.verbose_name, - "form": form, - "is_popup": request.REQUEST.has_key("_popup"), + 'title': _('Add %s') % opts.verbose_name, + 'form': form, + 'is_popup': request.REQUEST.has_key('_popup'), + 'show_delete': show_delete, }) if object_id_override is not None: c['object_id'] = object_id_override - raw_template = _get_template(opts, app_label, add=True, show_delete=show_delete, form_url=form_url) -# return HttpResponse(raw_template, mimetype='text/plain') - t = loader.get_template_from_string(raw_template) - return HttpResponse(t.render(c)) + + return render_change_form(opts, manipulator, app_label, c, add=True) add_stage = staff_member_required(add_stage) +def log_change_message(user, opts,manipulator,new_object): + pk_value = getattr(new_object, opts.pk.column) + # Construct the change message. + change_message = [] + if manipulator.fields_added: + change_message.append(_('Added %s.') % get_text_list(manipulator.fields_added, _('and'))) + if manipulator.fields_changed: + change_message.append(_('Changed %s.') % get_text_list(manipulator.fields_changed, _('and'))) + if manipulator.fields_deleted: + change_message.append(_('Deleted %s.') % get_text_list(manipulator.fields_deleted, _('and'))) + change_message = ' '.join(change_message) + if not change_message: + change_message = _('No fields changed.') + log.log_action(user.id, opts.get_content_type_id(), pk_value, str(new_object), log.CHANGE, change_message) + def change_stage(request, app_label, module_name, object_id): mod, opts = _get_mod_opts(app_label, module_name) if not request.user.has_perm(app_label + '.' + opts.get_change_permission()): @@ -875,120 +476,72 @@ def change_stage(request, app_label, module_name, object_id): except ObjectDoesNotExist: raise Http404 - inline_related_objects = opts.get_inline_related_objects() if request.POST: new_data = request.POST.copy() if opts.has_field_type(meta.FileField): new_data.update(request.FILES) errors = manipulator.get_validation_errors(new_data) + + manipulator.do_html2python(new_data) if not errors and not request.POST.has_key("_preview"): - for f in opts.many_to_many: - if f.rel.raw_id_admin: - new_data.setlist(f.name, new_data[f.name].split(",")) - manipulator.do_html2python(new_data) new_object = manipulator.save(new_data) - pk_value = getattr(new_object, opts.pk.attname) - - # Construct the change message. - change_message = [] - if manipulator.fields_added: - change_message.append('Added %s.' % get_text_list(manipulator.fields_added, 'and')) - if manipulator.fields_changed: - change_message.append('Changed %s.' % get_text_list(manipulator.fields_changed, 'and')) - if manipulator.fields_deleted: - change_message.append('Deleted %s.' % get_text_list(manipulator.fields_deleted, 'and')) - change_message = ' '.join(change_message) - if not change_message: - change_message = 'No fields changed.' - - log.log_action(request.user.id, opts.get_content_type_id(), pk_value, repr(new_object), log.CHANGE, change_message) - msg = 'The %s "%s" was changed successfully.' % (opts.verbose_name, new_object) + log_change_message(request.user,opts,manipulator,new_object) + msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj':new_object} + pk_value = getattr(new_object,opts.pk.attname) if request.POST.has_key("_continue"): - request.user.add_message("%s You may edit it again below." % msg) + request.user.add_message(msg + ' ' + _("You may edit it again below.")) if request.REQUEST.has_key('_popup'): return HttpResponseRedirect(request.path + "?_popup=1") else: return HttpResponseRedirect(request.path) elif request.POST.has_key("_saveasnew"): - request.user.add_message('The %s "%s" was added successfully. You may edit it again below.' % (opts.verbose_name, new_object)) + request.user.add_message(_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': opts.verbose_name, 'obj': new_object}) return HttpResponseRedirect("../%s/" % pk_value) elif request.POST.has_key("_addanother"): - request.user.add_message("%s You may add another %s below." % (msg, opts.verbose_name)) + request.user.add_message(msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) return HttpResponseRedirect("../add/") else: request.user.add_message(msg) return HttpResponseRedirect("../") - if request.POST.has_key("_preview"): - manipulator.do_html2python(new_data) else: # Populate new_data with a "flattened" version of the current data. - new_data = {} - obj = manipulator.original_object - for f in opts.fields: - new_data.update(_get_flattened_data(f, getattr(obj, f.attname))) - for f in opts.many_to_many: - get_list_func = getattr(obj, 'get_%s_list' % f.rel.singular) - if f.rel.raw_id_admin: - new_data[f.name] = ",".join([str(getattr(i, f.rel.to.pk.attname)) for i in get_list_func()]) - elif not f.rel.edit_inline: - new_data[f.name] = [getattr(i, f.rel.to.pk.attname) for i in get_list_func()] - for rel_obj, rel_field in inline_related_objects: - var_name = rel_obj.object_name.lower() - for i, rel_instance in enumerate(getattr(obj, 'get_%s_list' % opts.get_rel_object_method_name(rel_obj, rel_field))()): - for f in rel_obj.fields: - if f.editable and f != rel_field: - for k, v in _get_flattened_data(f, getattr(rel_instance, f.attname)).items(): - new_data['%s.%d.%s' % (var_name, i, k)] = v - for f in rel_obj.many_to_many: - new_data['%s.%d.%s' % (var_name, i, f.column)] = [j.id for j in getattr(rel_instance, 'get_%s_list' % f.rel.singular)()] + new_data = manipulator.flatten_data() + # TODO: do this in flatten_data... # If the object has ordered objects on its admin page, get the existing # order and flatten it into a comma-separated list of IDs. + id_order_list = [] for rel_obj in opts.get_ordered_objects(): - id_order_list.extend(getattr(obj, 'get_%s_order' % rel_obj.object_name.lower())()) + id_order_list.extend(getattr(manipulator.original_object, 'get_%s_order' % rel_obj.object_name.lower())()) if id_order_list: new_data['order_'] = ','.join(map(str, id_order_list)) errors = {} # Populate the FormWrapper. - form = formfields.FormWrapper(manipulator, new_data, errors) + form = formfields.FormWrapper(manipulator, new_data, errors, edit_inline = True) form.original = manipulator.original_object form.order_objects = [] - for rel_opts, rel_field in inline_related_objects: - var_name = rel_opts.object_name.lower() - wrapper = [] - orig_list = getattr(manipulator.original_object, 'get_%s_list' % opts.get_rel_object_method_name(rel_opts, rel_field))() - count = len(orig_list) + rel_field.rel.num_extra_on_change - if rel_field.rel.min_num_in_admin: - count = max(count, rel_field.rel.min_num_in_admin) - if rel_field.rel.max_num_in_admin: - count = min(count, rel_field.rel.max_num_in_admin) - for i in range(count): - collection = {'original': (i < len(orig_list) and orig_list[i] or None)} - for f in rel_opts.fields + rel_opts.many_to_many: - if f.editable and f != rel_field: - for field_name in f.get_manipulator_field_names(''): - full_field_name = '%s.%d.%s' % (var_name, i, field_name) - collection[field_name] = formfields.FormFieldWrapper(manipulator[full_field_name], new_data.get(full_field_name, f.get_default()), errors.get(full_field_name, [])) - wrapper.append(formfields.FormFieldCollection(collection)) - setattr(form, rel_opts.module_name, wrapper) - if rel_opts.order_with_respect_to and rel_opts.order_with_respect_to.rel and rel_opts.order_with_respect_to.rel.to == opts: + + #TODO Should be done in flatten_data / FormWrapper construction + for related in opts.get_followed_related_objects(): + wrt = related.opts.order_with_respect_to + if wrt and wrt.rel and wrt.rel.to == opts: + func = getattr(manipulator.original_object, 'get_%s_list' % + related.get_method_name_part()) + orig_list = func() form.order_objects.extend(orig_list) c = Context(request, { - 'title': 'Change %s' % opts.verbose_name, - "form": form, + 'title': _('Change %s') % opts.verbose_name, + 'form': form, 'object_id': object_id, 'original': manipulator.original_object, - 'is_popup' : request.REQUEST.has_key('_popup'), + 'is_popup' : request.REQUEST.has_key('_popup') }) - raw_template = _get_template(opts, app_label, change=True) -# return HttpResponse(raw_template, mimetype='text/plain') - t = loader.get_template_from_string(raw_template) - return HttpResponse(t.render(c)) -change_stage = staff_member_required(change_stage) + + return render_change_form(opts,manipulator, app_label, c, change=True) def _nest_help(obj, depth, val): current = obj @@ -1002,75 +555,77 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current if current_depth > 16: return # Avoid recursing too deep. objects_seen = [] - for rel_opts, rel_field in opts.get_all_related_objects(): - if rel_opts in objects_seen: + for related in opts.get_all_related_objects(): + if related.opts in objects_seen: continue - objects_seen.append(rel_opts) - rel_opts_name = opts.get_rel_object_method_name(rel_opts, rel_field) - if isinstance(rel_field.rel, meta.OneToOne): + objects_seen.append(related.opts) + rel_opts_name = related.get_method_name_part() + if isinstance(related.field.rel, meta.OneToOne): try: sub_obj = getattr(obj, 'get_%s' % rel_opts_name)() except ObjectDoesNotExist: pass else: if rel_opts.admin: - p = '%s.%s' % (rel_opts.app_label, rel_opts.get_delete_permission()) + p = '%s.%s' % (related.opts.app_label, related.opts.get_delete_permission()) if not user.has_perm(p): - perms_needed.add(rel_opts.verbose_name) + perms_needed.add(related.opts.verbose_name) # We don't care about populating deleted_objects now. continue - if rel_field.rel.edit_inline or not rel_opts.admin: + if related.field.rel.edit_inline or not related.opts.admin: # Don't display link to edit, because it either has no # admin or is edited inline. - nh(deleted_objects, current_depth, ['%s: %r' % (capfirst(rel_opts.verbose_name), sub_obj), []]) + nh(deleted_objects, current_depth, ['%s: %s' % (capfirst(related.opts.verbose_name), sub_obj), []]) else: # Display a link to the admin page. - nh(deleted_objects, current_depth, ['%s: <a href="../../../../%s/%s/%s/">%r</a>' % \ - (capfirst(rel_opts.verbose_name), rel_opts.app_label, rel_opts.module_name, - getattr(sub_obj, rel_opts.pk.attname), sub_obj), []]) - _get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, rel_opts, current_depth+2) + nh(deleted_objects, current_depth, ['%s: <a href="../../../../%s/%s/%s/">%s</a>' % \ + (capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.module_name, + getattr(sub_obj, related.opts.pk.attname), sub_obj), []]) + _get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2) else: has_related_objs = False for sub_obj in getattr(obj, 'get_%s_list' % rel_opts_name)(): has_related_objs = True - if rel_field.rel.edit_inline or not rel_opts.admin: + if related.field.rel.edit_inline or not related.opts.admin: # Don't display link to edit, because it either has no # admin or is edited inline. - nh(deleted_objects, current_depth, ['%s: %s' % (capfirst(rel_opts.verbose_name), strip_tags(repr(sub_obj))), []]) + nh(deleted_objects, current_depth, ['%s: %s' % (capfirst(related.opts.verbose_name), strip_tags(str(sub_obj))), []]) else: # Display a link to the admin page. nh(deleted_objects, current_depth, ['%s: <a href="../../../../%s/%s/%s/">%s</a>' % \ - (capfirst(rel_opts.verbose_name), rel_opts.app_label, rel_opts.module_name, sub_obj.id, strip_tags(repr(sub_obj))), []]) - _get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, rel_opts, current_depth+2) + (capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(str(sub_obj))), []]) + _get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2) # If there were related objects, and the user doesn't have # permission to delete them, add the missing perm to perms_needed. - if rel_opts.admin and has_related_objs: - p = '%s.%s' % (rel_opts.app_label, rel_opts.get_delete_permission()) + if related.opts.admin and has_related_objs: + p = '%s.%s' % (related.opts.app_label, related.opts.get_delete_permission()) if not user.has_perm(p): perms_needed.add(rel_opts.verbose_name) - for rel_opts, rel_field in opts.get_all_related_many_to_many_objects(): - if rel_opts in objects_seen: + for related in opts.get_all_related_many_to_many_objects(): + if related.opts in objects_seen: continue - objects_seen.append(rel_opts) - rel_opts_name = opts.get_rel_object_method_name(rel_opts, rel_field) + objects_seen.append(related.opts) + rel_opts_name = related.get_method_name_part() has_related_objs = False for sub_obj in getattr(obj, 'get_%s_list' % rel_opts_name)(): has_related_objs = True - if rel_field.rel.edit_inline or not rel_opts.admin: + if related.field.rel.edit_inline or not related.opts.admin: # Don't display link to edit, because it either has no # admin or is edited inline. - nh(deleted_objects, current_depth, ['One or more %s in %s: %s' % \ - (rel_field.name, rel_opts.verbose_name, strip_tags(repr(sub_obj))), []]) + nh(deleted_objects, current_depth, [_('One or more %(fieldname)s in %(name)s: %(obj)s') % \ + {'fieldname': related.field.name, 'name': related.opts.verbose_name, 'obj': strip_tags(str(sub_obj))}, []]) else: # Display a link to the admin page. - nh(deleted_objects, current_depth, ['One or more %s in %s: <a href="../../../../%s/%s/%s/">%s</a>' % \ - (rel_field.name, rel_opts.verbose_name, rel_opts.app_label, rel_opts.module_name, sub_obj.id, strip_tags(repr(sub_obj))), []]) + nh(deleted_objects, current_depth, [ + (_('One or more %(fieldname)s in %(name)s:') % {'fieldname': related.field.name, 'name':related.opts.verbose_name}) + \ + (' <a href="../../../../%s/%s/%s/">%s</a>' % \ + (related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(str(sub_obj)))), []]) # If there were related objects, and the user doesn't have # permission to change them, add the missing perm to perms_needed. - if rel_opts.admin and has_related_objs: - p = '%s.%s' % (rel_opts.app_label, rel_opts.get_change_permission()) + if related.opts.admin and has_related_objs: + p = '%s.%s' % (related.opts.app_label, related.opts.get_change_permission()) if not user.has_perm(p): - perms_needed.add(rel_opts.verbose_name) + perms_needed.add(related.opts.verbose_name) def delete_stage(request, app_label, module_name, object_id): import sets @@ -1081,20 +636,20 @@ def delete_stage(request, app_label, module_name, object_id): # Populate deleted_objects, a data structure of all related objects that # will also be deleted. - deleted_objects = ['%s: <a href="../../%s/">%s</a>' % (capfirst(opts.verbose_name), object_id, strip_tags(repr(obj))), []] + deleted_objects = ['%s: <a href="../../%s/">%s</a>' % (capfirst(opts.verbose_name), object_id, strip_tags(str(obj))), []] perms_needed = sets.Set() _get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1) if request.POST: # The user has already confirmed the deletion. if perms_needed: raise PermissionDenied - obj_repr = repr(obj) + obj_display = str(obj) obj.delete() - log.log_action(request.user.id, opts.get_content_type_id(), object_id, obj_repr, log.DELETION) - request.user.add_message('The %s "%s" was deleted successfully.' % (opts.verbose_name, obj_repr)) + log.log_action(request.user.id, opts.get_content_type_id(), object_id, obj_display, log.DELETION) + request.user.add_message(_('The %(name)s "%(obj)s" was deleted successfully.') % {'name':opts.verbose_name, 'obj':obj_display}) return HttpResponseRedirect("../../") return render_to_response('admin/delete_confirmation', { - "title": "Are you sure?", + "title": _("Are you sure?"), "object_name": opts.verbose_name, "object": obj, "deleted_objects": deleted_objects, @@ -1109,7 +664,7 @@ def history(request, app_label, module_name, object_id): # If no history was found, see whether this object even exists. obj = get_object_or_404(mod, pk=object_id) return render_to_response('admin/object_history', { - 'title': 'Change history: %r' % obj, + 'title': _('Change history: %s') % obj, 'action_list': action_list, 'module_name': capfirst(opts.verbose_name_plural), 'object': obj, diff --git a/django/core/formfields.py b/django/core/formfields.py index 78fd044815..0cfe6b2890 100644 --- a/django/core/formfields.py +++ b/django/core/formfields.py @@ -90,15 +90,7 @@ class Manipulator: expected to deal with invalid input. """ for field in self.fields: - if new_data.has_key(field.field_name): - new_data.setlist(field.field_name, - [field.__class__.html2python(data) for data in new_data.getlist(field.field_name)]) - else: - try: - # individual fields deal with None values themselves - new_data.setlist(field.field_name, [field.__class__.html2python(None)]) - except EmptyValue: - new_data.setlist(field.field_name, []) + field.convert_post_data(new_data) class FormWrapper: """ @@ -106,24 +98,36 @@ class FormWrapper: This allows dictionary-style lookups of formfields. It also handles feeding prepopulated data and validation error messages to the formfield objects. """ - def __init__(self, manipulator, data, error_dict): + def __init__(self, manipulator, data, error_dict, edit_inline=True): self.manipulator, self.data = manipulator, data self.error_dict = error_dict + self._inline_collections = None + self.edit_inline = edit_inline def __repr__(self): - return repr(self.data) + return repr(self.__dict__) def __getitem__(self, key): for field in self.manipulator.fields: if field.field_name == key: - if hasattr(field, 'requires_data_list') and hasattr(self.data, 'getlist'): - data = self.data.getlist(field.field_name) - else: - data = self.data.get(field.field_name, None) - if data is None: - data = '' + data = field.extract_data(self.data) return FormFieldWrapper(field, data, self.error_dict.get(field.field_name, [])) - raise KeyError + if self.edit_inline: + self.fill_inline_collections() + for inline_collection in self._inline_collections: + if inline_collection.name == key: + return inline_collection + raise KeyError, "Could not find Formfield or InlineObjectCollection named %r" % key + + def fill_inline_collections(self): + if not self._inline_collections: + ic = [] + related_objects = self.manipulator.get_related_objects() + for rel_obj in related_objects: + data = rel_obj.extract_data(self.data) + inline_collection = InlineObjectCollection(self.manipulator, rel_obj, data, self.error_dict) + ic.append(inline_collection) + self._inline_collections = ic def has_errors(self): return self.error_dict != {} @@ -166,6 +170,9 @@ class FormFieldWrapper: else: return '' + def get_id(self): + return self.formfield.get_id() + class FormFieldCollection(FormFieldWrapper): "A utility class that gives the template access to a dict of FormFieldWrappers" def __init__(self, formfield_dict): @@ -185,9 +192,66 @@ class FormFieldCollection(FormFieldWrapper): "Returns list of all errors in this collection's formfields" errors = [] for field in self.formfield_dict.values(): - errors.extend(field.errors()) + if hasattr(field, 'errors'): + errors.extend(field.errors()) return errors + def has_errors(self): + return bool(len(self.errors())) + + def html_combined_error_list(self): + return ''.join([field.html_error_list() for field in self.formfield_dict.values() if hasattr(field, 'errors')]) + +class InlineObjectCollection: + "An object that acts like a list of form field collections." + def __init__(self, parent_manipulator, rel_obj, data, errors): + self.parent_manipulator = parent_manipulator + self.rel_obj = rel_obj + self.data = data + self.errors = errors + self._collections = None + self.name = rel_obj.name + + def __len__(self): + self.fill() + return self._collections.__len__() + + def __getitem__(self, k): + self.fill() + return self._collections.__getitem__(k) + + def __setitem__(self, k, v): + self.fill() + return self._collections.__setitem__(k,v) + + def __delitem__(self, k): + self.fill() + return self._collections.__delitem__(k) + + def __iter__(self): + self.fill() + return self._collections.__iter__() + + def fill(self): + if self._collections: + return + else: + var_name = self.rel_obj.opts.object_name.lower() + wrapper = [] + orig = hasattr(self.parent_manipulator, 'original_object') and self.parent_manipulator.original_object or None + orig_list = self.rel_obj.get_list(orig) + for i, instance in enumerate(orig_list): + collection = {'original': instance} + for f in self.rel_obj.editable_fields(): + for field_name in f.get_manipulator_field_names(''): + full_field_name = '%s.%d.%s' % (var_name, i, field_name) + field = self.parent_manipulator[full_field_name] + data = field.extract_data(self.data) + errors = self.errors.get(full_field_name, []) + collection[field_name] = FormFieldWrapper(field, data, errors) + wrapper.append(FormFieldCollection(collection)) + self._collections = wrapper + class FormField: """Abstract class representing a form field. @@ -220,6 +284,37 @@ class FormField: def render(self, data): raise NotImplementedError + def get_member_name(self): + if hasattr(self, 'member_name'): + return self.member_name + else: + return self.field_name + + def extract_data(self, data_dict): + if hasattr(self, 'requires_data_list') and hasattr(data_dict, 'getlist'): + data = data_dict.getlist(self.get_member_name()) + else: + data = data_dict.get(self.get_member_name(), None) + if data is None: + data = '' + return data + + def convert_post_data(self, new_data): + name = self.get_member_name() + if new_data.has_key(self.field_name): + d = new_data.getlist(self.field_name) + try: + converted_data = [self.__class__.html2python(data) for data in d] + except ValueError: + converted_data = d + new_data.setlist(name, converted_data) + else: + try: + # individual fields deal with None values themselves + new_data.setlist(name, [self.__class__.html2python(None)]) + except EmptyValue: + new_data.setlist(name, []) + def get_id(self): "Returns the HTML 'id' attribute for this form field." return FORM_FIELD_ID_PREFIX + self.field_name @@ -313,11 +408,13 @@ class CheckboxField(FormField): html2python = staticmethod(html2python) class SelectField(FormField): - def __init__(self, field_name, choices=[], size=1, is_required=False, validator_list=[]): + def __init__(self, field_name, choices=[], size=1, is_required=False, validator_list=[], member_name=None): self.field_name = field_name # choices is a list of (value, human-readable key) tuples because order matters self.choices, self.size, self.is_required = choices, size, is_required self.validator_list = [self.isValidChoice] + validator_list + if member_name != None: + self.member_name = member_name def render(self, data): output = ['<select id="%s" class="v%s%s" name="%s" size="%s">' % \ @@ -347,12 +444,14 @@ class NullSelectField(SelectField): html2python = staticmethod(html2python) class RadioSelectField(FormField): - def __init__(self, field_name, choices=[], ul_class='', is_required=False, validator_list=[]): + def __init__(self, field_name, choices=[], ul_class='', is_required=False, validator_list=[], member_name=None): self.field_name = field_name # choices is a list of (value, human-readable key) tuples because order matters self.choices, self.is_required = choices, is_required self.validator_list = [self.isValidChoice] + validator_list self.ul_class = ul_class + if member_name != None: + self.member_name = member_name def render(self, data): """ @@ -483,8 +582,8 @@ class CheckboxSelectMultipleField(SelectMultipleField): checked_html = ' checked="checked"' field_name = '%s%s' % (self.field_name, value) output.append('<li><input type="checkbox" id="%s" class="v%s" name="%s"%s /> <label for="%s">%s</label></li>' % \ - (self.get_id(), self.__class__.__name__, field_name, checked_html, - self.get_id(), choice)) + (self.get_id() + value , self.__class__.__name__, field_name, checked_html, + self.get_id() + value, choice)) output.append('</ul>') return '\n'.join(output) @@ -528,8 +627,10 @@ class ImageUploadField(FileUploadField): #################### class IntegerField(TextField): - def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[]): + def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[], member_name=None): validator_list = [self.isInteger] + validator_list + if member_name is not None: + self.member_name = member_name TextField.__init__(self, field_name, length, maxlength, is_required, validator_list) def isInteger(self, field_data, all_data): @@ -784,6 +885,11 @@ class CommaSeparatedIntegerField(TextField): except validators.ValidationError, e: raise validators.CriticalValidationError, e.messages +class RawIdAdminField(CommaSeparatedIntegerField): + def html2python(data): + return data.split(','); + html2python = classmethod(html2python) + class XMLLargeTextField(LargeTextField): """ A LargeTextField with an XML validator. The schema_path argument is the diff --git a/django/core/management.py b/django/core/management.py index efc1d9f42c..d34ee6fc4d 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -670,12 +670,12 @@ def get_validation_errors(outfile): e.add(opts, '"ordering" refers to "%s", a field that doesn\'t exist.' % field_name) # Check core=True, if needed. - for rel_opts, rel_field in opts.get_inline_related_objects(): + for related in opts.get_followed_related_objects(): try: - for f in rel_opts.fields: + for f in related.opts.fields: if f.core: raise StopIteration - e.add(rel_opts, "At least one field in %s should have core=True, because it's being edited inline by %s.%s." % (rel_opts.object_name, opts.module_name, opts.object_name)) + e.add(related.opts, "At least one field in %s should have core=True, because it's being edited inline by %s.%s." % (related.opts.object_name, opts.module_name, opts.object_name)) except StopIteration: pass diff --git a/django/core/meta/__init__.py b/django/core/meta/__init__.py index b6a148bcf6..76830d0c02 100644 --- a/django/core/meta/__init__.py +++ b/django/core/meta/__init__.py @@ -148,6 +148,140 @@ class FieldDoesNotExist(Exception): class BadKeywordArguments(Exception): pass +class BoundRelatedObject(object): + def __init__(self, related_object, field_mapping, original): + self.relation = related_object + self.field_mappings = field_mapping[related_object.opts.module_name] + + def template_name(self): + raise NotImplementedError + + def __repr__(self): + return repr(self.__dict__) + +class RelatedObject(object): + def __init__(self, parent_opts, opts, field): + self.parent_opts = parent_opts + self.opts = opts + self.field = field + self.edit_inline = field.rel.edit_inline + self.name = opts.module_name + self.var_name = opts.object_name.lower() + + def flatten_data(self, follow, obj=None): + new_data = {} + rel_instances = self.get_list(obj) + for i, rel_instance in enumerate(rel_instances): + instance_data = {} + for f in self.opts.fields + self.opts.many_to_many: + # TODO: Fix for recursive manipulators. + fol = follow.get(f.name, None) + if fol: + field_data = f.flatten_data(fol, rel_instance) + for name, value in field_data.items(): + instance_data['%s.%d.%s' % (self.var_name, i, name)] = value + new_data.update(instance_data) + return new_data + + def extract_data(self, data): + """ + Pull out the data meant for inline objects of this class, + i.e. anything starting with our module name. + """ + return data # TODO + + def get_list(self, parent_instance=None): + "Get the list of this type of object from an instance of the parent class." + if parent_instance != None: + func_name = 'get_%s_list' % self.get_method_name_part() + func = getattr(parent_instance, func_name) + list = func() + + count = len(list) + self.field.rel.num_extra_on_change + if self.field.rel.min_num_in_admin: + count = max(count, self.field.rel.min_num_in_admin) + if self.field.rel.max_num_in_admin: + count = min(count, self.field.rel.max_num_in_admin) + + change = count - len(list) + if change > 0: + return list + [None for _ in range(change)] + if change < 0: + return list[:change] + else: # Just right + return list + else: + return [None for _ in range(self.field.rel.num_in_admin)] + + + def editable_fields(self): + "Get the fields in this class that should be edited inline." + return [f for f in self.opts.fields + self.opts.many_to_many if f.editable and f != self.field] + + def get_follow(self, override=None): + if isinstance(override, bool): + if override: + over = {} + else: + return None + else: + if override: + over = override.copy() + elif self.edit_inline: + over = {} + else: + return None + + over[self.field.name] = False + return self.opts.get_follow(over) + + def __repr__(self): + return "<RelatedObject: %s related to %s>" % ( self.name, self.field.name) + + def get_manipulator_fields(self, opts, manipulator, change, follow): + # TODO: Remove core fields stuff. + if change: + meth_name = 'get_%s_count' % self.get_method_name_part() + count = getattr(manipulator.original_object, meth_name)() + count += self.field.rel.num_extra_on_change + if self.field.rel.min_num_in_admin: + count = max(count, self.field.rel.min_num_in_admin) + if self.field.rel.max_num_in_admin: + count = min(count, self.field.rel.max_num_in_admin) + else: + count = self.field.rel.num_in_admin + + fields = [] + for i in range(count): + for f in self.opts.fields + self.opts.many_to_many: + if follow.get(f.name, False): + prefix = '%s.%d.' % (self.var_name, i) + fields.extend(f.get_manipulator_fields(self.opts, manipulator, change, name_prefix=prefix, rel=True)) + return fields + + def bind(self, field_mapping, original, bound_related_object_class=BoundRelatedObject): + return bound_related_object_class(self, field_mapping, original) + + def get_method_name_part(self): + # This method encapsulates the logic that decides what name to give a + # method that retrieves related many-to-one objects. Usually it just + # uses the lower-cased object_name, but if the related object is in + # another app, its app_label is appended. + # + # Examples: + # + # # Normal case -- a related object in the same app. + # # This method returns "choice". + # Poll.get_choice_list() + # + # # A related object in a different app. + # # This method returns "lcom_bestofaward". + # Place.get_lcom_bestofaward_list() # "lcom_bestofaward" + rel_obj_name = self.field.rel.related_name or self.opts.object_name.lower() + if self.parent_opts.app_label != self.opts.app_label: + rel_obj_name = '%s_%s' % (self.opts.app_label, rel_obj_name) + return rel_obj_name + class Options: def __init__(self, module_name='', verbose_name='', verbose_name_plural='', db_table='', fields=None, ordering=None, unique_together=None, admin=None, has_related_links=False, @@ -268,26 +402,6 @@ class Options: def get_delete_permission(self): return 'delete_%s' % self.object_name.lower() - def get_rel_object_method_name(self, rel_opts, rel_field): - # This method encapsulates the logic that decides what name to give a - # method that retrieves related many-to-one objects. Usually it just - # uses the lower-cased object_name, but if the related object is in - # another app, its app_label is appended. - # - # Examples: - # - # # Normal case -- a related object in the same app. - # # This method returns "choice". - # Poll.get_choice_list() - # - # # A related object in a different app. - # # This method returns "lcom_bestofaward". - # Place.get_lcom_bestofaward_list() # "lcom_bestofaward" - rel_obj_name = rel_field.rel.related_name or rel_opts.object_name.lower() - if self.app_label != rel_opts.app_label: - rel_obj_name = '%s_%s' % (rel_opts.app_label, rel_obj_name) - return rel_obj_name - def get_all_related_objects(self): try: # Try the cache first. return self._all_related_objects @@ -298,7 +412,7 @@ class Options: for klass in mod._MODELS: for f in klass._meta.fields: if f.rel and self == f.rel.to: - rel_objs.append((klass._meta, f)) + rel_objs.append(RelatedObject(self, klass._meta, f)) if self.has_related_links: # Manually add RelatedLink objects, which are a special case. relatedlinks = get_module('relatedlinks', 'relatedlinks') @@ -312,12 +426,31 @@ class Options: 'content_type__package__label__exact': self.app_label, 'content_type__python_module_name__exact': self.module_name, }) - rel_objs.append((relatedlinks.RelatedLink._meta, link_field)) + rel_objs.append(RelatedObject(self, relatedlinks.RelatedLink._meta, link_field)) self._all_related_objects = rel_objs return rel_objs - def get_inline_related_objects(self): - return [(a, b) for a, b in self.get_all_related_objects() if b.rel.edit_inline] + def get_followed_related_objects(self, follow=None): + if follow == None: + follow = self.get_follow() + return [f for f in self.get_all_related_objects() if follow.get(f.name, None)] + + def get_data_holders(self, follow=None): + if follow == None: + follow = self.get_follow() + return [f for f in self.fields + self.many_to_many + self.get_all_related_objects() if follow.get(f.name, None)] + + def get_follow(self, override=None): + follow = {} + for f in self.fields + self.many_to_many + self.get_all_related_objects(): + if override and override.has_key(f.name): + child_override = override[f.name] + else: + child_override = None + fol = f.get_follow(child_override) + if fol: + follow[f.name] = fol + return follow def get_all_related_many_to_many_objects(self): module_list = get_installed_model_modules() @@ -327,7 +460,7 @@ class Options: try: for f in klass._meta.many_to_many: if f.rel and self == f.rel.to: - rel_objs.append((klass._meta, f)) + rel_objs.append(RelatedObject(self, klass._meta, f)) raise StopIteration except StopIteration: continue @@ -345,11 +478,12 @@ class Options: self._ordered_objects = objects return self._ordered_objects - def has_field_type(self, field_type): + def has_field_type(self, field_type, follow=None): """ Returns True if this object's admin form has at least one of the given field_type (e.g. FileField). """ + # TODO: follow if not hasattr(self, '_field_types'): self._field_types = {} if not self._field_types.has_key(field_type): @@ -359,8 +493,8 @@ class Options: if isinstance(f, field_type): raise StopIteration # Failing that, check related fields. - for rel_obj, rel_field in self.get_inline_related_objects(): - for f in rel_obj.fields: + for related in self.get_followed_related_objects(follow): + for f in related.opts.fields: if isinstance(f, field_type): raise StopIteration except StopIteration: @@ -597,6 +731,7 @@ class ModelBase(type): new_mod.get_latest = curry(function_get_latest, opts, new_class, does_not_exist_exception) for f in opts.fields: + #TODO : change this into a virtual function so that user defined fields will be able to add methods to module or class. if f.choices: # Add "get_thingie_display" method to get human-readable value. func = curry(method_get_display_value, f) @@ -720,12 +855,9 @@ class ModelBase(type): old_app._MODELS[i] = new_class # Replace all relationships to the old class with # relationships to the new one. - for rel_opts, rel_field in model._meta.get_all_related_objects(): - rel_field.rel.to = opts - for rel_opts, rel_field in model._meta.get_all_related_many_to_many_objects(): - rel_field.rel.to = opts + for related in model._meta.get_all_related_objects() + model._meta.get_all_related_many_to_many_objects(): + related.field.rel.to = opts break - return new_class class Model: @@ -826,9 +958,9 @@ def method_delete(opts, self): if hasattr(self, '_pre_delete'): self._pre_delete() cursor = db.db.cursor() - for rel_opts, rel_field in opts.get_all_related_objects(): - rel_opts_name = opts.get_rel_object_method_name(rel_opts, rel_field) - if isinstance(rel_field.rel, OneToOne): + for related in opts.get_all_related_objects(): + rel_opts_name = related.get_method_name_part() + if isinstance(related.field.rel, OneToOne): try: sub_obj = getattr(self, 'get_%s' % rel_opts_name)() except ObjectDoesNotExist: @@ -838,9 +970,9 @@ def method_delete(opts, self): else: for sub_obj in getattr(self, 'get_%s_list' % rel_opts_name)(): sub_obj.delete() - for rel_opts, rel_field in opts.get_all_related_many_to_many_objects(): + for related in opts.get_all_related_many_to_many_objects(): cursor.execute("DELETE FROM %s WHERE %s=%%s" % \ - (db.db.quote_name(rel_field.get_m2m_db_table(rel_opts)), + (db.db.quote_name(related.field.get_m2m_db_table(related.opts)), db.db.quote_name(self._meta.object_name.lower() + '_id')), [getattr(self, opts.pk.attname)]) for f in opts.many_to_many: cursor.execute("DELETE FROM %s WHERE %s=%%s" % \ @@ -1474,6 +1606,8 @@ def get_manipulator(opts, klass, extra_methods, add=False, change=False): man.__module__ = MODEL_PREFIX + '.' + opts.module_name # Set this explicitly, as above. man.__init__ = curry(manipulator_init, opts, add, change) man.save = curry(manipulator_save, opts, klass, add, change) + man.get_related_objects = curry(manipulator_get_related_objects, opts, klass, add, change) + man.flatten_data = curry(manipulator_flatten_data, opts, klass, add, change) for field_name_list in opts.unique_together: setattr(man, 'isUnique%s' % '_'.join(field_name_list), curry(manipulator_validator_unique_together, field_name_list, opts)) for f in opts.fields: @@ -1487,7 +1621,9 @@ def get_manipulator(opts, klass, extra_methods, add=False, change=False): setattr(man, k, v) return man -def manipulator_init(opts, add, change, self, obj_key=None): +def manipulator_init(opts, add, change, self, obj_key=None, follow=None): + self.follow = opts.get_follow(follow) + if change: assert obj_key is not None, "ChangeManipulator.__init__() must be passed obj_key parameter." self.obj_key = obj_key @@ -1511,40 +1647,37 @@ def manipulator_init(opts, add, change, self, obj_key=None): else: raise self.fields = [] + for f in opts.fields + opts.many_to_many: - if f.editable and not (f.primary_key and change) and (not f.rel or not f.rel.edit_inline): + if self.follow.get(f.name, False): self.fields.extend(f.get_manipulator_fields(opts, self, change)) # Add fields for related objects. - for rel_opts, rel_field in opts.get_inline_related_objects(): - if change: - count = getattr(self.original_object, 'get_%s_count' % opts.get_rel_object_method_name(rel_opts, rel_field))() - count += rel_field.rel.num_extra_on_change - if rel_field.rel.min_num_in_admin: - count = max(count, rel_field.rel.min_num_in_admin) - if rel_field.rel.max_num_in_admin: - count = min(count, rel_field.rel.max_num_in_admin) - else: - count = rel_field.rel.num_in_admin - for f in rel_opts.fields + rel_opts.many_to_many: - if f.editable and f != rel_field and (not f.primary_key or (f.primary_key and change)): - for i in range(count): - self.fields.extend(f.get_manipulator_fields(rel_opts, self, change, name_prefix='%s.%d.' % (rel_opts.object_name.lower(), i), rel=True)) + for f in opts.get_all_related_objects(): + if self.follow.get(f.name, False): + fol = self.follow[f.name] + self.fields.extend(f.get_manipulator_fields(opts, self, change, fol)) # Add field for ordering. if change and opts.get_ordered_objects(): self.fields.append(formfields.CommaSeparatedIntegerField(field_name="order_")) def manipulator_save(opts, klass, add, change, self, new_data): + # TODO: big cleanup when core fields go -> use recursive manipulators. from django.utils.datastructures import DotExpandedDict params = {} for f in opts.fields: - # Fields with auto_now_add are another special case; they should keep - # their original value in the change stage. - if change and getattr(f, 'auto_now_add', False): - params[f.attname] = getattr(self.original_object, f.attname) + # Fields with auto_now_add should keep their original value in the change stage. + auto_now_add = change and getattr(f, 'auto_now_add', False) + if self.follow.get(f.name, None) and not auto_now_add: + param = f.get_manipulator_new_data(new_data) else: - params[f.attname] = f.get_manipulator_new_data(new_data) + if change: + param = getattr(self.original_object, f.attname) + else: + param = f.get_default() + params[f.attname] = param + if change: params[opts.pk.attname] = self.obj_key @@ -1567,101 +1700,116 @@ def manipulator_save(opts, klass, add, change, self, new_data): # Save many-to-many objects. Example: Poll.set_sites() for f in opts.many_to_many: - if not f.rel.edit_inline: - was_changed = getattr(new_object, 'set_%s' % f.name)(new_data.getlist(f.name)) - if change and was_changed: - self.fields_changed.append(f.verbose_name) + if self.follow.get(f.name, None): + if not f.rel.edit_inline: + was_changed = getattr(new_object, 'set_%s' % f.name)(new_data.getlist(f.name)) + if change and was_changed: + self.fields_changed.append(f.verbose_name) + expanded_data = DotExpandedDict(new_data.data) # Save many-to-one objects. Example: Add the Choice objects for a Poll. - for rel_opts, rel_field in opts.get_inline_related_objects(): + for related in opts.get_all_related_objects(): # Create obj_list, which is a DotExpandedDict such as this: # [('0', {'id': ['940'], 'choice': ['This is the first choice']}), # ('1', {'id': ['941'], 'choice': ['This is the second choice']}), # ('2', {'id': [''], 'choice': ['']})] - obj_list = DotExpandedDict(new_data.data)[rel_opts.object_name.lower()].items() - obj_list.sort(lambda x, y: cmp(int(x[0]), int(y[0]))) - params = {} + child_follow = self.follow.get(related.name, None) - # For each related item... - for _, rel_new_data in obj_list: + if child_follow: + obj_list = expanded_data[related.var_name].items() + obj_list.sort(lambda x, y: cmp(int(x[0]), int(y[0]))) + params = {} - # Keep track of which core=True fields were provided. - # If all core fields were given, the related object will be saved. - # If none of the core fields were given, the object will be deleted. - # If some, but not all, of the fields were given, the validator would - # have caught that. - all_cores_given, all_cores_blank = True, True - # Get a reference to the old object. We'll use it to compare the - # old to the new, to see which fields have changed. - if change: + # For each related item... + for _, rel_new_data in obj_list: + + # Keep track of which core=True fields were provided. + # If all core fields were given, the related object will be saved. + # If none of the core fields were given, the object will be deleted. + # If some, but not all, of the fields were given, the validator would + # have caught that. + all_cores_given, all_cores_blank = True, True + + # Get a reference to the old object. We'll use it to compare the + # old to the new, to see which fields have changed. old_rel_obj = None - if rel_new_data[rel_opts.pk.name][0]: - try: - old_rel_obj = getattr(self.original_object, 'get_%s' % opts.get_rel_object_method_name(rel_opts, rel_field))(**{'%s__exact' % rel_opts.pk.name: rel_new_data[rel_opts.pk.attname][0]}) - except ObjectDoesNotExist: - pass + if change: + if rel_new_data[related.opts.pk.name][0]: + try: + old_rel_obj = getattr(self.original_object, 'get_%s' % related.get_method_name_part() )(**{'%s__exact' % related.opts.pk.name: rel_new_data[related.opts.pk.attname][0]}) + except ObjectDoesNotExist: + pass - for f in rel_opts.fields: - if f.core and not isinstance(f, FileField) and f.get_manipulator_new_data(rel_new_data, rel=True) in (None, ''): - all_cores_given = False - elif f.core and not isinstance(f, FileField) and f.get_manipulator_new_data(rel_new_data, rel=True) not in (None, ''): - all_cores_blank = False - # If this field isn't editable, give it the same value it had - # previously, according to the given ID. If the ID wasn't - # given, use a default value. FileFields are also a special - # case, because they'll be dealt with later. - if change and (isinstance(f, FileField) or not f.editable): - if rel_new_data.get(rel_opts.pk.attname, False) and rel_new_data[rel_opts.pk.attname][0]: - params[f.attname] = getattr(old_rel_obj, f.attname) + for f in related.opts.fields: + if f.core and not isinstance(f, FileField) and f.get_manipulator_new_data(rel_new_data, rel=True) in (None, ''): + all_cores_given = False + elif f.core and not isinstance(f, FileField) and f.get_manipulator_new_data(rel_new_data, rel=True) not in (None, ''): + all_cores_blank = False + # If this field isn't editable, give it the same value it had + # previously, according to the given ID. If the ID wasn't + # given, use a default value. FileFields are also a special + # case, because they'll be dealt with later. + + if f == related.field: + param = getattr(new_object, related.field.rel.field_name) + elif add and isinstance(f, AutoField): + param = None + elif change and (isinstance(f, FileField) or not child_follow.get(f.name, None)): + if old_rel_obj: + param = getattr(old_rel_obj, f.column) + else: + param = f.get_default() else: - params[f.attname] = f.get_default() - elif f == rel_field: - params[f.attname] = getattr(new_object, rel_field.rel.field_name) - elif add and isinstance(f, AutoField): - params[f.attname] = None - else: - params[f.attname] = f.get_manipulator_new_data(rel_new_data, rel=True) - # Related links are a special case, because we have to - # manually set the "content_type_id" and "object_id" fields. - if opts.has_related_links and rel_opts.module_name == 'relatedlinks': - contenttypes_mod = get_module('core', 'contenttypes') - params['content_type_id'] = contenttypes_mod.get_object(package__label__exact=opts.app_label, python_module_name__exact=opts.module_name).id - params['object_id'] = new_object.id + param = f.get_manipulator_new_data(rel_new_data, rel=True) + if param != None: + params[f.attname] = param - # Create the related item. - new_rel_obj = rel_opts.get_model_module().Klass(**params) - # If all the core fields were provided (non-empty), save the item. - if all_cores_given: - new_rel_obj.save() + # Related links are a special case, because we have to + # manually set the "content_type_id" and "object_id" fields. + if opts.has_related_links and related.opts.module_name == 'relatedlinks': + contenttypes_mod = get_module('core', 'contenttypes') + params['content_type_id'] = contenttypes_mod.get_object(package__label__exact=opts.app_label, python_module_name__exact=opts.module_name).id + params['object_id'] = new_object.id - # Save any uploaded files. - for f in rel_opts.fields: - if isinstance(f, FileField) and rel_new_data.get(f.attname, False): - f.save_file(rel_new_data, new_rel_obj, change and old_rel_obj or None, old_rel_obj is not None, rel=True) + # Create the related item. + new_rel_obj = related.opts.get_model_module().Klass(**params) - # Calculate whether any fields have changed. - if change: - if not old_rel_obj: # This object didn't exist before. - self.fields_added.append('%s "%r"' % (rel_opts.verbose_name, new_rel_obj)) - else: - for f in rel_opts.fields: - if not f.primary_key and f != rel_field and str(getattr(old_rel_obj, f.attname)) != str(getattr(new_rel_obj, f.attname)): - self.fields_changed.append('%s for %s "%r"' % (f.verbose_name, rel_opts.verbose_name, new_rel_obj)) - # Save many-to-many objects. - for f in rel_opts.many_to_many: - if not f.rel.edit_inline: - was_changed = getattr(new_rel_obj, 'set_%s' % f.name)(rel_new_data[f.attname]) - if change and was_changed: - self.fields_changed.append('%s for %s "%s"' % (f.verbose_name, rel_opts.verbose_name, new_rel_obj)) - # If, in the change stage, all of the core fields were blank and - # the primary key (ID) was provided, delete the item. - if change and all_cores_blank and rel_new_data.has_key(rel_opts.pk.attname) and rel_new_data[rel_opts.pk.attname][0]: - new_rel_obj.delete() - self.fields_deleted.append('%s "%r"' % (rel_opts.verbose_name, old_rel_obj)) + # If all the core fields were provided (non-empty), save the item. + if all_cores_given: + new_rel_obj.save() + + # Save any uploaded files. + for f in related.opts.fields: + if child_follow.get(f.name, None): + if isinstance(f, FileField) and rel_new_data.get(f.name, False): + f.save_file(rel_new_data, new_rel_obj, change and old_rel_obj or None, old_rel_obj is not None, rel=True) + + # Calculate whether any fields have changed. + if change: + if not old_rel_obj: # This object didn't exist before. + self.fields_added.append('%s "%s"' % (related.opts.verbose_name, new_rel_obj)) + else: + for f in related.opts.fields: + if not f.primary_key and f != related.field and str(getattr(old_rel_obj, f.attname)) != str(getattr(new_rel_obj, f.attname)): + self.fields_changed.append('%s for %s "%s"' % (f.verbose_name, related.opts.verbose_name, new_rel_obj)) + + # Save many-to-many objects. + for f in related.opts.many_to_many: + if child_follow.get(f.name, None) and not f.rel.edit_inline: + was_changed = getattr(new_rel_obj, 'set_%s' % f.name)(rel_new_data[f.attname]) + if change and was_changed: + self.fields_changed.append('%s for %s "%s"' % (f.verbose_name, related.opts.verbose_name, new_rel_obj)) + + # If, in the change stage, all of the core fields were blank and + # the primary key (ID) was provided, delete the item. + if change and all_cores_blank and old_rel_obj: + new_rel_obj.delete() + self.fields_deleted.append('%s "%s"' % (related.opts.verbose_name, old_rel_obj)) + # Save the order, if applicable. if change and opts.get_ordered_objects(): @@ -1670,6 +1818,17 @@ def manipulator_save(opts, klass, add, change, self, new_data): getattr(new_object, 'set_%s_order' % rel_opts.object_name.lower())(order) return new_object +def manipulator_get_related_objects(opts, klass, add, change, self): + return opts.get_followed_related_objects(self.follow) + +def manipulator_flatten_data(opts, klass, add, change, self): + new_data = {} + obj = change and self.original_object or None + for f in opts.get_data_holders(self.follow): + fol = self.follow.get(f.name) + new_data.update(f.flatten_data(fol, obj)) + return new_data + def manipulator_validator_unique_together(field_name_list, opts, self, field_data, all_data): from django.utils.text import get_text_list field_list = [opts.get_field(field_name) for field_name in field_name_list] @@ -1678,6 +1837,9 @@ def manipulator_validator_unique_together(field_name_list, opts, self, field_dat else: kwargs = {'%s__iexact' % field_name_list[0]: field_data} for f in field_list[1:]: + # This is really not going to work for fields that have different + # form fields, e.g. DateTime. + # This validation needs to occur after html2python to be effective. field_val = all_data.get(f.attname, None) if field_val is None: # This will be caught by another validator, assuming the field diff --git a/django/core/meta/fields.py b/django/core/meta/fields.py index 299348e629..c45c7b6e02 100644 --- a/django/core/meta/fields.py +++ b/django/core/meta/fields.py @@ -59,6 +59,24 @@ def manipulator_validator_unique(f, opts, self, field_data, all_data): return raise validators.ValidationError, _("%(optname)s with this %(fieldname)s already exists.") % {'optname': capfirst(opts.verbose_name), 'fieldname': f.verbose_name} +class BoundField(object): + def __init__(self, field, field_mapping, original): + self.field = field + self.original = original + self.form_fields = self.resolve_form_fields(field_mapping) + + def resolve_form_fields(self, field_mapping): + return [field_mapping[name] for name in self.field.get_manipulator_field_names('')] + + def as_field_list(self): + return [self.field] + + def original_value(self): + if self.original: + return self.original.__dict__[self.field.column] + + def __repr__(self): + return "BoundField:(%s, %s)" % (self.field.name, self.form_fields) # A guide to Field parameters: # @@ -185,7 +203,7 @@ class Field(object): if hasattr(self.default, '__get_value__'): return self.default.__get_value__() return self.default - if self.null: + if not self.empty_strings_allowed or self.null: return None return "" @@ -207,28 +225,28 @@ class Field(object): if self.maxlength and not self.choices: # Don't give SelectFields a maxlength parameter. params['maxlength'] = self.maxlength if isinstance(self.rel, ManyToOne): + params['member_name'] = name_prefix + self.attname if self.rel.raw_id_admin: field_objs = self.get_manipulator_field_objs() params['validator_list'].append(curry(manipulator_valid_rel_key, self, manipulator)) else: if self.radio_admin: field_objs = [formfields.RadioSelectField] - params['choices'] = self.get_choices(include_blank=self.blank, blank_choice=BLANK_CHOICE_NONE) params['ul_class'] = get_ul_class(self.radio_admin) else: if self.null: field_objs = [formfields.NullSelectField] else: field_objs = [formfields.SelectField] - params['choices'] = self.get_choices() + params['choices'] = self.get_choices_default() elif self.choices: if self.radio_admin: field_objs = [formfields.RadioSelectField] - params['choices'] = self.get_choices(include_blank=self.blank, blank_choice=BLANK_CHOICE_NONE) params['ul_class'] = get_ul_class(self.radio_admin) else: field_objs = [formfields.SelectField] - params['choices'] = self.get_choices() + + params['choices'] = self.get_choices_default() else: field_objs = self.get_manipulator_field_objs() @@ -294,7 +312,37 @@ class Field(object): if self.choices: return first_choice + list(self.choices) rel_obj = self.rel.to - return first_choice + [(getattr(x, rel_obj.pk.attname), repr(x)) for x in rel_obj.get_model_module().get_list(**self.rel.limit_choices_to)] + return first_choice + [(getattr(x, rel_obj.pk.attname), str(x)) + for x in rel_obj.get_model_module().get_list(**self.rel.limit_choices_to)] + + def get_choices_default(self): + if(self.radio_admin): + return self.get_choices(include_blank=self.blank, blank_choice=BLANK_CHOICE_NONE) + else: + return self.get_choices() + + def _get_val_from_obj(self, obj): + if obj: + return getattr(obj, self.attname) + else: + return self.get_default() + + def flatten_data(self, follow, obj = None): + """ + Returns a dictionary mapping the field's manipulator field names to its + "flattened" string values for the admin view. obj is the instance to + extract the values from. + """ + return {self.attname: self._get_val_from_obj(obj)} + + def get_follow(self, override=None): + if override != None: + return override + else: + return self.editable + + def bind(self, fieldmapping, original, bound_field_class=BoundField): + return bound_field_class(self, fieldmapping, original) class AutoField(Field): empty_strings_allowed = False @@ -335,8 +383,10 @@ class DateField(Field): empty_strings_allowed = False def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs): self.auto_now, self.auto_now_add = auto_now, auto_now_add + #HACKs : auto_now_add/auto_now should be done as a default or a pre_save... if auto_now or auto_now_add: kwargs['editable'] = False + kwargs['blank'] = True Field.__init__(self, verbose_name, name, **kwargs) def get_db_prep_lookup(self, lookup_type, value): @@ -351,6 +401,13 @@ class DateField(Field): return datetime.datetime.now() return value + # Needed because of horrible auto_now[_add] behaviour wrt. editable + def get_follow(self, override=None): + if override != None: + return override + else: + return self.editable or self.auto_now or self.auto_now_add + def get_db_prep_save(self, value): # Casts dates into string format for entry into database. if value is not None: @@ -360,6 +417,10 @@ class DateField(Field): def get_manipulator_field_objs(self): return [formfields.DateField] + def flatten_data(self, follow, obj = None): + val = self._get_val_from_obj(obj) + return {self.attname: (val is not None and val.strftime("%Y-%m-%d") or '')} + class DateTimeField(DateField): def get_db_prep_save(self, value): # Casts dates into string format for entry into database. @@ -389,6 +450,12 @@ class DateTimeField(DateField): return datetime.datetime.combine(d, t) return self.get_default() + def flatten_data(self,follow, obj = None): + val = self._get_val_from_obj(obj) + date_field, time_field = self.get_manipulator_field_names('') + return {date_field: (val is not None and val.strftime("%Y-%m-%d") or ''), + time_field: (val is not None and val.strftime("%H:%M:%S") or '')} + class EmailField(Field): def __init__(self, *args, **kwargs): kwargs['maxlength'] = 75 @@ -587,6 +654,10 @@ class TimeField(Field): def get_manipulator_field_objs(self): return [formfields.TimeField] + def flatten_data(self,follow, obj = None): + val = self._get_val_from_obj(obj) + return {self.attname: (val is not None and val.strftime("%H:%M:%S") or '')} + class URLField(Field): def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs): if verify_exists: @@ -647,6 +718,24 @@ class ForeignKey(Field): else: return [formfields.IntegerField] + def get_db_prep_save(self,value): + if value == '' or value == None: + return None + else: + return int(value) + + def flatten_data(self, follow, obj = None): + if not obj: + # In required many-to-one fields with only one available choice, + # select that one available choice. Note: We have to check that + # the length of choices is *2*, not 1, because SelectFields always + # have an initial "blank" value. + if not self.blank and not self.rel.raw_id_admin and self.choices: + choice_list = self.get_choices_default() + if len(choice_list) == 2: + return { self.attname : choice_list[1][0] } + return Field.flatten_data(self, follow, obj) + class ManyToManyField(Field): def __init__(self, to, **kwargs): kwargs['verbose_name'] = kwargs.get('verbose_name', to._meta.verbose_name_plural) @@ -662,11 +751,14 @@ class ManyToManyField(Field): def get_manipulator_field_objs(self): if self.rel.raw_id_admin: - return [formfields.CommaSeparatedIntegerField] + return [formfields.RawIdAdminField] else: - choices = self.get_choices(include_blank=False) + choices = self.get_choices_default() return [curry(formfields.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)] + def get_choices_default(self): + return Field.get_choices(self, include_blank=False) + def get_m2m_db_table(self, original_opts): "Returns the name of the many-to-many 'join' table." return '%s_%s' % (original_opts.db_table, self.name) @@ -688,6 +780,25 @@ class ManyToManyField(Field): 'value': len(badkeys) == 1 and badkeys[0] or tuple(badkeys), } + def flatten_data(self, follow, obj = None): + new_data = {} + if obj: + get_list_func = getattr(obj, 'get_%s_list' % self.rel.singular) + instance_ids = [getattr(instance, self.rel.to.pk.attname) for instance in get_list_func()] + if self.rel.raw_id_admin: + new_data[self.name] = ",".join([str(id) for id in instance_ids]) + else: + new_data[self.name] = instance_ids + else: + # In required many-to-many fields with only one available choice, + # select that one available choice. + if not self.blank and not self.rel.edit_inline and not self.rel.raw_id_admin: + choices_list = self.get_choices_default() + if len(choices_list) == 1: + print self.name, choices_list[0][0] + new_data[self.name] = [choices_list[0][0]] + return new_data + class OneToOneField(IntegerField): def __init__(self, to, to_field=None, **kwargs): kwargs['verbose_name'] = kwargs.get('verbose_name', 'ID') @@ -753,6 +864,66 @@ class OneToOne(ManyToOne): self.lookup_overrides = lookup_overrides or {} self.raw_id_admin = raw_id_admin +class BoundFieldLine(object): + def __init__(self, field_line, field_mapping, original, bound_field_class=BoundField): + self.bound_fields = [field.bind(field_mapping, original, bound_field_class) for field in field_line] + + def __iter__(self): + for bound_field in self.bound_fields: + yield bound_field + + def __len__(self): + return len(self.bound_fields) + +class FieldLine(object): + def __init__(self, field_locator_func, linespec): + if isinstance(linespec, basestring): + self.fields = [field_locator_func(linespec)] + else: + self.fields = [field_locator_func(field_name) for field_name in linespec] + + def bind(self, field_mapping, original, bound_field_line_class=BoundFieldLine): + return bound_field_line_class(self, field_mapping, original) + + def __iter__(self): + for field in self.fields: + yield field + + def __len__(self): + return len(self.fields) + +class BoundFieldSet(object): + def __init__(self, field_set, field_mapping, original, bound_field_line_class=BoundFieldLine): + self.name = field_set.name + self.classes = field_set.classes + self.bound_field_lines = [field_line.bind(field_mapping,original, bound_field_line_class) for field_line in field_set] + + def __iter__(self): + for bound_field_line in self.bound_field_lines: + yield bound_field_line + + def __len__(self): + return len(self.bound_field_lines) + +class FieldSet(object): + def __init__(self, name, classes, field_locator_func, line_specs): + self.name = name + self.field_lines = [FieldLine(field_locator_func, line_spec) for line_spec in line_specs] + self.classes = classes + + def __repr__(self): + return "FieldSet:(%s,%s)" % (self.name, self.field_lines) + + def bind(self, field_mapping, original, bound_field_set_class=BoundFieldSet): + return bound_field_set_class(self, field_mapping, original) + + def __iter__(self): + for field_line in self.field_lines: + yield field_line + + def __len__(self): + return len(self.field_lines) + class Admin: 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): @@ -766,26 +937,18 @@ class Admin: self.save_on_top = save_on_top self.list_select_related = list_select_related - def get_field_objs(self, opts): - """ - Returns self.fields, except with fields as Field objects instead of - field names. If self.fields is None, defaults to putting every - non-AutoField field with editable=True in a single fieldset. - """ + def get_field_sets(self, opts): if self.fields is None: - field_struct = ((None, {'fields': [f.name for f in opts.fields + opts.many_to_many if f.editable and not isinstance(f, AutoField)]}),) + field_struct = ((None, { + 'fields': [f.name for f in opts.fields + opts.many_to_many if f.editable and not isinstance(f, AutoField)] + }),) else: field_struct = self.fields new_fieldset_list = [] for fieldset in field_struct: - new_fieldset = [fieldset[0], {}] - new_fieldset[1].update(fieldset[1]) - admin_fields = [] - for field_name_or_list in fieldset[1]['fields']: - if isinstance(field_name_or_list, basestring): - admin_fields.append([opts.get_field(field_name_or_list)]) - else: - admin_fields.append([opts.get_field(field_name) for field_name in field_name_or_list]) - new_fieldset[1]['fields'] = admin_fields - new_fieldset_list.append(new_fieldset) + name = fieldset[0] + fs_options = fieldset[1] + classes = fs_options.get('classes', ()) + line_specs = fs_options['fields'] + new_fieldset_list.append(FieldSet(name, classes, opts.get_field, line_specs)) return new_fieldset_list diff --git a/django/models/__init__.py b/django/models/__init__.py index 0796cb5c68..ceb260574b 100644 --- a/django/models/__init__.py +++ b/django/models/__init__.py @@ -19,58 +19,61 @@ for mod in modules: # Add "get_thingie", "get_thingie_count" and "get_thingie_list" methods # for all related objects. - for rel_obj, rel_field in klass._meta.get_all_related_objects(): + for related in klass._meta.get_all_related_objects(): # Determine whether this related object is in another app. # If it's in another app, the method names will have the app # label prepended, and the add_BLAH() method will not be # generated. - rel_mod = rel_obj.get_model_module() - rel_obj_name = klass._meta.get_rel_object_method_name(rel_obj, rel_field) - if isinstance(rel_field.rel, meta.OneToOne): + rel_mod = related.opts.get_model_module() + rel_obj_name = related.get_method_name_part() + if isinstance(related.field.rel, meta.OneToOne): # Add "get_thingie" methods for one-to-one related objects. # EXAMPLE: Place.get_restaurants_restaurant() - func = curry(meta.method_get_related, 'get_object', rel_mod, rel_field) - func.__doc__ = "Returns the associated `%s.%s` object." % (rel_obj.app_label, rel_obj.module_name) + func = curry(meta.method_get_related, 'get_object', rel_mod, related.field) + func.__doc__ = "Returns the associated `%s.%s` object." % (related.opts.app_label, related.opts.module_name) setattr(klass, 'get_%s' % rel_obj_name, func) - elif isinstance(rel_field.rel, meta.ManyToOne): + elif isinstance(related.field.rel, meta.ManyToOne): # Add "get_thingie" methods for many-to-one related objects. # EXAMPLE: Poll.get_choice() - func = curry(meta.method_get_related, 'get_object', rel_mod, rel_field) - func.__doc__ = "Returns the associated `%s.%s` object matching the given criteria." % (rel_obj.app_label, rel_obj.module_name) + func = curry(meta.method_get_related, 'get_object', rel_mod, related.field) + func.__doc__ = "Returns the associated `%s.%s` object matching the given criteria." % \ + (related.opts.app_label, related.opts.module_name) setattr(klass, 'get_%s' % rel_obj_name, func) # Add "get_thingie_count" methods for many-to-one related objects. # EXAMPLE: Poll.get_choice_count() - func = curry(meta.method_get_related, 'get_count', rel_mod, rel_field) - func.__doc__ = "Returns the number of associated `%s.%s` objects." % (rel_obj.app_label, rel_obj.module_name) + func = curry(meta.method_get_related, 'get_count', rel_mod, related.field) + func.__doc__ = "Returns the number of associated `%s.%s` objects." % \ + (related.opts.app_label, related.opts.module_name) setattr(klass, 'get_%s_count' % rel_obj_name, func) # Add "get_thingie_list" methods for many-to-one related objects. # EXAMPLE: Poll.get_choice_list() - func = curry(meta.method_get_related, 'get_list', rel_mod, rel_field) - func.__doc__ = "Returns a list of associated `%s.%s` objects." % (rel_obj.app_label, rel_obj.module_name) + func = curry(meta.method_get_related, 'get_list', rel_mod, related.field) + func.__doc__ = "Returns a list of associated `%s.%s` objects." % \ + (related.opts.app_label, related.opts.module_name) setattr(klass, 'get_%s_list' % rel_obj_name, func) # Add "add_thingie" methods for many-to-one related objects, # but only for related objects that are in the same app. # EXAMPLE: Poll.add_choice() - if rel_obj.app_label == klass._meta.app_label: - func = curry(meta.method_add_related, rel_obj, rel_mod, rel_field) + if related.opts.app_label == klass._meta.app_label: + func = curry(meta.method_add_related, related.opts, rel_mod, related.field) func.alters_data = True setattr(klass, 'add_%s' % rel_obj_name, func) del func - del rel_obj_name, rel_mod, rel_obj, rel_field # clean up + del rel_obj_name, rel_mod, related # clean up # Do the same for all related many-to-many objects. - for rel_opts, rel_field in klass._meta.get_all_related_many_to_many_objects(): - rel_mod = rel_opts.get_model_module() - rel_obj_name = klass._meta.get_rel_object_method_name(rel_opts, rel_field) - setattr(klass, 'get_%s' % rel_obj_name, curry(meta.method_get_related_many_to_many, 'get_object', klass._meta, rel_mod, rel_field)) - setattr(klass, 'get_%s_count' % rel_obj_name, curry(meta.method_get_related_many_to_many, 'get_count', klass._meta, rel_mod, rel_field)) - setattr(klass, 'get_%s_list' % rel_obj_name, curry(meta.method_get_related_many_to_many, 'get_list', klass._meta, rel_mod, rel_field)) - if rel_opts.app_label == klass._meta.app_label: - func = curry(meta.method_set_related_many_to_many, rel_opts, rel_field) + for related in klass._meta.get_all_related_many_to_many_objects(): + rel_mod = related.opts.get_model_module() + rel_obj_name = related.get_method_name_part() + setattr(klass, 'get_%s' % rel_obj_name, curry(meta.method_get_related_many_to_many, 'get_object', klass._meta, rel_mod, related.field)) + setattr(klass, 'get_%s_count' % rel_obj_name, curry(meta.method_get_related_many_to_many, 'get_count', klass._meta, rel_mod, related.field)) + setattr(klass, 'get_%s_list' % rel_obj_name, curry(meta.method_get_related_many_to_many, 'get_list', klass._meta, rel_mod, related.field)) + if related.opts.app_label == klass._meta.app_label: + func = curry(meta.method_set_related_many_to_many, related.opts, related.field) func.alters_data = True - setattr(klass, 'set_%s' % rel_opts.module_name, func) + setattr(klass, 'set_%s' % related.opts.module_name, func) del func - del rel_obj_name, rel_mod, rel_opts, rel_field # clean up + del rel_obj_name, rel_mod, related # clean up # Add "set_thingie_order" and "get_thingie_order" methods for objects # that are ordered with respect to this. diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py index f06e1d57e5..af853a9f4e 100644 --- a/django/views/generic/create_update.py +++ b/django/views/generic/create_update.py @@ -9,7 +9,7 @@ from django.core.exceptions import Http404, ObjectDoesNotExist, ImproperlyConfig def create_object(request, app_label, module_name, template_name=None, template_loader=template_loader, extra_context={}, - post_save_redirect=None, login_required=False): + post_save_redirect=None, login_required=False, follow=None): """ Generic object-creation function. @@ -22,17 +22,17 @@ def create_object(request, app_label, module_name, template_name=None, return redirect_to_login(request.path) mod = models.get_module(app_label, module_name) - manipulator = mod.AddManipulator() + manipulator = mod.AddManipulator(follow=follow) if request.POST: # If data was POSTed, we're trying to create a new object new_data = request.POST.copy() # Check for errors errors = manipulator.get_validation_errors(new_data) + manipulator.do_html2python(new_data) if not errors: # No errors -- this means we can save the data! - manipulator.do_html2python(new_data) new_object = manipulator.save(new_data) if not request.user.is_anonymous(): @@ -48,7 +48,8 @@ def create_object(request, app_label, module_name, template_name=None, raise ImproperlyConfigured("No URL to redirect to from generic create view.") else: # No POST, so we want a brand new form without any data or errors - errors = new_data = {} + errors = {} + new_data = manipulator.flatten_data() # Create the FormWrapper, template, context, response form = formfields.FormWrapper(manipulator, new_data, errors) @@ -68,7 +69,7 @@ def create_object(request, app_label, module_name, template_name=None, def update_object(request, app_label, module_name, object_id=None, slug=None, slug_field=None, template_name=None, template_loader=template_loader, extra_lookup_kwargs={}, extra_context={}, post_save_redirect=None, - login_required=False): + login_required=False, follow=None): """ Generic object-update function. @@ -98,13 +99,13 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, except ObjectDoesNotExist: raise Http404("%s.%s does not exist for %s" % (app_label, module_name, lookup_kwargs)) - manipulator = mod.ChangeManipulator(object.id) + manipulator = mod.ChangeManipulator(object.id, follow=follow) if request.POST: new_data = request.POST.copy() errors = manipulator.get_validation_errors(new_data) + manipulator.do_html2python(new_data) if not errors: - manipulator.do_html2python(new_data) manipulator.save(new_data) if not request.user.is_anonymous(): @@ -120,7 +121,7 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, else: errors = {} # This makes sure the form acurate represents the fields of the place. - new_data = object.__dict__ + new_data = manipulator.flatten_data() form = formfields.FormWrapper(manipulator, new_data, errors) if not template_name: @@ -36,6 +36,7 @@ setup( 'django.contrib.admin': ['templates/admin/*.html', 'templates/admin_doc/*.html', 'templates/registration/*.html', + 'templates/widget/*.html', 'media/css/*.css', 'media/img/admin/*.gif', 'media/img/admin/*.png', |
