3.1 多种语言显示欢迎

我们的第一个任务是为杂货店网站创建主页。

主页的第一版将会非常简单:一个标题和欢迎信息。这就是我们的/WEB-INF/templates/home.html文件:

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

  <head>
    <title>Good Thymes Virtual Grocery</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" type="text/css" media="all" 
          href="../../css/gtvg.css" th:href="@{/css/gtvg.css}" />
  </head>

  <body>

    <p th:text="#{home.welcome}">Welcome to our grocery store!</p>

  </body>

</html>

你注意到的第一件事是:这个文件是HTML5,可以被任何浏览器正确地表示,因为它没有包含任何非HTML标签(浏览器会忽略所有不认识的属性,比如th:text)。

但是,你也可能注意到这个模板实际上并不是一个有效的HTML5文档,因为HTML5规范不允许使用这些非标准属性(th:*)。实际上,我们甚至往<html>标签里加了xmlns:th属性,这样完全不是HTML5风格的东西:

<html xmlns:th="http://www.thymeleaf.org">

这对模板的处理完全没有影响,但是它能像魔法一样,防止IDE抱怨这些th:*属性缺少命名空间的定义。

要是我们想要这个模板变成有效的HTML5,该怎么办呢?简单:使用Thymeleaf的数据属性语法,为属性名使用data-前缀,同时用连字符(-)代替冒号(:):

<!DOCTYPE html>

<html>

  <head>
    <title>Good Thymes Virtual Grocery</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" type="text/css" media="all" 
          href="../../css/gtvg.css" data-th-href="@{/css/gtvg.css}" />
  </head>

  <body>

    <p data-th-text="#{home.welcome}">Welcome to our grocery store!</p>

  </body>

</html>

HTML5规范允许自定义的data-前缀属性,所以用上面的代码,我们的模板就能成为有效的HTML5文档。

两种记法完全等价,可以互换。但是,为了简单起见,本教程将使用命名空间记法(`th:*`)。
而且,`th:*`记法更加普遍,在每一种Thymeleaf模板模式(XML,TEXT······)中都被允许,而`data-`记法只在HTML模式中被允许使用。

Last updated