如何国际化Thymeleaf嵌套列表?

时间:2014-08-10 14:55:10

标签: spring internationalization thymeleaf

假设我有一个包含嵌套无序列表的基本静态HTML页面:

<ul>
    <li>Item 1</li>
    <li>Item 2
        <ul>
            <li>Sub-item 2.1</li>
            <li>Sub-item 2.2</li>
        </ul>
    </li>
    <li>Item 3</li>
</ul>

这是有效的XHTML。大。

现在,我正在通过th:text应用Thymeleaf的国际化(如果它很重要,我不相信它,这是在Spring应用程序中)。

<ul>
    <li th:text="#{mypage.item1}">Item 1</li>
    <li th:text="#{mypage.item2}">Item 2
        <ul>
            <li th:text="#{mypage.item2.1}">Sub-item 2.1</li>
            <li th:text="#{mypage.item2.2}">Sub-item 2.2</li>
        </ul>
    </li>
    <li th:text="#{mypage.item3}">Item 3</li>
</ul>

假设我的mypage.properties设置正常并且工作正常,一旦Thymeleaf处理上述内容,结果将显示为:

<ul>
    <li>Item 1</li>
    <li>Item 2
    </li>
    <li>Item 3</li>
</ul>

我的子项目在哪里用于第2项,如何在单独使用它们的同时将它们取回?我知道th:utext,但我不希望mypage.item2包含整个子列表的完整HTML。有可能吗?


编辑:如果我将代码更改为以下代码,则可以获得我正在寻找的内容,但它不再是有效的XHTML。我正在寻找有效的XHTML解决方案。

<ul>
    <li th:text="#{mypage.item1}">Item 1</li>
    <li th:text="#{mypage.item2}">Item 2</li>
        <ul>
            <li th:text="#{mypage.item2.1}">Sub-item 2.1</li>
            <li th:text="#{mypage.item2.2}">Sub-item 2.2</li>
        </ul>
    <li th:text="#{mypage.item3}">Item 3</li>
</ul>

1 个答案:

答案 0 :(得分:2)

首先要理解:th:text在标签关闭之前更改所有内容,因此行为并不令人意外。

<ul>
    <li th:text="#{mypage.item1}">Item 1</li>
    <li><span th:text="#{mypage.item2}" th:remove="tag">Item 2</span>
       <ul>
        <li th:text="#{mypage.item2.1}">Sub-item 2.1</li>
        <li th:text="#{mypage.item2.2}">Sub-item 2.2</li>
      </ul>
    </li>
    <li th:text="#{mypage.item3}">Item 3</li>
</ul>

应该可以使用{或3}}

<ul>
    <li th:text="#{mypage.item1}">Item 1</li>
    <li><th:block th:text="#{mypage.item2}">Item 2</th:block>
       <ul>
        <li th:text="#{mypage.item2.1}">Sub-item 2.1</li>
        <li th:text="#{mypage.item2.2}">Sub-item 2.2</li>
      </ul>
    </li>
    <li th:text="#{mypage.item3}">Item 3</li>
</ul>

使用th:block,应该可以避免额外的节点th:block