博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thymeleaf教程 (三) 创建一个多语言的首页
阅读量:6400 次
发布时间:2019-06-23

本文共 2835 字,大约阅读时间需要 9 分钟。

hot3.png

一个多语言的首页

我们要创建一个多语言的首页。

第一个版本我们将编写的页面将极其简单:只是一个标题和一个欢迎信息。这是我们的/WEBINF/templates/home.html文件

            Good Thymes Virtual Grocery        

Welcome to our grocery store!

你会发现,此xhtml文件使用浏览器单独打开的话,可以被良好的显示,因为它并不包含其他非法的XHTML标签(浏览器会忽视所有它不明白的属性,比如 th:text )。

让我们看看上面代码做了什么。

首先在thymeleaf名称空间被描述为th:*属性:

 

然后我们添加了 th:text=”#{home.welcome}”属性到P里。

Welcome to our grocery store!

在这里我们用了两种不同的Thymeleaf Standard Dialect特性:

  • ”th:text“属性,将会解析出一个结果来替换”Welcome to our grocery store!“
  • ”#{home.welcome}“表达式,表达式将会在外部环境中获取指定的KEY的文本并返回。

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

Thymeleaf的外部化文本的位置是完全可配置的,并且它将取决于 org.thymeleaf.messageresolver。IMessageResolver的具体实现。通常我们会使用*.properties,但我们可以创造我们自己的实现,例如,从数据库中获取文本。

然而,在我们在初始化我们的模板引擎时没有指定消息解析器,这意味着我们的应用程序使用标准的消息解析器,此类会实现类org.thymeleaf.messageresolver。StandardMessageResolver

那么消息解析器会在”/WEB-INF/templates/home.html“文件的相同目录下去寻找同名的 .properties文件,举个栗子:

  • /WEB-INF/templates/home_en.properties for English texts.
  • /WEB-INF/templates/home_es.properties for Spanish language texts.
  • /WEB-INF/templates/home_pt_BR.properties for Portuguese (Brazil) language texts.
  • /WEB-INF/templates/home.properties for default texts
    (if locale is not matched).

home.properties文件中的内容如下:

home.welcome=欢迎光临本店。

以上就是我们使用Thymeleaf创建的模板,接下来是服务端的controller。

环境

让我们回到第二课创建的HomeController

public class HomeController implements IGTVGController {    public void process(HttpServletRequest request, HttpServletResponse response,                ServletContext servletContext, TemplateEngine templateEngine) {        WebContext ctx =new WebContext(request, response, servletContext, request.getLocale());        templateEngine.process("home", ctx, response.getWriter());    }}

这步将创建运行的服务端的环境。并映射路径。

templateEngine.process("home", ctx, response.getWriter());

然后运行程序。结果如下

            Good Thymes Virtual Grocery        

欢迎光临本店!

更多的文本和值的特性

不需要转义的文本

home.welcome=欢迎光临 此中有蹊跷 本店!

此文本会最终显示为:

home.welcome=欢迎光临<b>此中有蹊跷</b> grocery store!

对于这种不需要转义的文本,则用th:utext属性。

使用和显示变量

现在让我们添加更多的内容到我们的主页。例如,我们可能希望显示下面的日期我们的消息文本中,像这样:

Welcome to our fantastic grocery store!Today is: 12 july 2010

那么首先我们将更改controller文件,并把日期参数添加进去。

public void process(HttpServletRequest request, HttpServletResponse response,            ServletContext servletContext, TemplateEngine templateEngine) {    SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy");    Calendar cal = Calendar.getInstance();    WebContext ctx =new WebContext(request, response, servletContext, request.getLocale());    ctx.setVariable("today", dateFormat.format(cal.getTime()));    templateEngine.process("home", ctx, response.getWriter());}

我们增加了一个String类型的日期。并且把此日期”today“放到模板中

    

Welcome to our grocery store!

Today is: 13 February 2011

这样就完成了。这里使用了${。。}表达试,这是一个变量表达式,它能解析OGNL表达式的语言,此语言将会解析上下文环境中的变量。

转载于:https://my.oschina.net/wangxinxx/blog/805076

你可能感兴趣的文章
Revit二次开发示例:DesignOptions
查看>>
Entity Framework 系统约定配置
查看>>
优秀设计:纹理在网页设计中的20个应用示例
查看>>
C++ 关键字 explicit, export, mutable
查看>>
生成指定范围的一组随机数并求平均值
查看>>
android语音识别方法
查看>>
File Operations in Android NDK(转)
查看>>
如何将kux格式的视频转换成我们常用的MP4格式
查看>>
[sublime系列文章] sublime text 3插件配置说明
查看>>
学习 PixiJS — 碰撞检测
查看>>
Vue 基础篇
查看>>
JavaScript:函数防抖与函数节流
查看>>
关于区间贪心的补全
查看>>
架构设计步骤
查看>>
自定义元素探秘及构建可复用组件最佳实践
查看>>
区块链是一个公共数据库,要放在一个块内
查看>>
Jenkins 用户文档(目录)
查看>>
系统常见指标
查看>>
使用crond构建linux定时任务及日志查看
查看>>
地图绘制初探——基于maptalks的2.5D地图绘制
查看>>