freemarker实现国际化使用自定义指令<@spring>实现,通过@符号可以看出是自定义的指令,在哪里定义的呢?

路径如下:org/springframework/spring-webmvc/5.0.6.RELEASE/spring-webmvc-5.0.6.RELEASE.jar!/org/springframework/web/servlet/view/freemarker/spring.ftl

打开spring.ftl文件,可以看到定义了很多宏指令,我列出几个常用的:


#这个宏名称为message,参数只有code,是我们国际化中最常用的,它实际调用了RequestContext的getMessage(String code)方法

<#macro message code>${springMacroRequestContext.getMessage(code)}</#macro>

#这个宏名称为messageArgs ,参数有两个code和args,国际化字符串中有占位符时可以用到,它实际调用了RequestContext的getMessage(String code, @Nullable Object[] args)方法

<#macro messageArgs code, args>${springMacroRequestContext.getMessage(code, args)}</#macro>

#这个与第二个类似,只是多了一个text参数,text传递的是默认值,调用了getMessage(String code, @Nullable Object[] args, String defaultMessage)

<#macro messageArgsText code, args, text>${springMacroRequestContext.getMessage(code, args, text)}</#macro>

 

用法:

1.首先定义2个国际化配置文件

messages_zh_CN.properties:

username=用户名
title=欢迎来到{0},{1}!

messages_en_US.properties:

username=UserName
title=welcome to {0},{1}!

2. 编辑前端ftl模板

我这里只写出主要前端代码。

index.ftl:

<html>
<!--一定要导入spring.ftl-->
<#import "spring.ftl" as spring> <body>
<!--或者<@spring.message code="username" />-->
<@spring.message "username" /> <!--arg是一个在freemarker中定义的数组,包含了占位符{0},{1}对应的参数 -->
<#assign arg = ["我的首页","张三"]>
<@spring.messageArgs "title" arg /> </body>
</html>

3.小结

需要注意的点:

1)一定要引入spring.ftl

2)<@spring.messageArgs> 第二个参数是一个freemarker数组,需要先用<#assign>指令定义好,

通过一个小例子,写了freemarker国际化过程中,<@spring.message>,<@spring.messageArgs>的用法,spring.ftl还定义了其他的宏,大家照葫芦画瓢,也就会用了。

freemarker中使用<@spring.*>标签实现国际化的更多相关文章

  1. freemarker中使用shiro标签

    地址:https://github.com/jagregory/shiro-freemarker-tags下载该jar包 或者源代码文件复制到自己工程的lib下或者package中  如果使用spri ...

  2. FreeMarker中if标签内的判断条件

    reeMarker中的<#if>标签除了里面直接判断 boolean 类型的变量外,也可以进行表达式判断,有几个细节记录一下 1. 判断对象是否存在(null) 经常会用到,如果对象 != ...

  3. Spring中的p标签(转)good

    Spring的p标签是基于XML Schema的配置方式,目的是为了简化配置方式. 在XML文件头部添加xmlns:p="http://www.springframework.org/sch ...

  4. Spring配置文件中的那些标签意味着什么(持续更新)

    前言 在看这边博客时,如果遇到有什么不清楚的地方,可以参考我另外一边博文.Spring标签的探索,根据这边文章自己来深入源码一探究竟.这里自己只是简单记录一下各标签作用,每个人困惑不同,自然需求也不一 ...

  5. 6.2 dubbo在spring中自定义xml标签源码解析

    在6.1 如何在spring中自定义xml标签中我们看到了在spring中自定义xml标签的方式.dubbo也是这样来实现的. 一 META_INF/dubbo.xsd 比较长,只列出<dubb ...

  6. 6.1 如何在spring中自定义xml标签

    dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 package ...

  7. FreeMarker中<#include>和<#import>标签的区别

    在使用freemarker作为前端页面模板的应用中,会有很多的freemarker模板页面,这些ftl会在不同的页面中重复使用,一是为了简化布局的管理,二是可以重复使用一些代码. 在freemarke ...

  8. 使用Spring标签库

    A.Spring标签库 Web项目若使用Spring Web MVC并使用JSP作为表现的话.从Spring2.0版本开始提供一套标签库可供使用. 使用标签库无非是易于开发,维护之类云云.这里就不阐述 ...

  9. freemarker中对null值问题的处理

    1. freemarker不支持null. 如果值为null会报错. 2.当值为null的处理 1)过滤不显示 Hello ${name!} 在属性后面加感叹号即可过滤null和空字符串 if和”?? ...

随机推荐

  1. 20170805_Elasticsearch_简介和安装

    官网地址: https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html Elk 是一个可高 ...

  2. wince sqlite c#

    无法找到 PInvoke DLL“SQLite.Interop.084.dll 按下面步骤操作

  3. Maven学习 五 Maven项目创建(1)jar项目

    第一步:Maven项目的创建 File->new->Maven project. 点击下一步 上方的两个多选框选上,第一个是不使用archetype 原型模板,第二个是使用默认工作空间 点 ...

  4. Spring AOP配置方式

    AOP 面向切面编程,允许在 java 应用中的方法调用的前后做一些处理. 本文通过实例介绍两种主要的Spring AOP 配置方式:xml 方式配置,注解方式配置 XML 方式配置 1. 项目包类结 ...

  5. SpringMCV跨域

    不在同服务器访问就会产生跨域(用其他软件编写HTML测试) 后台Controller package edu.nf.ch02.controller; import org.springframewor ...

  6. adb Android Debug Bridge 安卓调试桥

    adb devices 获取设备列表及设备状态 adb get-state 获取设备的状态,设备的状态有 3 钟,device , offline , unknown device:设备正常连接 of ...

  7. Spring AOP中pointcut expression表达式

    Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&am ...

  8. Struts2下载及简介

    Struts2下载及简介 一.Struts2下载: 进入网址:http://struts.apache.org/download.cgi#struts23163 可以下载最新的Struts2. 1.F ...

  9. git 中Pull/Request 的初步

    1. 目的: pull/request (简称PR) 是 项目管理者(管理者)和项目开发者(开发者)之间提交和确认工作成果的机制. 2. 流程: 开发者: 在本地创建特性分支. > git ch ...

  10. JS应用实例1:注册页面表单校验

    这里是简单的前端校验,后边还会介绍后台的校验. 多重校验保证获取安全数据 步骤: 1.确定事件onsubmit,并绑定函数 2.编写函数,作用是获取输入数据 3.判断数据是否合法,合法则提交,否则表单 ...