Spring整合FreeMarker本地化動態設定

2021-09-08 03:39:33 字數 4555 閱讀 9292

spring整合freemarker進行國際化的過程很簡單,將spring-webmvc裡的org/springframework/web/servlet/view/freemarker下的spring.ftl include到各個要國際化的ftl檔案裡就行了,比如將這個spring.ftl複製在ftl檔案目錄的common下,可以這樣直接在ftl裡include進來

<

#import

"/common/spring.ftl" as spring

/>

當然也可以在spring配置檔案裡對freemarkerconfig配置的時候自動匯入

<

bean

id="freemarkerconfig"

class

="org.springframework.web.servlet.view.freemarker.freemarkerconfigurer"

>

...

<

property

name

="freemarkersettings"

>

<

props

>

<

prop

key="defaultencoding"

>utf-8

prop

>

...

<

prop

key="auto_import"

>common/spring.ftl as spring

prop

>

props

>

property

>

然後在spring的配置檔案裡宣告下

class="org.springframework.context.support.resourcebundlemessagesource">  

messageresources

在源檔案目錄resource下有相應的messageresources.zh_cn.properties和messageresources.en_us.propertes等屬性檔案

在ftl檔案裡這樣使用

<

@spring.message

"hello"

/>

這樣系統會根據使用者當前環境下的locale進行國際化。但是如果要自己手動指定某個使用者的locale要怎麼辦呢?

參考了下org.springframework.web.servlet.i18n.localechangeinterceptor對locale的設定,首先要在spring的配置檔案裡宣告乙個localeresolver (比如 cookielocaleresolver,不然的話後面的操作會出現異常),我這裡對locale的設定只要在session範圍裡就行了

<

bean

id="localeresolver"

class

="org.springframework.web.servlet.i18n.sessionlocaleresolver"

>

<

property

name

="defaultlocale"

value

="zh"

/>

bean

>

接著在spring的controller裡控制locale的方法裡加入以下**就可以了

localeresolver localeresolver =requestcontextutils.getlocaleresolver(request);  

if (localeresolver == null

)

localeeditor localeeditor = new

localeeditor();

localeeditor.setastext(lang);

localeresolver.setlocale(request, response, (locale) localeeditor.getvalue());

最後總結下我的方式

1.spring的配置裡必須要有的

<

bean

id="freemarkerconfig"

class

="org.springframework.web.servlet.view.freemarker.freemarkerconfigurer"

>

<

property

name

="templateloaderpath"

value

="/web-inf/ftl/"

/>

<

property

name

="freemarkersettings"

>

<

props

>

<

prop

key="defaultencoding"

>utf-8

prop

>

<

prop

key="template_update_delay"

>5

prop

>

<

prop

key="auto_import"

>common/website.ftl as website

prop

>

props

>

property

>

bean

>

<

bean

id="viewresolver"

class

="org.springframework.web.servlet.view.freemarker.freemarkerviewresolver"

>

<

property

name

="cache"

value

="true"

/>

<

property

name

="prefix"

value

=""/>

<

property

name

="suffix"

value

=".ftl"

/>

<

property

name

="contenttype"

value

="text/html;charset=utf-8"

>

property

>

bean

>

<

bean

id="localeresolver"

class

="org.springframework.web.servlet.i18n.sessionlocaleresolver"

>

<

property

name

="defaultlocale"

value

="zh"

/>

bean

>

<

bean

id="messagesource"

class

="org.springframework.context.support.resourcebundlemessagesource"

>

<

property

name

="basenames"

>

<

list

>

<

value

>messageresources

value

>

list

>

property

>

bean

>

2.在設定使用者locale的controller裡設定locale

localeresolver localeresolver =requestcontextutils.getlocaleresolver(request);  

if (localeresolver == null

)

localeeditor localeeditor = new

localeeditor();

localeeditor.setastext(lang);

localeresolver.setlocale(request, response, (locale) localeeditor.getvalue());

3.在ftl裡這樣使用

<

@website.message

"hello"

/>

spring 整合Junit,整合web

l 匯入jar包 基本 4 1 測試 spring test.jar 1.讓junit通知spring載入配置檔案 2.讓spring容器自動進行注入 l 修改測試類 package com.hcx import org.junit.test import org.junit.runner.runw...

Spring 整合測試

spring 中的包 spring mock.jar 為整合測試提供了一流的支援。所有相關的api在包 org.springframework.test 中,它們不依賴於任何應用伺服器或者其他部署環境。test包裡的各種抽象類提供了如下的功能 test包對載入的context提供快取,快取功能是通過...

spring整合JDBC spring aop事務

spring中提供了乙個可以運算元據庫的物件,物件封裝了jdbc技術。jdbctemplate jdbc模板物件。與dbutils中的queryrunner非常相似。jdbcdaosupport 根據連線池建立jdbc模板。spring封裝了事務管理 開啟事務,提交事務,回滾事務 因為在不同平台,操...