Fixed #10897 -- Modified use of ngettext to ungettext in admin change messages. Thanks to zuber for the report and patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10677 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2009-05-05 22:25:35 +00:00
parent 9d28568cb4
commit 31c833f113
1 changed files with 27 additions and 27 deletions

View File

@ -18,7 +18,7 @@ from django.utils.safestring import mark_safe
from django.utils.functional import curry from django.utils.functional import curry
from django.utils.text import capfirst, get_text_list from django.utils.text import capfirst, get_text_list
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.utils.translation import ngettext, ugettext_lazy from django.utils.translation import ungettext, ugettext_lazy
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode
try: try:
set set
@ -108,10 +108,10 @@ class BaseModelAdmin(object):
# If we've got overrides for the formfield defined, use 'em. **kwargs # If we've got overrides for the formfield defined, use 'em. **kwargs
# passed to formfield_for_dbfield override the defaults. # passed to formfield_for_dbfield override the defaults.
for klass in db_field.__class__.mro(): for klass in db_field.__class__.mro():
if klass in self.formfield_overrides: if klass in self.formfield_overrides:
kwargs = dict(self.formfield_overrides[klass], **kwargs) kwargs = dict(self.formfield_overrides[klass], **kwargs)
return db_field.formfield(**kwargs) return db_field.formfield(**kwargs)
# For any other type of field, just call its formfield() method. # For any other type of field, just call its formfield() method.
return db_field.formfield(**kwargs) return db_field.formfield(**kwargs)
@ -439,26 +439,26 @@ class ModelAdmin(BaseModelAdmin):
# want *any* actions enabled on this page. # want *any* actions enabled on this page.
if self.actions is None: if self.actions is None:
return [] return []
actions = [] actions = []
# Gather actions from the admin site first # Gather actions from the admin site first
for (name, func) in self.admin_site.actions: for (name, func) in self.admin_site.actions:
description = getattr(func, 'short_description', name.replace('_', ' ')) description = getattr(func, 'short_description', name.replace('_', ' '))
actions.append((func, name, description)) actions.append((func, name, description))
# Then gather them from the model admin and all parent classes, # Then gather them from the model admin and all parent classes,
# starting with self and working back up. # starting with self and working back up.
for klass in self.__class__.mro()[::-1]: for klass in self.__class__.mro()[::-1]:
class_actions = getattr(klass, 'actions', []) class_actions = getattr(klass, 'actions', [])
# Avoid trying to iterate over None # Avoid trying to iterate over None
if not class_actions: if not class_actions:
continue continue
actions.extend([self.get_action(action) for action in class_actions]) actions.extend([self.get_action(action) for action in class_actions])
# get_action might have returned None, so filter any of those out. # get_action might have returned None, so filter any of those out.
actions = filter(None, actions) actions = filter(None, actions)
# Convert the actions into a SortedDict keyed by name # Convert the actions into a SortedDict keyed by name
# and sorted by description. # and sorted by description.
actions.sort(lambda a,b: cmp(a[2].lower(), b[2].lower())) actions.sort(lambda a,b: cmp(a[2].lower(), b[2].lower()))
@ -466,7 +466,7 @@ class ModelAdmin(BaseModelAdmin):
(name, (func, name, desc)) (name, (func, name, desc))
for func, name, desc in actions for func, name, desc in actions
]) ])
return actions return actions
def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH): def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH):
@ -490,20 +490,20 @@ class ModelAdmin(BaseModelAdmin):
if callable(action): if callable(action):
func = action func = action
action = action.__name__ action = action.__name__
# Next, look for a method. Grab it off self.__class__ to get an unbound # Next, look for a method. Grab it off self.__class__ to get an unbound
# method instead of a bound one; this ensures that the calling # method instead of a bound one; this ensures that the calling
# conventions are the same for functions and methods. # conventions are the same for functions and methods.
elif hasattr(self.__class__, action): elif hasattr(self.__class__, action):
func = getattr(self.__class__, action) func = getattr(self.__class__, action)
# Finally, look for a named method on the admin site # Finally, look for a named method on the admin site
else: else:
try: try:
func = self.admin_site.get_action(action) func = self.admin_site.get_action(action)
except KeyError: except KeyError:
return None return None
if hasattr(func, 'short_description'): if hasattr(func, 'short_description'):
description = func.short_description description = func.short_description
else: else:
@ -666,7 +666,7 @@ class ModelAdmin(BaseModelAdmin):
data = request.POST.copy() data = request.POST.copy()
data.pop(helpers.ACTION_CHECKBOX_NAME, None) data.pop(helpers.ACTION_CHECKBOX_NAME, None)
data.pop("index", None) data.pop("index", None)
# Use the action whose button was pushed # Use the action whose button was pushed
try: try:
data.update({'action': data.getlist('action')[action_index]}) data.update({'action': data.getlist('action')[action_index]})
@ -675,7 +675,7 @@ class ModelAdmin(BaseModelAdmin):
# POST data, so by deleting action it'll fail the validation check # POST data, so by deleting action it'll fail the validation check
# below. So no need to do anything here # below. So no need to do anything here
pass pass
action_form = self.action_form(data, auto_id=None) action_form = self.action_form(data, auto_id=None)
action_form.fields['action'].choices = self.get_action_choices(request) action_form.fields['action'].choices = self.get_action_choices(request)
@ -879,10 +879,10 @@ class ModelAdmin(BaseModelAdmin):
app_label = opts.app_label app_label = opts.app_label
if not self.has_change_permission(request, None): if not self.has_change_permission(request, None):
raise PermissionDenied raise PermissionDenied
# Check actions to see if any are available on this changelist # Check actions to see if any are available on this changelist
actions = self.get_actions(request) actions = self.get_actions(request)
# Remove action checkboxes if there aren't any actions available. # Remove action checkboxes if there aren't any actions available.
list_display = list(self.list_display) list_display = list(self.list_display)
if not actions: if not actions:
@ -890,7 +890,7 @@ class ModelAdmin(BaseModelAdmin):
list_display.remove('action_checkbox') list_display.remove('action_checkbox')
except ValueError: except ValueError:
pass pass
try: try:
cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter, cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter,
self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self) self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
@ -903,7 +903,7 @@ class ModelAdmin(BaseModelAdmin):
if ERROR_FLAG in request.GET.keys(): if ERROR_FLAG in request.GET.keys():
return render_to_response('admin/invalid_setup.html', {'title': _('Database error')}) return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1') return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
# If the request was POSTed, this might be a bulk action or a bulk edit. # If the request was POSTed, this might be a bulk action or a bulk edit.
# Try to look up an action first, but if this isn't an action the POST # Try to look up an action first, but if this isn't an action the POST
# will fall through to the bulk edit check, below. # will fall through to the bulk edit check, below.
@ -937,11 +937,11 @@ class ModelAdmin(BaseModelAdmin):
name = force_unicode(opts.verbose_name) name = force_unicode(opts.verbose_name)
else: else:
name = force_unicode(opts.verbose_name_plural) name = force_unicode(opts.verbose_name_plural)
msg = ngettext("%(count)s %(name)s was changed successfully.", msg = ungettext("%(count)s %(name)s was changed successfully.",
"%(count)s %(name)s were changed successfully.", "%(count)s %(name)s were changed successfully.",
changecount) % {'count': changecount, changecount) % {'count': changecount,
'name': name, 'name': name,
'obj': force_unicode(obj)} 'obj': force_unicode(obj)}
self.message_user(request, msg) self.message_user(request, msg)
return HttpResponseRedirect(request.get_full_path()) return HttpResponseRedirect(request.get_full_path())