summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2016-01-19 18:45:50 +0100
committerClaude Paroz <claude@2xlibre.net>2016-01-23 14:00:55 +0100
commit104eddbdf6c31984b5afbdf5477267570de6d0f4 (patch)
tree465519c500b40e9a7e156218dc407d2d0fb9d919 /django/utils
parent7037dc57245c7ed0b9ef7e4a3cded963d0644b44 (diff)
Fixed #26093 -- Allowed escape sequences extraction by gettext on Python 3
Thanks Sylvain Fankhauser for the report and Tim Graham for the review.
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/translation/trans_real.py33
1 files changed, 23 insertions, 10 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index 5208e7a96f..a51d761145 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -566,6 +566,9 @@ def templatize(src, origin=None):
comment = []
lineno_comment_map = {}
comment_lineno_cache = None
+ # Adding the u prefix allows gettext to recognize the Unicode string
+ # (#26093).
+ raw_prefix = 'u' if six.PY3 else ''
def join_tokens(tokens, trim=False):
message = ''.join(tokens)
@@ -597,26 +600,34 @@ def templatize(src, origin=None):
if endbmatch:
if inplural:
if message_context:
- out.write(' npgettext(%r, %r, %r,count) ' % (
+ out.write(' npgettext({p}{!r}, {p}{!r}, {p}{!r},count) '.format(
message_context,
join_tokens(singular, trimmed),
- join_tokens(plural, trimmed)))
+ join_tokens(plural, trimmed),
+ p=raw_prefix,
+ ))
else:
- out.write(' ngettext(%r, %r, count) ' % (
+ out.write(' ngettext({p}{!r}, {p}{!r}, count) '.format(
join_tokens(singular, trimmed),
- join_tokens(plural, trimmed)))
+ join_tokens(plural, trimmed),
+ p=raw_prefix,
+ ))
for part in singular:
out.write(blankout(part, 'S'))
for part in plural:
out.write(blankout(part, 'P'))
else:
if message_context:
- out.write(' pgettext(%r, %r) ' % (
+ out.write(' pgettext({p}{!r}, {p}{!r}) '.format(
message_context,
- join_tokens(singular, trimmed)))
+ join_tokens(singular, trimmed),
+ p=raw_prefix,
+ ))
else:
- out.write(' gettext(%r) ' % join_tokens(singular,
- trimmed))
+ out.write(' gettext({p}{!r}) '.format(
+ join_tokens(singular, trimmed),
+ p=raw_prefix,
+ ))
for part in singular:
out.write(blankout(part, 'S'))
message_context = None
@@ -685,10 +696,12 @@ def templatize(src, origin=None):
message_context = message_context.strip('"')
elif message_context[0] == "'":
message_context = message_context.strip("'")
- out.write(' pgettext(%r, %r) ' % (message_context, g))
+ out.write(' pgettext({p}{!r}, {p}{!r}) '.format(
+ message_context, g, p=raw_prefix
+ ))
message_context = None
else:
- out.write(' gettext(%r) ' % g)
+ out.write(' gettext({p}{!r}) '.format(g, p=raw_prefix))
elif bmatch:
for fmatch in constant_re.findall(t.contents):
out.write(' _(%s) ' % fmatch)