From fc8efc2d9e693923d3da272e0978e5b0631006f9 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Wed, 30 Jan 2013 21:29:39 +0100 Subject: [PATCH] Fixed #19034 -- Added proper i18n pluralization for max/min length validation messages This was made possible by commit 3f1a0c0040b9. Thanks Evil Clay for the report and Alexey Boriskin his work on the ticket. --- django/core/validators.py | 12 +++++++++--- django/forms/fields.py | 7 +++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/django/core/validators.py b/django/core/validators.py index f094b7bf07..948ae28673 100644 --- a/django/core/validators.py +++ b/django/core/validators.py @@ -7,7 +7,7 @@ except ImportError: # Python 2 from urlparse import urlsplit, urlunsplit from django.core.exceptions import ValidationError -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, ungettext_lazy from django.utils.encoding import force_text from django.utils.ipv6 import is_valid_ipv6_address from django.utils import six @@ -209,12 +209,18 @@ class MinValueValidator(BaseValidator): class MinLengthValidator(BaseValidator): compare = lambda self, a, b: a < b clean = lambda self, x: len(x) - message = _('Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).') + message = ungettext_lazy( + 'Ensure this value has at least %(limit_value)d character (it has %(show_value)d).', + 'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).', + 'limit_value') code = 'min_length' class MaxLengthValidator(BaseValidator): compare = lambda self, a, b: a > b clean = lambda self, x: len(x) - message = _('Ensure this value has at most %(limit_value)d characters (it has %(show_value)d).') + message = ungettext_lazy( + 'Ensure this value has at most %(limit_value)d character (it has %(show_value)d).', + 'Ensure this value has at most %(limit_value)d characters (it has %(show_value)d).', + 'limit_value') code = 'max_length' diff --git a/django/forms/fields.py b/django/forms/fields.py index 9fbbce107c..c547d1456c 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -28,7 +28,7 @@ from django.utils import formats from django.utils.encoding import smart_text, force_str, force_text from django.utils.ipv6 import clean_ipv6_address from django.utils import six -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, ungettext_lazy # Provide this import for backwards compatibility. from django.core.validators import EMPTY_VALUES @@ -505,7 +505,10 @@ class FileField(Field): 'invalid': _("No file was submitted. Check the encoding type on the form."), 'missing': _("No file was submitted."), 'empty': _("The submitted file is empty."), - 'max_length': _('Ensure this filename has at most %(max)d characters (it has %(length)d).'), + 'max_length': ungettext_lazy( + 'Ensure this filename has at most %(max)d character (it has %(length)d).', + 'Ensure this filename has at most %(max)d characters (it has %(length)d).', + 'max'), 'contradiction': _('Please either submit a file or check the clear checkbox, not both.') }