1
0
mirror of https://github.com/django/django.git synced 2025-07-04 17:59:13 +00:00

new_admin: added more translations to the admin (mostly view functions and decorators)

git-svn-id: http://code.djangoproject.com/svn/django/branches/new-admin@1079 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Georg Bauer 2005-11-04 15:28:10 +00:00
parent 5ef1cef158
commit 741a13e1dd
7 changed files with 310 additions and 75 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-11-04 15:21+0100\n"
"POT-Creation-Date: 2005-11-04 16:27+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"
@ -42,6 +42,227 @@ msgstr "Logeintrag"
msgid "log entries"
msgstr "Logeinträge"
#: contrib/admin/templatetags/admin_list.py:256
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 "
"Beiträge 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 können 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:78 contrib/admin/views/main.py:106
#, python-format
msgid ""
"<h3>By %s:</h3>\n"
"<ul>\n"
msgstr ""
"<h3>Nach %s:</h3>\n"
"<ul>\n"
#: contrib/admin/views/main.py:128 contrib/admin/views/main.py:167
#: contrib/admin/views/main.py:187
#, python-format
msgid "<h3>By %s:</h3><ul>\n"
msgstr "<h3>Nach %s:</h3><ul>\n"
#: contrib/admin/views/main.py:210
#, python-format
msgid "Select %s"
msgstr "%s auswählen"
#: contrib/admin/views/main.py:211
#, python-format
msgid "Select %s to change"
msgstr "%s zur Änderung auswählen"
#: contrib/admin/views/main.py:567
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt."
#: contrib/admin/views/main.py:572 contrib/admin/views/main.py:647
msgid "You may edit it again below."
msgstr "Das Element kann jetzt weiter geändert werden."
#: contrib/admin/views/main.py:580 contrib/admin/views/main.py:656
#, 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:597
#, python-format
msgid "Add %s"
msgstr "%s zufügen"
#: contrib/admin/views/main.py:612
#, python-format
msgid "Added %s."
msgstr "%s hinzugefügt."
#: contrib/admin/views/main.py:612 contrib/admin/views/main.py:614
#: contrib/admin/views/main.py:616
msgid "and"
msgstr "und"
#: contrib/admin/views/main.py:614
#, python-format
msgid "Changed %s."
msgstr "%s geändert"
#: contrib/admin/views/main.py:616
#, python-format
msgid "Deleted %s."
msgstr "%s gelöscht."
#: contrib/admin/views/main.py:619
msgid "No fields changed."
msgstr "Keine Felder geändert."
#: contrib/admin/views/main.py:644
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "%(name)s \"%(obj)s\" wurde erfolgreich geändert."
#: contrib/admin/views/main.py:653
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
"%(name)s \"%(obj)s\" wurde erfolgreich zugefügt. Das Element kann jetzt "
"geändert werden."
#: contrib/admin/views/main.py:691
#, python-format
msgid "Change %s"
msgstr "%s ändern"
#: contrib/admin/views/main.py:771
#, 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:776
#, 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:805
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelöscht."
#: contrib/admin/views/main.py:808
msgid "Are you sure?"
msgstr "Sicher? Ganz sicher?"
#: contrib/admin/views/main.py:823
#, 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
msgid "Integer"
msgstr "Ganzzahl"
#: contrib/admin/views/doc.py:263
msgid "Boolean (Either True or False)"
msgstr "Wahrheitswert (Wahr oder Falsch)"
#: contrib/admin/views/doc.py:264
#, python-format
msgid "String (up to %(maxlength)s)"
msgstr "Zeichenkette (bis zu %(maxlength)s Zeichen)"
#: contrib/admin/views/doc.py:265
msgid "Comma-separated integers"
msgstr "Kommaseparierte Liste von Zahlen"
#: contrib/admin/views/doc.py:266
msgid "Date (without time)"
msgstr "Datum (ohne Zeit)"
#: contrib/admin/views/doc.py:267
msgid "Date (with time)"
msgstr "Datum (mit Zeit)"
#: contrib/admin/views/doc.py:268
msgid "E-mail address"
msgstr "E-mail-Adresse"
#: contrib/admin/views/doc.py:269 contrib/admin/views/doc.py:272
msgid "File path"
msgstr "Dateipfad"
#: contrib/admin/views/doc.py:270
msgid "Decimal number"
msgstr "Dezimalzahl"
#: contrib/admin/views/doc.py:274
msgid "IP address"
msgstr "IP-Adresse"
#: contrib/admin/views/doc.py:276
msgid "Boolean (Either True, False or None)"
msgstr "Wahrheitswert (Wahr, Falsch oder Nichts)"
#: contrib/admin/views/doc.py:277
msgid "Phone number"
msgstr "Telefonnummer"
#: contrib/admin/views/doc.py:280
msgid "String (up to 50)"
msgstr "Zeichenkette (bis zu 50 Zeichen)"
#: contrib/admin/views/doc.py:282
msgid "Text"
msgstr "Text"
#: contrib/admin/views/doc.py:283
msgid "Time"
msgstr "Zeit"
#: contrib/admin/views/doc.py:284 models/core.py:81
msgid "URL"
msgstr "URL"
#: contrib/admin/views/doc.py:285
msgid "U.S. state (two uppercase letters)"
msgstr "U.S. Bundesstaat (zwei Grossbuchstaben)"
#: contrib/admin/views/doc.py:286
msgid "XML text"
msgstr "XML Text"
#: contrib/admin/templates/admin/index.html:27
#: contrib/admin/templates/admin/change_form.html:14
msgid "Add"
@ -149,10 +370,6 @@ msgstr "Passwort:"
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/login.html:24
msgid "Log in"
msgstr "Anmelden"
#: contrib/admin/templates/admin/404.html:4
#: contrib/admin/templates/admin/404.html:8
msgid "Page not found"
@ -217,6 +434,26 @@ msgstr "Passwort
msgid "Log out"
msgstr "Abmelden"
#: contrib/admin/templates/admin/submit_line.html:3
msgid "Delete"
msgstr "Löschen"
#: 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 hinzufügen"
#: 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/registration/password_change_done.html:4
#: contrib/admin/templates/registration/password_change_form.html:4
#: contrib/admin/templates/registration/password_change_form.html:6
@ -513,10 +750,6 @@ msgstr "Umleitung"
msgid "redirects"
msgstr "Umleitungen"
#: models/core.py:81
msgid "URL"
msgstr "URL"
#: models/core.py:82
msgid ""
"Example: '/about/contact/'. Make sure to have leading and trailing slashes."

