genshi icon indicating copy to clipboard operation
genshi copied to clipboard

i18n:msg for nested and repeated tags incorrectly translates message

Open jun66j5 opened this issue 1 year ago • 1 comments

>>> import genshi
>>> genshi.__version__
'0.7.7'
>>> from genshi.template import MarkupTemplate
>>> from genshi.filters.i18n import Translator, extract
>>> html = """<html xmlns:py="http://genshi.edgewall.org/"
...     xmlns:i18n="http://genshi.edgewall.org/i18n"
...     py:strip="">
...   <i18n:msg>
...     <ul><li>First</li><li>Second</li></ul>
...   </i18n:msg>
... </html>"""
>>>
>>> tmpl = MarkupTemplate(html)
>>> translator = Translator()
>>> tmpl.add_directives(Translator.NAMESPACE, translator)
>>> result = list(translator.extract(tmpl.stream))
>>> msg = result[0][2]
>>> msg
'[1:[2:First][3:Second]]'
>>>
>>> tmpl = MarkupTemplate(html)
>>> translator = Translator(lambda s: msg)
>>> translator.setup(tmpl)
>>> tmpl.generate().render()
'\n  <ul><li>First</li></ul><li>Second</li>\n'
#                      ^^^^^           ^^^^
#    <ul><li>First</li><li>Second</li></ul>

jun66j5 avatar Apr 03 '23 14:04 jun66j5

Thanks for reporting this. So the closing end tag is being placed before the last sub-element rather than after it.

hodgestar avatar Apr 03 '23 14:04 hodgestar