summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2016-05-06 12:23:52 +0200
committerClaude Paroz <claude@2xlibre.net>2016-05-07 10:17:49 +0200
commitb26fedacef16cc42a4fdd891af06ca925d4bb418 (patch)
tree62437684fc176121d69c7bb172bf9db455951781
parentdeeffde84a23660e3dd589abaaa7454f4ee45fda (diff)
downloaddjango-b26fedacef16cc42a4fdd891af06ca925d4bb418.tar.gz
Fixed #26544 -- Delayed translations of SetPasswordForm help_texts
Thanks Michael Bitzi for the reporti and Tim Graham for the review.
-rw-r--r--django/contrib/auth/password_validation.py6
-rw-r--r--docs/releases/1.9.7.txt3
-rw-r--r--tests/auth_tests/test_forms.py18
3 files changed, 25 insertions, 2 deletions
diff --git a/django/contrib/auth/password_validation.py b/django/contrib/auth/password_validation.py
index 2af5202207..aba2d6f1cf 100644
--- a/django/contrib/auth/password_validation.py
+++ b/django/contrib/auth/password_validation.py
@@ -10,9 +10,10 @@ from django.core.exceptions import ImproperlyConfigured, ValidationError
from django.utils import lru_cache
from django.utils._os import upath
from django.utils.encoding import force_text
+from django.utils.functional import lazy
from django.utils.html import format_html
from django.utils.module_loading import import_string
-from django.utils.six import string_types
+from django.utils.six import string_types, text_type
from django.utils.translation import ugettext as _, ungettext
@@ -77,7 +78,7 @@ def password_validators_help_texts(password_validators=None):
return help_texts
-def password_validators_help_text_html(password_validators=None):
+def _password_validators_help_text_html(password_validators=None):
"""
Return an HTML string with all help texts of all configured validators
in an <ul>.
@@ -85,6 +86,7 @@ def password_validators_help_text_html(password_validators=None):
help_texts = password_validators_help_texts(password_validators)
help_items = [format_html('<li>{}</li>', help_text) for help_text in help_texts]
return '<ul>%s</ul>' % ''.join(help_items) if help_items else ''
+password_validators_help_text_html = lazy(_password_validators_help_text_html, text_type)
class MinimumLengthValidator(object):
diff --git a/docs/releases/1.9.7.txt b/docs/releases/1.9.7.txt
index c93339a9d2..0a969d6609 100644
--- a/docs/releases/1.9.7.txt
+++ b/docs/releases/1.9.7.txt
@@ -11,3 +11,6 @@ Bugfixes
* Removed the need for the ``request`` context processor on the admin login
page to fix a regression in 1.9 (:ticket:`26558`).
+
+* Fixed translation of password validators' ``help_text`` in forms
+ (:ticket:`26544`).
diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py
index ac23c2e96a..d77c9a976b 100644
--- a/tests/auth_tests/test_forms.py
+++ b/tests/auth_tests/test_forms.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
@@ -350,6 +351,23 @@ class SetPasswordFormTest(TestDataMixin, TestCase):
self.assertEqual(form.cleaned_data['new_password1'], data['new_password1'])
self.assertEqual(form.cleaned_data['new_password2'], data['new_password2'])
+ @override_settings(AUTH_PASSWORD_VALIDATORS=[
+ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
+ {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': {
+ 'min_length': 12,
+ }},
+ ])
+ def test_help_text_translation(self):
+ french_help_texts = [
+ 'Votre mot de passe ne peut pas trop ressembler à vos autres informations personnelles.',
+ 'Votre mot de passe doit contenir au minimum 12 caractères.',
+ ]
+ form = SetPasswordForm(self.u1)
+ with translation.override('fr'):
+ html = form.as_p()
+ for french_text in french_help_texts:
+ self.assertIn(french_text, html)
+
class PasswordChangeFormTest(TestDataMixin, TestCase):