# HG changeset patch # User hodgestar # Date 1389302621 0 # Node ID 38565f2ab970499289a2a88f530222147f425476 # Parent cdb5d435d2372cb89126219f91f329c9c00e6429 Fix handling of case where a translation has text after a closing tag (fixes #566, thanks to jomae for the patch). diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py --- a/genshi/filters/i18n.py +++ b/genshi/filters/i18n.py @@ -1048,7 +1048,13 @@ while parts: order, string = parts.pop(0) - events = self.events[order].pop(0) + events = self.events[order] + if events: + events = events.pop(0) + else: + # create a dummy empty text event so any remaining + # part of the translation can be processed. + events = [(TEXT, "", (None, -1, -1))] parts_counter[order].pop() for event in events: diff --git a/genshi/filters/tests/i18n.py b/genshi/filters/tests/i18n.py --- a/genshi/filters/tests/i18n.py +++ b/genshi/filters/tests/i18n.py @@ -928,6 +928,18 @@ """

""", tmpl.generate(first="FIRST", second="SECOND").render()) + def test_translate_i18n_msg_ticket_404_regression(self): + tmpl = MarkupTemplate(""" +

text $name

+ """) + gettext = lambda s: u'head [1:%(name)s] tail' + translator = Translator(gettext) + translator.setup(tmpl) + self.assertEqual(""" +

head NAME tail

+ """, tmpl.generate(name='NAME').render()) + class ChooseDirectiveTestCase(unittest.TestCase):