Loading django/contrib/comments/admin.py +8 −8 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ from __future__ import unicode_literals from django.contrib import admin from django.contrib.auth import get_user_model from django.contrib.comments.models import Comment from django.utils.translation import ugettext_lazy as _, ungettext from django.utils.translation import ugettext_lazy as _, ungettext, ungettext_lazy from django.contrib.comments import get_model from django.contrib.comments.views.moderation import perform_flag, perform_approve, perform_delete Loading Loading @@ -52,17 +52,20 @@ class CommentsAdmin(admin.ModelAdmin): def flag_comments(self, request, queryset): self._bulk_flag(request, queryset, perform_flag, lambda n: ungettext('flagged', 'flagged', n)) ungettext_lazy('%d comment was successfully flagged', '%d comments were successfully flagged')) flag_comments.short_description = _("Flag selected comments") def approve_comments(self, request, queryset): self._bulk_flag(request, queryset, perform_approve, lambda n: ungettext('approved', 'approved', n)) ungettext_lazy('%d comment was successfully approved', '%d comments were successfully approved')) approve_comments.short_description = _("Approve selected comments") def remove_comments(self, request, queryset): self._bulk_flag(request, queryset, perform_delete, lambda n: ungettext('removed', 'removed', n)) ungettext_lazy('%d comment was successfully removed', '%d comments were successfully removed')) remove_comments.short_description = _("Remove selected comments") def _bulk_flag(self, request, queryset, action, done_message): Loading @@ -75,10 +78,7 @@ class CommentsAdmin(admin.ModelAdmin): action(request, comment) n_comments += 1 msg = ungettext('1 comment was successfully %(action)s.', '%(count)s comments were successfully %(action)s.', n_comments) self.message_user(request, msg % {'count': n_comments, 'action': done_message(n_comments)}) self.message_user(request, done_message % n_comments) # Only register the default admin if the model is the built-in comment model # (this won't be true if there's a custom comment app). Loading django/utils/timesince.py +11 −11 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ from __future__ import unicode_literals import datetime from django.utils.timezone import is_aware, utc from django.utils.translation import ungettext, ugettext from django.utils.translation import ugettext, ungettext_lazy def timesince(d, now=None, reversed=False): """ Loading @@ -19,12 +19,12 @@ def timesince(d, now=None, reversed=False): Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since """ chunks = ( (60 * 60 * 24 * 365, lambda n: ungettext('year', 'years', n)), (60 * 60 * 24 * 30, lambda n: ungettext('month', 'months', n)), (60 * 60 * 24 * 7, lambda n : ungettext('week', 'weeks', n)), (60 * 60 * 24, lambda n : ungettext('day', 'days', n)), (60 * 60, lambda n: ungettext('hour', 'hours', n)), (60, lambda n: ungettext('minute', 'minutes', n)) (60 * 60 * 24 * 365, ungettext_lazy('%d year', '%d years')), (60 * 60 * 24 * 30, ungettext_lazy('%d month', '%d months')), (60 * 60 * 24 * 7, ungettext_lazy('%d week', '%d weeks')), (60 * 60 * 24, ungettext_lazy('%d day', '%d days')), (60 * 60, ungettext_lazy('%d hour', '%d hours')), (60, ungettext_lazy('%d minute', '%d minutes')) ) # Convert datetime.date to datetime.datetime for comparison. if not isinstance(d, datetime.datetime): Loading @@ -40,19 +40,19 @@ def timesince(d, now=None, reversed=False): since = delta.days * 24 * 60 * 60 + delta.seconds if since <= 0: # d is in the future compared to now, stop processing. return '0 ' + ugettext('minutes') return ugettext('0 minutes') for i, (seconds, name) in enumerate(chunks): count = since // seconds if count != 0: break s = ugettext('%(number)d %(type)s') % {'number': count, 'type': name(count)} result = name % count if i + 1 < len(chunks): # Now get the second item seconds2, name2 = chunks[i + 1] count2 = (since - (seconds * count)) // seconds2 if count2 != 0: s += ugettext(', %(number)d %(type)s') % {'number': count2, 'type': name2(count2)} return s result += ugettext(', ') + name2 % count2 return result def timeuntil(d, now=None): """ Loading tests/regressiontests/comment_tests/tests/moderation_view_tests.py +27 −1 Original line number Diff line number Diff line from __future__ import absolute_import from __future__ import absolute_import, unicode_literals from django.contrib.auth.models import User, Permission from django.contrib.comments import signals from django.contrib.comments.models import Comment, CommentFlag from django.contrib.contenttypes.models import ContentType from django.utils import translation from . import CommentTestCase Loading Loading @@ -281,3 +282,28 @@ class AdminActionsTests(CommentTestCase): response = self.client.get('/admin2/comments/comment/') self.assertEqual(response.status_code, 200) self.assertNotContains(response, '<option value="delete_selected">') def performActionAndCheckMessage(self, action, action_params, expected_message): response = self.client.post('/admin/comments/comment/', data={'_selected_action': action_params, 'action': action, 'index': 0}, follow=True) self.assertContains(response, expected_message) def testActionsMessageTranslations(self): c1, c2, c3, c4 = self.createSomeComments() one_comment = c1.pk many_comments = [c2.pk, c3.pk, c4.pk] makeModerator("normaluser") self.client.login(username="normaluser", password="normaluser") with translation.override('en'): #Test approving self.performActionAndCheckMessage('approve_comments', one_comment, '1 comment was successfully approved') self.performActionAndCheckMessage('approve_comments', many_comments, '3 comments were successfully approved') #Test flagging self.performActionAndCheckMessage('flag_comments', one_comment, '1 comment was successfully flagged') self.performActionAndCheckMessage('flag_comments', many_comments, '3 comments were successfully flagged') #Test removing self.performActionAndCheckMessage('remove_comments', one_comment, '1 comment was successfully removed') self.performActionAndCheckMessage('remove_comments', many_comments, '3 comments were successfully removed') Loading
django/contrib/comments/admin.py +8 −8 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ from __future__ import unicode_literals from django.contrib import admin from django.contrib.auth import get_user_model from django.contrib.comments.models import Comment from django.utils.translation import ugettext_lazy as _, ungettext from django.utils.translation import ugettext_lazy as _, ungettext, ungettext_lazy from django.contrib.comments import get_model from django.contrib.comments.views.moderation import perform_flag, perform_approve, perform_delete Loading Loading @@ -52,17 +52,20 @@ class CommentsAdmin(admin.ModelAdmin): def flag_comments(self, request, queryset): self._bulk_flag(request, queryset, perform_flag, lambda n: ungettext('flagged', 'flagged', n)) ungettext_lazy('%d comment was successfully flagged', '%d comments were successfully flagged')) flag_comments.short_description = _("Flag selected comments") def approve_comments(self, request, queryset): self._bulk_flag(request, queryset, perform_approve, lambda n: ungettext('approved', 'approved', n)) ungettext_lazy('%d comment was successfully approved', '%d comments were successfully approved')) approve_comments.short_description = _("Approve selected comments") def remove_comments(self, request, queryset): self._bulk_flag(request, queryset, perform_delete, lambda n: ungettext('removed', 'removed', n)) ungettext_lazy('%d comment was successfully removed', '%d comments were successfully removed')) remove_comments.short_description = _("Remove selected comments") def _bulk_flag(self, request, queryset, action, done_message): Loading @@ -75,10 +78,7 @@ class CommentsAdmin(admin.ModelAdmin): action(request, comment) n_comments += 1 msg = ungettext('1 comment was successfully %(action)s.', '%(count)s comments were successfully %(action)s.', n_comments) self.message_user(request, msg % {'count': n_comments, 'action': done_message(n_comments)}) self.message_user(request, done_message % n_comments) # Only register the default admin if the model is the built-in comment model # (this won't be true if there's a custom comment app). Loading
django/utils/timesince.py +11 −11 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ from __future__ import unicode_literals import datetime from django.utils.timezone import is_aware, utc from django.utils.translation import ungettext, ugettext from django.utils.translation import ugettext, ungettext_lazy def timesince(d, now=None, reversed=False): """ Loading @@ -19,12 +19,12 @@ def timesince(d, now=None, reversed=False): Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since """ chunks = ( (60 * 60 * 24 * 365, lambda n: ungettext('year', 'years', n)), (60 * 60 * 24 * 30, lambda n: ungettext('month', 'months', n)), (60 * 60 * 24 * 7, lambda n : ungettext('week', 'weeks', n)), (60 * 60 * 24, lambda n : ungettext('day', 'days', n)), (60 * 60, lambda n: ungettext('hour', 'hours', n)), (60, lambda n: ungettext('minute', 'minutes', n)) (60 * 60 * 24 * 365, ungettext_lazy('%d year', '%d years')), (60 * 60 * 24 * 30, ungettext_lazy('%d month', '%d months')), (60 * 60 * 24 * 7, ungettext_lazy('%d week', '%d weeks')), (60 * 60 * 24, ungettext_lazy('%d day', '%d days')), (60 * 60, ungettext_lazy('%d hour', '%d hours')), (60, ungettext_lazy('%d minute', '%d minutes')) ) # Convert datetime.date to datetime.datetime for comparison. if not isinstance(d, datetime.datetime): Loading @@ -40,19 +40,19 @@ def timesince(d, now=None, reversed=False): since = delta.days * 24 * 60 * 60 + delta.seconds if since <= 0: # d is in the future compared to now, stop processing. return '0 ' + ugettext('minutes') return ugettext('0 minutes') for i, (seconds, name) in enumerate(chunks): count = since // seconds if count != 0: break s = ugettext('%(number)d %(type)s') % {'number': count, 'type': name(count)} result = name % count if i + 1 < len(chunks): # Now get the second item seconds2, name2 = chunks[i + 1] count2 = (since - (seconds * count)) // seconds2 if count2 != 0: s += ugettext(', %(number)d %(type)s') % {'number': count2, 'type': name2(count2)} return s result += ugettext(', ') + name2 % count2 return result def timeuntil(d, now=None): """ Loading
tests/regressiontests/comment_tests/tests/moderation_view_tests.py +27 −1 Original line number Diff line number Diff line from __future__ import absolute_import from __future__ import absolute_import, unicode_literals from django.contrib.auth.models import User, Permission from django.contrib.comments import signals from django.contrib.comments.models import Comment, CommentFlag from django.contrib.contenttypes.models import ContentType from django.utils import translation from . import CommentTestCase Loading Loading @@ -281,3 +282,28 @@ class AdminActionsTests(CommentTestCase): response = self.client.get('/admin2/comments/comment/') self.assertEqual(response.status_code, 200) self.assertNotContains(response, '<option value="delete_selected">') def performActionAndCheckMessage(self, action, action_params, expected_message): response = self.client.post('/admin/comments/comment/', data={'_selected_action': action_params, 'action': action, 'index': 0}, follow=True) self.assertContains(response, expected_message) def testActionsMessageTranslations(self): c1, c2, c3, c4 = self.createSomeComments() one_comment = c1.pk many_comments = [c2.pk, c3.pk, c4.pk] makeModerator("normaluser") self.client.login(username="normaluser", password="normaluser") with translation.override('en'): #Test approving self.performActionAndCheckMessage('approve_comments', one_comment, '1 comment was successfully approved') self.performActionAndCheckMessage('approve_comments', many_comments, '3 comments were successfully approved') #Test flagging self.performActionAndCheckMessage('flag_comments', one_comment, '1 comment was successfully flagged') self.performActionAndCheckMessage('flag_comments', many_comments, '3 comments were successfully flagged') #Test removing self.performActionAndCheckMessage('remove_comments', one_comment, '1 comment was successfully removed') self.performActionAndCheckMessage('remove_comments', many_comments, '3 comments were successfully removed')