From 741a13e1dd7c256352b2ceb1e1e5189b44858533 Mon Sep 17 00:00:00 2001 From: Georg Bauer Date: Fri, 4 Nov 2005 15:28:10 +0000 Subject: [PATCH] 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 --- django/conf/locale/de/LC_MESSAGES/django.mo | Bin 18082 -> 21838 bytes django/conf/locale/de/LC_MESSAGES/django.po | 251 +++++++++++++++++- .../admin/templates/admin/submit_line.html | 11 +- .../contrib/admin/templatetags/admin_list.py | 6 +- django/contrib/admin/views/decorators.py | 11 +- django/contrib/admin/views/doc.py | 48 ++-- django/contrib/admin/views/main.py | 58 ++-- 7 files changed, 310 insertions(+), 75 deletions(-) diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo index b2f356ab5e314dfc304811c6b2eee985c9784676..2cab9505f7c6bc44ed5cc7b540f2025216a3bacf 100644 GIT binary patch delta 8611 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\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 "" +"

By %s:

\n" +"
    \n" +msgstr "" +"

    Nach %s:

    \n" +"
      \n" + +#: contrib/admin/views/main.py:128 contrib/admin/views/main.py:167 +#: contrib/admin/views/main.py:187 +#, python-format +msgid "

      By %s:

        \n" +msgstr "

        Nach %s:

          \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 forgotten your password?" msgstr "Haben Sie ihr Passwort vergessen?" -#: 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." diff --git a/django/contrib/admin/templates/admin/submit_line.html b/django/contrib/admin/templates/admin/submit_line.html index 4ee09fccf3..64ca864890 100644 --- a/django/contrib/admin/templates/admin/submit_line.html +++ b/django/contrib/admin/templates/admin/submit_line.html @@ -1,7 +1,8 @@ +{% load i18n %}
          -{% if show_delete_link %}

          Delete

          {% endif %} -{% if show_save_as_new %}{%endif%} -{% if show_save_and_add_another %}{% endif %} -{% if show_save_and_continue %}{% endif %} -{% if show_save %}{% endif %} +{% if show_delete_link %}

          {% trans "Delete" %}

          {% endif %} +{% if show_save_as_new %}{%endif%} +{% if show_save_and_add_another %}{% endif %} +{% if show_save_and_continue %}{% endif %} +{% if show_save %}{% endif %}
          diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index 3d7bf3ab9f..30aac71e89 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -252,8 +252,8 @@ def date_hierarchy(cl): raw_template.append('
        • %s
        • ' % \ (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('
        • ‹ All dates
        • ' % \ - cl.get_query_string( {}, [year_field])) + raw_template.append('
        • ‹ %s
        • ' % \ + 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) \ No newline at end of file +filters = inclusion_tag('admin/filters')(filters) diff --git a/django/contrib/admin/views/decorators.py b/django/contrib/admin/views/decorators.py index 44e1234ce4..852057bf53 100644 --- a/django/contrib/admin/views/decorators.py +++ b/django/contrib/admin/views/decorators.py @@ -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. diff --git a/django/contrib/admin/views/doc.py b/django/contrib/admin/views/doc.py index e4d0f1c648..4eadb74fc4 100644 --- a/django/contrib/admin/views/doc.py +++ b/django/contrib/admin/views/doc.py @@ -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): diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 912f903276..cac0ec3150 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -75,7 +75,7 @@ class FilterSpec(object): def output(self, cl): t = [] if self.has_output(): - t.append('

          By %s:

          \n
            \n' % self.title) + t.append(_('

            By %s:

            \n
              \n') % self.title) for choice in self.choices: t.append('%s\n' % \ @@ -103,7 +103,7 @@ class RelatedFilterSpec(FilterSpec): def output(self, cl): t = [] if self.has_output(): - t.append('

              By %s:

              \n
                \n' % self.lookup_title) + t.append(_('

                By %s:

                \n
                  \n') % self.lookup_title) t.append('All\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('

                  By %s:

                    \n' % self.field.verbose_name) + t.append(_('

                    By %s:

                      \n') % self.field.verbose_name) t.append('All\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('

                      By %s:

                        \n' % self.field.verbose_name) + t.append(_('

                        By %s:

                          \n') % self.field.verbose_name) for title, param_dict in self.links: t.append('%s\n' % \ ((self.date_params == param_dict) and ' class="selected"' or '', @@ -184,7 +184,7 @@ class BooleanFieldFilterSpec(FilterSpec): def output(self, cl): t = [] - t.append('

                          By %s:

                            \n' % self.field.verbose_name) + t.append(_('

                            By %s:

                              \n') % self.field.verbose_name) for k, v in (('All', None), ('Yes', '1'), ('No', '0')): t.append('%s\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('' % \ (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: %s' % \ - (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}) + \ + (' %s' % \ + (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,