freemarker实现国际化使用自定义指令<@spring>实现,经过@符号能够看出是自定义的指令,在哪里定义的呢?html
路径以下: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文件,能够看到定义了不少宏指令,我列出几个经常使用的:web
#这个宏名称为message,参数只有code,是咱们国际化中最经常使用的,它实际调用了RequestContext的getMessage(String code)方法spring
<#macro message code>${springMacroRequestContext.getMessage(code)}</#macro>数组
#这个宏名称为messageArgs ,参数有两个code和args,国际化字符串中有占位符时能够用到,它实际调用了RequestContext的getMessage(String code, @Nullable Object[] args)方法mvc
<#macro messageArgs code, args>${springMacroRequestContext.getMessage(code, args)}</#macro>spa
#这个与第二个相似,只是多了一个text参数,text传递的是默认值,调用了getMessage(String code, @Nullable Object[] args, String defaultMessage)code
<#macro messageArgsText code, args, text>${springMacroRequestContext.getMessage(code, args, text)}</#macro>htm
用法:blog
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还定义了其余的宏,你们照葫芦画瓢,也就会用了。