知识点
介绍国际化表达式 #{},将模板中的消息定义到外部的 properties 属性文件。以及使用参数,替换 properties 属性文件中消息的占位符。
正如前面 “多语言 welcome” 章节介绍的那样,#{...} 消息表达式允许我们根据本地语言环境将其链接到某个消息(支持国际化)。如下:
<p th:utext="#{home.welcome}">Welcome to our grocery store!</p>
对于不同的语言环境会单独创建一个 properties 文件,下面是西班牙语言环境消息(home_es.properties)。如下:
home.welcome=¡Bienvenido a nuestra tienda de comestibles!
但有一个方面我们仍然没有想到:如果消息文本不完全是静态的,会发生什么?例如,如果我们的应用程序在任何时候都知道谁是访问该站点的用户,并且我们想用名字向他们打招呼,那该怎么办?
如下:
<p>¡Bienvenido a nuestra tienda de comestibles, John Apricot!</p>
注意:John Apricot 是用户名,它是动态的,每个用户登录均不一样。
这意味着我们需要在消息中添加一个参数,就像这样:
home.welcome=¡Bienvenido a nuestra tienda de comestibles, {0}!
上面的参数({0})是根据 java.text.MessageFormat 标准语法指定的,这意味着您可以将参数格式化为 java.text.* 包中类的 API 文档中指定的数字和日期。
为了给我们的参数指定一个值,并给定一个名为 user 的 HTTP 会话属性,我们可以这样做:
<p th:utext="#{home.welcome(${session.user.name})}"> Welcome to our grocery store, Sebastian Pepper! </p>