From: Florian Apolloner Date: Wed, 18 Jan 2012 16:08:48 +0000 (+0100) Subject: don't evaluate trans arguments twice. X-Git-Tag: 2.7~35^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a25a47996e8a2ad93fa92217f9247dea9a3c424;p=thirdparty%2Fjinja.git don't evaluate trans arguments twice. --- diff --git a/jinja2/ext.py b/jinja2/ext.py index 206756fe..1d888a2a 100644 --- a/jinja2/ext.py +++ b/jinja2/ext.py @@ -241,7 +241,10 @@ class InternationalizationExtension(Extension): variables[name.value] = var = nodes.Name(name.value, 'load') if plural_expr is None: - plural_expr = var + if isinstance(var, nodes.Call): + plural_expr = nodes.Name(name.value, 'load') + else: + plural_expr = var num_called_num = name.value == 'num' parser.stream.expect('block_end') diff --git a/jinja2/testsuite/ext.py b/jinja2/testsuite/ext.py index 6ca6c228..b9ffa66b 100644 --- a/jinja2/testsuite/ext.py +++ b/jinja2/testsuite/ext.py @@ -38,6 +38,8 @@ i18n_templates = { '{% trans %}watch out{% endtrans %}{% endblock %}', 'plural.html': '{% trans user_count %}One user online{% pluralize %}' '{{ user_count }} users online{% endtrans %}', + 'plural2.html': '{% trans user_count=get_user_count() %}{{ user_count }}' + '{% pluralize %}{{ user_count }}{% endtrans %}', 'stringformat.html': '{{ _("User: %(num)s")|format(num=user_count) }}' } @@ -259,6 +261,15 @@ class InternationalizationTestCase(JinjaTestCase): assert tmpl.render(LANGUAGE='de', user_count=1) == 'Ein Benutzer online' assert tmpl.render(LANGUAGE='de', user_count=2) == '2 Benutzer online' + def test_trans_plural_with_functions(self): + tmpl = i18n_env.get_template('plural2.html') + def get_user_count(): + get_user_count.called += 1 + return 1 + get_user_count.called = 0 + assert tmpl.render(LANGUAGE='de', get_user_count=get_user_count) == '1' + assert get_user_count.called == 1 + def test_complex_plural(self): tmpl = i18n_env.from_string('{% trans foo=42, count=2 %}{{ count }} item{% ' 'pluralize count %}{{ count }} items{% endtrans %}')