mirror of https://github.com/django/django.git
Fixed #16721 -- Made sure that blocktrans correctly handles percents (%), even in the plural block. Thanks for the initial patch, Claude Paroz.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16730 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
7cb140e6d8
commit
387e192f25
|
@ -116,16 +116,17 @@ class BlockTranslateNode(Node):
|
||||||
# the end of function
|
# the end of function
|
||||||
context.update(tmp_context)
|
context.update(tmp_context)
|
||||||
singular, vars = self.render_token_list(self.singular)
|
singular, vars = self.render_token_list(self.singular)
|
||||||
|
# Escape all isolated '%'
|
||||||
|
singular = re.sub(u'%(?!\()', u'%%', singular)
|
||||||
if self.plural and self.countervar and self.counter:
|
if self.plural and self.countervar and self.counter:
|
||||||
count = self.counter.resolve(context)
|
count = self.counter.resolve(context)
|
||||||
context[self.countervar] = count
|
context[self.countervar] = count
|
||||||
plural, plural_vars = self.render_token_list(self.plural)
|
plural, plural_vars = self.render_token_list(self.plural)
|
||||||
|
plural = re.sub(u'%(?!\()', u'%%', plural)
|
||||||
result = translation.ungettext(singular, plural, count)
|
result = translation.ungettext(singular, plural, count)
|
||||||
vars.extend(plural_vars)
|
vars.extend(plural_vars)
|
||||||
else:
|
else:
|
||||||
result = translation.ugettext(singular)
|
result = translation.ugettext(singular)
|
||||||
# Escape all isolated '%' before substituting in the context.
|
|
||||||
result = re.sub(u'%(?!\()', u'%%', result)
|
|
||||||
data = dict([(v, _render_value_in_context(context.get(v, ''), context)) for v in vars])
|
data = dict([(v, _render_value_in_context(context.get(v, ''), context)) for v in vars])
|
||||||
context.pop()
|
context.pop()
|
||||||
try:
|
try:
|
||||||
|
|
Binary file not shown.
|
@ -40,3 +40,15 @@ msgid "%d result"
|
||||||
msgid_plural "%d results"
|
msgid_plural "%d results"
|
||||||
msgstr[0] "%d Resultat"
|
msgstr[0] "%d Resultat"
|
||||||
msgstr[1] "%d Resultate"
|
msgstr[1] "%d Resultate"
|
||||||
|
|
||||||
|
#: models.py:13
|
||||||
|
#, python-format
|
||||||
|
msgid "The result was %(percent)s%%"
|
||||||
|
msgstr "Das Ergebnis war %(percent)s%%"
|
||||||
|
|
||||||
|
#: models.py:13
|
||||||
|
#, python-format
|
||||||
|
msgid "%(percent)s%% represents %(num)s object"
|
||||||
|
msgid_plural "%(percent)s%% represents %(num)s objects"
|
||||||
|
msgstr[0] "%(percent)s%% stellt %(num)s Objekt dar"
|
||||||
|
msgstr[1] "%(percent)s%% stellt %(num)s Objekte dar"
|
||||||
|
|
|
@ -618,6 +618,19 @@ class MiscTests(TestCase):
|
||||||
r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
|
r.META = {'HTTP_ACCEPT_LANGUAGE': 'de'}
|
||||||
self.assertEqual(g(r), 'zh-cn')
|
self.assertEqual(g(r), 'zh-cn')
|
||||||
|
|
||||||
|
def test_percent_in_translatable_block(self):
|
||||||
|
extended_locale_paths = settings.LOCALE_PATHS + (
|
||||||
|
os.path.join(here, 'other', 'locale'),
|
||||||
|
)
|
||||||
|
with self.settings(LOCALE_PATHS=extended_locale_paths):
|
||||||
|
t_sing = Template("{% load i18n %}{% blocktrans %}The result was {{ percent }}%{% endblocktrans %}")
|
||||||
|
t_plur = Template("{% load i18n %}{% blocktrans count num as number %}{{ percent }}% represents {{ num }} object{% plural %}{{ percent }}% represents {{ num }} objects{% endblocktrans %}")
|
||||||
|
with translation.override('de'):
|
||||||
|
self.assertEqual(t_sing.render(Context({'percent': 42})), u'Das Ergebnis war 42%')
|
||||||
|
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), u'42% stellt 1 Objekt dar')
|
||||||
|
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), u'42% stellt 4 Objekte dar')
|
||||||
|
|
||||||
|
|
||||||
class ResolutionOrderI18NTests(TestCase):
|
class ResolutionOrderI18NTests(TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
Loading…
Reference in New Issue