使用th:text以及外部化文本

外部化文本就是从模版文件里取出一段模版代码,放到独立的文件里(通常是.properties文件)。这样,用其它语言写的等价文本就能很容易地代替它们。这个过程就是所谓的国际化,或者简单地称为i18n。外部化的代码片段通常称为“信息(message)”。

信息总是有一个键值,用来识别它们。Thymeleaf允许你指定:一段文本应当对应于一条特定的使用#{...}语法的信息。如下:

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

我们在这儿看到的,实际上是Thymeleaf标准方言的两种不同的特性:

  • th:text属性,会对其表达式求值,并把结果设置为宿主标签的主体,实际上会替换代码里的“Welcome to our grocery store!”文本。

  • #{home.welcome}表达式,由标准表达式语法指定,指明:th:text属性使用的文本应当对应于键值home.welcome的信息。而键值home.welcome对应于我们处理模版时所在的地区。

那么,外部化的文本在哪里呢?

在Thymeleaf里,外部化的文本所在的位置完全可以配置。它取决于正在使用的指定的org.thymeleaf.messageresolver.IMessageResolver实现。通常,会使用基于.properties文件的实现。但是,如果想要,我们也可以创建我们自己的实现。比如,从数据库获🉐️信息。

然而,我们并没有在初始化的时候,为我们的模版引擎指定一个信息解析器。也就是说,我们的应用正在使用标准信息解析器。它由org.thymeleaf.messageresolver.StandardMessageResolver实现。

标准信息解析器期望在相同文件夹下的属性文件里,为/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_es.properties文件:

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

这就是为了让Thymeleaf处理我们的模版,所要做的所有工作。接下来,让我们创建我们的Home controller。

Last updated