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還定義了其餘的宏,你們照葫蘆畫瓢,也就會用了。