freemarker中使用<@spring.*>標簽實現國際化


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM