Thymeleaf翻译系列(四)

3使用文本

3.1 A multi-language welcome

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

我们将编写此页面的第一个版本非常简单:只是标题和欢迎消息。 这是我们的/WEB-INF/templates/home.html文件:

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      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>

你会在这里注意的第一件事是这个文件是XHTML,可以被任何浏览器正确显示,因为它不包含任何非XHTML标签(并且浏览器会忽略他们不理解的所有属性,如:文本)。 此外,浏览器将以标准模式(不是在怪癖模式下)显示它,因为它具有格式良好的DOCTYPE声明。

接下来,这也是有效的XHTML2,因为我们已经指定了一个Thymeleaf DTD,它定义了像th:text这样的属性,这样你的模板就可以被认为是有效的。 甚至更多:一旦模板被处理(并且所有th:*属性都被删除),Thymeleaf将自动用标准的XHTML 1.0严格替换DOCTYPE子句中的DTD声明(我们将把这个DTD翻译功能留给后面的章节))。

还为th:*属性声明了thymeleaf命名空间:

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

请注意,如果我们根本不关心模板的有效性或格式良好,我们可以简单地指定一个标准的XHTML 1.0 Strict DOCTYPE,以及没有xmlns名称空间声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<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" th:href="@{/css/gtvg.css}" />
  </head>

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

</html>

......这仍然是Thymeleaf在XHTML模式下完全可以处理的(尽管我们的IDE可能会让我们的生活变得非常悲惨,并且显示出各处的警告)。

但足够的验证。 现在,对于模板中真正有趣的部分:让我们看看那个:text属性是关于什么的。

使用th:文本和外化文本

外化文本是从模板文件中提取模板代码的片段,以便它们可以保存在特定的单独文件(通常是.properties文件)中,并且可以很容易地用其他语言编写的等效文本替换(一个称为国际化的过程或简单地说i18n)。 外化的文本片段通常称为“消息”。

消息始终具有标识它们的键,Thymeleaf允许您使用#{...}语法指定文本应与特定消息对应:

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

我们在这里看到的实际上是Thymeleaf标准方言的两个不同特征:

    th:text属性,它评估其值表达式并将此评估的结果设置为它所在标记的主体,有效地替换了我们在代码中看到的“欢迎来到我们的杂货店!”文本。
    标准表达式语法中指定的#{home.welcome}表达式,指定th:text属性要使用的文本应该是带有home.welcome键的消息,该键对应于我们正在处理模板的区域设置。

现在,这个外化文本在哪里?

Thymeleaf中外化文本的位置是完全可配置的,它取决于所使用的特定org.thymeleaf.messageresolver.IMessageResolver实现。通常,将使用基于.properties文件的实现,但是如果我们想要从数据库获取消息,我们可以创建自己的实现。

但是,我们在初始化期间没有为模板引擎指定消息解析器,这意味着我们的应用程序正在使用标准消息解析器,由类org.thymeleaf.messageresolver.StandardMessageResolver实现。

此标准消息解析程序希望在.properties文件中的/WEB-INF/templates/home.html中找到同一文件夹中的消息,并使用与模板相同的名称,如:

    /WEB-INF/templates/home_en.properties用于英文文本。
    /WEB-INF/templates/home_es.properties用于西班牙语文本。
    /WEB-INF/templates/home_pt_BR.properties用于葡萄牙语(巴西)语言文本。
    /WEB-INF/templates/home.properties用于默认文本(如果区域设置不匹配)。

home.welcome=¡Bienvenido a nuestra tienda de comestibles!

我们来看看home_es.properties文件:

 

这就是我们将Thymeleaf流程作为模板所需的全部内容。 让我们创建我们的Home控制器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值