View File

@ -1,7 +1,8 @@
{% load i18n %}
<div class="submit-row">
{% if show_delete_link %}<p class="float-left"><a href="delete/" class="deletelink">Delete</a></p>{% endif %}
{% if show_save_as_new %}<input type="submit" value="Save as new" name="_saveasnew" {{onclick_attrib}}/>{%endif%}
{% if show_save_and_add_another %}<input type="submit" value="Save and add another" name="_addanother" {{onclick_attrib}} />{% endif %}
{% if show_save_and_continue %}<input type="submit" value="Save and continue editing" name="_continue" {{onclick_attrib}}/>{% endif %}
{% if show_save %}<input type="submit" value="Save" class="default" {{onclick_attrib}}/>{% endif %}
{% 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>

View File

@ -252,8 +252,8 @@ def date_hierarchy(cl):
raw_template.append('<li><a href="%s">%s</a></li>' % \
(cl.get_query_string({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">&lsaquo; All dates</a></li>' % \
cl.get_query_string( {}, [year_field]))
raw_template.append('<li class="date-back"><a href="%s">&lsaquo; %s</a></li>' % \
cl.get_query_string( {}, [year_field]), _('All dates'))
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):
@ -282,4 +282,4 @@ output_filter_spec = simple_tag(output_filter_spec)
#@inclusion_tag('admin/filters')
def filters(cl):
return {'cl': cl}
filters = inclusion_tag('admin/filters')(filters)
filters = inclusion_tag('admin/filters')(filters)

View File

@ -19,7 +19,7 @@ def _display_login_form(request, error_message=''):
else:
post_data = _encode_post_data({})
return render_to_response('admin/login', {
'title': 'Log in',
'title': _('Log in'),
'app_path': request.path,
'post_data': post_data,
'error_message': error_message
@ -53,15 +53,14 @@ def staff_member_required(view_func):
# If this isn't already the login page, display it.
if not request.POST.has_key(LOGIN_FORM_KEY):
if request.POST:
message = "Please log in again, because your session has expired. "\
"Don't worry: Your submission has been saved."
message = _("Please log in again, because your session has expired. Don't worry: Your submission has been saved.")
else:
message = ""
return _display_login_form(request, message)
# Check that the user accepts cookies.
if not request.session.test_cookie_worked():
message = "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
message = _("Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again.")
return _display_login_form(request, message)
# Check the password.
@ -75,9 +74,9 @@ def staff_member_required(view_func):
try:
user = users.get_object(email__exact=username)
except users.UserDoesNotExist:
message = "Usernames cannot contain the '@' character."
message = _("Usernames cannot contain the '@' character.")
else:
message = "Your e-mail address is not your username. Try '%s' instead." % user.username
message = _("Your e-mail address is not your username. Try '%s' instead.") % user.username
return _display_login_form(request, message)
# The user data is correct; log in the user in and continue.

View File

@ -259,31 +259,31 @@ def get_return_data_type(func_name):
# against the values of Field.__dict__ before being output.
# If a column type is set to None, it won't be included in the output.
DATA_TYPE_MAPPING = {
'AutoField' : 'Integer',
'BooleanField' : 'Boolean (Either True or False)',
'CharField' : 'String (up to %(maxlength)s)',
'CommaSeparatedIntegerField': 'Comma-separated integers',
'DateField' : 'Date (without time)',
'DateTimeField' : 'Date (with time)',
'EmailField' : 'E-mail address',
'FileField' : 'File path',
'FloatField' : 'Decimal number',
'ForeignKey' : 'Integer',
'ImageField' : 'File path',
'IntegerField' : 'Integer',
'IPAddressField' : 'IP address',
'AutoField' : _('Integer'),
'BooleanField' : _('Boolean (Either True or False)'),
'CharField' : _('String (up to %(maxlength)s)'),
'CommaSeparatedIntegerField': _('Comma-separated integers'),
'DateField' : _('Date (without time)'),
'DateTimeField' : _('Date (with time)'),
'EmailField' : _('E-mail address'),
'FileField' : _('File path'),
'FloatField' : _('Decimal number'),
'ForeignKey' : _('Integer'),
'ImageField' : _('File path'),
'IntegerField' : _('Integer'),
'IPAddressField' : _('IP address'),
'ManyToManyField' : '',
'NullBooleanField' : 'Boolean (Either True, False or None)',
'PhoneNumberField' : 'Phone number',
'PositiveIntegerField' : 'Integer',
'PositiveSmallIntegerField' : 'Integer',
'SlugField' : 'String (up to 50)',
'SmallIntegerField' : 'Integer',
'TextField' : 'Text',
'TimeField' : 'Time',
'URLField' : 'URL',
'USStateField' : 'U.S. state (two uppercase letters)',
'XMLField' : 'XML text',
'NullBooleanField' : _('Boolean (Either True, False or None)'),
'PhoneNumberField' : _('Phone number'),
'PositiveIntegerField' : _('Integer'),
'PositiveSmallIntegerField' : _('Integer'),
'SlugField' : _('String (up to 50)'),
'SmallIntegerField' : _('Integer'),
'TextField' : _('Text'),
'TimeField' : _('Time'),
'URLField' : _('URL'),
'USStateField' : _('U.S. state (two uppercase letters)'),
'XMLField' : _('XML text'),
}
def get_readable_field_data_type(field):

View File

@ -75,7 +75,7 @@ class FilterSpec(object):
def output(self, cl):
t = []
if self.has_output():
t.append('<h3>By %s:</h3>\n<ul>\n' % self.title)
t.append(_('<h3>By %s:</h3>\n<ul>\n') % self.title)
for choice in self.choices:
t.append('<li%s><a href="%s">%s</a></li>\n' % \
@ -103,7 +103,7 @@ class RelatedFilterSpec(FilterSpec):
def output(self, cl):
t = []
if self.has_output():
t.append('<h3>By %s:</h3>\n<ul>\n' % self.lookup_title)
t.append(_('<h3>By %s:</h3>\n<ul>\n') % self.lookup_title)
t.append('<li%s><a href="%s">All</a></li>\n' % \
((self.lookup_val is None and ' class="selected"' or ''),
cl.get_query_string({}, [self.lookup_kwarg])))
@ -125,7 +125,7 @@ class ChoicesFilterSpec(FilterSpec):
def output(self, cl):
t = []
t.append('<h3>By %s:</h3><ul>\n' % self.field.verbose_name)
t.append(_('<h3>By %s:</h3><ul>\n') % self.field.verbose_name)
t.append('<li%s><a href="%s">All</a></li>\n' % \
((self.lookup_val is None and ' class="selected"' or ''),
cl.get_query_string( {}, [self.lookup_kwarg])))
@ -164,7 +164,7 @@ class DateFieldFilterSpec(FilterSpec):
def output(self, cl):
t = []
t.append('<h3>By %s:</h3><ul>\n' % self.field.verbose_name)
t.append(_('<h3>By %s:</h3><ul>\n') % self.field.verbose_name)
for title, param_dict in self.links:
t.append('<li%s><a href="%s">%s</a></li>\n' % \
((self.date_params == param_dict) and ' class="selected"' or '',
@ -184,7 +184,7 @@ class BooleanFieldFilterSpec(FilterSpec):
def output(self, cl):
t = []
t.append('<h3>By %s:</h3><ul>\n' % self.field.verbose_name)
t.append(_('<h3>By %s:</h3><ul>\n') % self.field.verbose_name)
for k, v in (('All', None), ('Yes', '1'), ('No', '0')):
t.append('<li%s><a href="%s">%s</a></li>\n' % \
(((self.lookup_val == v and not self.lookup_val2) and ' class="selected"' or ''),
@ -207,8 +207,8 @@ class ChangeList(object):
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)
and _('Select %s') % self.opts.verbose_name
or _('Select %s to change') % self.opts.verbose_name)
self.get_filters(request)
def get_filters(self, request):
@ -429,7 +429,7 @@ def get_javascript_imports(opts,auto_populated_fields, ordered_objects, field_se
class AdminBoundField(BoundField):
def __init__(self, field, field_mapping, original):
super(AdminBoundField, self).__init__(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)
@ -564,12 +564,12 @@ def add_stage(request, app_label, module_name, show_delete=False, form_url='', p
if not errors and not request.POST.has_key("_preview"):
new_object = manipulator.save(new_data)
log_add_message(request.user, opts,manipulator,new_object)
msg = 'The %s "%s" was added successfully.' % (opts.verbose_name, 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.column)
# 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)
@ -577,7 +577,7 @@ 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)
@ -594,7 +594,7 @@ def add_stage(request, app_label, module_name, show_delete=False, form_url='', p
form = formfields.FormWrapper(manipulator, new_data, errors, edit_inline=True)
c = Context(request, {
'title': 'Add %s' % opts.verbose_name,
'title': _('Add %s') % opts.verbose_name,
'form': form,
'is_popup': request.REQUEST.has_key('_popup'),
})
@ -609,14 +609,14 @@ def log_change_message(user, opts,manipulator,new_object):
# Construct the change message.
change_message = []
if manipulator.fields_added:
change_message.append('Added %s.' % get_text_list(manipulator.fields_added, 'and'))
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'))
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.append(_('Deleted %s.') % get_text_list(manipulator.fields_deleted, _('and')))
change_message = ' '.join(change_message)
if not change_message:
change_message = 'No fields changed.'
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):
@ -641,19 +641,19 @@ def change_stage(request, app_label, module_name, object_id):
if not errors and not request.POST.has_key("_preview"):
new_object = manipulator.save(new_data)
log_change_message(request.user,opts,manipulator,new_object)
msg = 'The %s "%s" was changed successfully.' % (opts.verbose_name, 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.column)
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)
@ -688,7 +688,7 @@ def change_stage(request, app_label, module_name, object_id):
form.order_objects.extend(orig_list)
c = Context(request, {
'title': 'Change %s' % opts.verbose_name,
'title': _('Change %s') % opts.verbose_name,
'form': form,
'object_id': object_id,
'original': manipulator.original_object,
@ -768,12 +768,14 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
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' % \
(related.field.name, related.opts.verbose_name, strip_tags(str(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>' % \
(related.field.name, related.opts.verbose_name, related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(str(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 related.opts.admin and has_related_objs:
@ -800,10 +802,10 @@ def delete_stage(request, app_label, module_name, object_id):
obj_display = str(obj)
obj.delete()
log.log_action(request.user.id, opts.get_content_type_id(), object_id, obj_display, log.DELETION)
request.user.add_message('The %s "%s" was deleted successfully.' % (opts.verbose_name, obj_display))
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,
@ -818,7 +820,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: %s' % obj,
'title': _('Change history: %s') % obj,
'action_list': action_list,
'module_name': capfirst(opts.verbose_name_plural),
'object': obj,