在系列(7)中我們講了數(shù)據(jù)的格式化顯示,spring在做格式化展示的時(shí)候已經(jīng)做了國(guó)際化處理,那么如何將我們網(wǎng)站的其它內(nèi)容(如菜單、標(biāo)題等)做國(guó)際化處理呢?這就是本篇要將的內(nèi)容—>國(guó)際化。
一.基于瀏覽器請(qǐng)求的國(guó)際化實(shí)現(xiàn):
首先配置我們項(xiàng)目的springservlet-config.xml文件添加的內(nèi)容如下:
1
|
2
3
4
5
6
|
<bean id= "messagesource" class = "org.springframework.context.support.resourcebundlemessagesource" > <!-- 國(guó)際化信息所在的文件名 --> <property name= "basename" value= "messages" /> <!-- 如果在國(guó)際化資源文件中找不到對(duì)應(yīng)代碼的信息,就用這個(gè)代碼作為名稱 --> <property name= "usecodeasdefaultmessage" value= "true" /> </bean> |
在com.demo.web.controllers包中添加globalcontroller.java內(nèi)容如下:
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package com.demo.web.controllers; import java.util.date; import javax.servlet.http.httpservletrequest; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.servlet.support.requestcontext; import com.demo.web.models.formatmodel; @controller @requestmapping (value = "/global" ) public class globalcontroller { @requestmapping (value= "/test" , method = {requestmethod.get}) public string test(httpservletrequest request,model model){ if (!model.containsattribute( "contentmodel" )){ //從后臺(tái)代碼獲取國(guó)際化信息 requestcontext requestcontext = new requestcontext(request); model.addattribute( "money" , requestcontext.getmessage( "money" )); model.addattribute( "date" , requestcontext.getmessage( "date" )); formatmodel formatmodel= new formatmodel(); formatmodel.setmoney( 12345.678 ); formatmodel.setdate( new date()); model.addattribute( "contentmodel" , formatmodel); } return "globaltest" ; } } |
這里展示模型還用系列(7)中的作為演示。
在項(xiàng)目中的源文件夾resources中添加messages.properties、messages_zh_cn.properties、messages_en_us.properties三個(gè)文件,其中messages.properties、messages_zh_cn.properties里面的"money", "date",為中文,messages_en_us.properties里面的為英文。
在views文件夾中添加globaltest.jsp視圖,內(nèi)容如下:
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page language= "java" contenttype= "text/html; charset=utf-8" pageencoding= "utf-8" %> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" " http://www.w3.org/tr/html4/loose.dtd " > <% @taglib prefix= "spring" uri= " http://www.springframework.org/tags " %> <html> <head> <meta http-equiv= "content-type" content= "text/html; charset=utf-8" > <title>insert title here</title> </head> <body> 下面展示的是后臺(tái)獲取的國(guó)際化信息:<br/> ${money}<br/> ${date}<br/> 下面展示的是視圖中直接綁定的國(guó)際化信息:<br/> <spring:message code= "money" />:<br/> <spring:eval expression= "contentmodel.money" ></spring:eval><br/> <spring:message code= "date" />:<br/> <spring:eval expression= "contentmodel.date" ></spring:eval><br/> </body> </html> |
運(yùn)行測(cè)試:
更改瀏覽器語(yǔ)言順序,刷新頁(yè)面:
二.基于session的國(guó)際化實(shí)現(xiàn):
在項(xiàng)目的springservlet-config.xml文件添加的內(nèi)容如下(第一種時(shí)添加的內(nèi)容要保留):
1
|
2
3
4
5
6
|
<mvc:interceptors> <!-- 國(guó)際化操作攔截器 如果采用基于(請(qǐng)求/session/cookie)則必需配置 --> <bean class = "org.springframework.web.servlet.i18n.localechangeinterceptor" /> </mvc:interceptors> <bean id= "localeresolver" class = "org.springframework.web.servlet.i18n.sessionlocaleresolver" /> |
更改globaltest.jsp視圖為如下內(nèi)容:
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page language= "java" contenttype= "text/html; charset=utf-8" pageencoding= "utf-8" %> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" " http://www.w3.org/tr/html4/loose.dtd " > <% @taglib prefix= "spring" uri= " http://www.springframework.org/tags " %> <html> <head> <meta http-equiv= "content-type" content= "text/html; charset=utf-8" > <title>insert title here</title> </head> <body> <a href= "test?langtype=zh" rel= "external nofollow" >中文</a> | <a href= "test?langtype=en" rel= "external nofollow" >英文</a><br/> 下面展示的是后臺(tái)獲取的國(guó)際化信息:<br/> ${money}<br/> ${date}<br/> 下面展示的是視圖中直接綁定的國(guó)際化信息:<br/> <spring:message code= "money" />:<br/> <spring:eval expression= "contentmodel.money" ></spring:eval><br/> <spring:message code= "date" />:<br/> <spring:eval expression= "contentmodel.date" ></spring:eval><br/> </body> </html> |
更改globalcontroller.java為如下內(nèi)容:
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package com.demo.web.controllers; import java.util.date; import java.util.locale; import javax.servlet.http.httpservletrequest; import org.springframework.context.i18n.localecontextholder; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.servlet.i18n.sessionlocaleresolver; import org.springframework.web.servlet.support.requestcontext; import com.demo.web.models.formatmodel; @controller @requestmapping (value = "/global" ) public class globalcontroller { @requestmapping (value= "/test" , method = {requestmethod.get}) public string test(httpservletrequest request,model model, @requestparam (value= "langtype" , defaultvalue= "zh" ) string langtype){ if (!model.containsattribute( "contentmodel" )){ if (langtype.equals( "zh" )){ locale locale = new locale( "zh" , "cn" ); request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,locale); } else if (langtype.equals( "en" )){ locale locale = new locale( "en" , "us" ); request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,locale); } else request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,localecontextholder.getlocale()); //從后臺(tái)代碼獲取國(guó)際化信息 requestcontext requestcontext = new requestcontext(request); model.addattribute( "money" , requestcontext.getmessage( "money" )); model.addattribute( "date" , requestcontext.getmessage( "date" )); formatmodel formatmodel= new formatmodel(); formatmodel.setmoney( 12345.678 ); formatmodel.setdate( new date()); model.addattribute( "contentmodel" , formatmodel); } return "globaltest" ; } } |
運(yùn)行測(cè)試:
三.基于cookie的國(guó)際化實(shí)現(xiàn):
把實(shí)現(xiàn)第二種方法時(shí)在項(xiàng)目的springservlet-config.xml文件中添加的
<bean id="localeresolver" class="org.springframework.web.servlet.i18n.sessionlocaleresolver" />
注釋掉,并添加以下內(nèi)容:
<bean id="localeresolver" class="org.springframework.web.servlet.i18n.cookielocaleresolver" />
更改globalcontroller.java為如下內(nèi)容:
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
package com.demo.web.controllers; import java.util.date; import java.util.locale; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.context.i18n.localecontextholder; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.servlet.i18n.cookielocaleresolver; //import org.springframework.web.servlet.i18n.sessionlocaleresolver; import org.springframework.web.servlet.support.requestcontext; import com.demo.web.models.formatmodel; @controller @requestmapping (value = "/global" ) public class globalcontroller { @requestmapping (value= "/test" , method = {requestmethod.get}) public string test(httpservletrequest request, httpservletresponse response, model model, @requestparam (value= "langtype" , defaultvalue= "zh" ) string langtype){ if (!model.containsattribute( "contentmodel" )){ /*if(langtype.equals("zh")){ locale locale = new locale("zh", "cn"); request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,locale); } else if(langtype.equals("en")){ locale locale = new locale("en", "us"); request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,locale); } else request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,localecontextholder.getlocale());*/ if (langtype.equals( "zh" )){ locale locale = new locale( "zh" , "cn" ); //request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,locale); ( new cookielocaleresolver()).setlocale (request, response, locale); } else if (langtype.equals( "en" )){ locale locale = new locale( "en" , "us" ); //request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,locale); ( new cookielocaleresolver()).setlocale (request, response, locale); } else //request.getsession().setattribute(sessionlocaleresolver.locale_session_attribute_name,localecontextholder.getlocale()); ( new cookielocaleresolver()).setlocale (request, response, localecontextholder.getlocale()); //從后臺(tái)代碼獲取國(guó)際化信息 requestcontext requestcontext = new requestcontext(request); model.addattribute( "money" , requestcontext.getmessage( "money" )); model.addattribute( "date" , requestcontext.getmessage( "date" )); formatmodel formatmodel= new formatmodel(); formatmodel.setmoney( 12345.678 ); formatmodel.setdate( new date()); model.addattribute( "contentmodel" , formatmodel); } return "globaltest" ; } } |
運(yùn)行測(cè)試:
關(guān)于<bean id="localeresolver" class="org.springframework.web.servlet.i18n.cookielocaleresolver" />3個(gè)屬性的說(shuō)明(可以都不設(shè)置而用其默認(rèn)值):
1
|
2
3
4
5
6
7
8
|
<bean id= "localeresolver" class = "org.springframework.web.servlet.i18n.cookielocaleresolver" > <!-- 設(shè)置cookiename名稱,可以根據(jù)名稱通過(guò)js來(lái)修改設(shè)置,也可以像上面演示的那樣修改設(shè)置,默認(rèn)的名稱為 類名+locale(即:org.springframework.web.servlet.i18n.cookielocaleresolver.locale--> <property name= "cookiename" value= "lang" /> <!-- 設(shè)置最大有效時(shí)間,如果是- 1 ,則不存儲(chǔ),瀏覽器關(guān)閉后即失效,默認(rèn)為integer.max_int--> <property name= "cookiemaxage" value= "100000" > <!-- 設(shè)置cookie可見(jiàn)的地址,默認(rèn)是“/”即對(duì)網(wǎng)站所有地址都是可見(jiàn)的,如果設(shè)為其它地址,則只有該地址或其后的地址才可見(jiàn)--> <property name= "cookiepath" value= "/" > </bean> |
四.基于url請(qǐng)求的國(guó)際化的實(shí)現(xiàn):
首先添加一個(gè)類,內(nèi)容如下:
1
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.locale; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.dispatcherservlet; import org.springframework.web.servlet.localeresolver; public class myacceptheaderlocaleresolver extends acceptheaderlocaleresolver { private locale mylocal; public locale resolvelocale(httpservletrequest request) { return mylocal; } public void setlocale(httpservletrequest request, httpservletresponse response, locale locale) { mylocal = locale; } } |
然后把實(shí)現(xiàn)第二種方法時(shí)在項(xiàng)目的springservlet-config.xml文件中添加的
<bean id="localeresolver" class="org.springframework.web.servlet.i18n.sessionlocaleresolver" />
注釋掉,并添加以下內(nèi)容:
1
|
|
<bean id= "localeresolver" class = "xx.xxx.xxx.myacceptheaderlocaleresolver" /> |
“xx.xxx.xxx”是剛才添加的myacceptheaderlocaleresolver 類所在的包名。
保存之后就可以在請(qǐng)求的url后附上 locale=zh_cn 或 locale=en_us 如 http://xxxxxxxx?locale=zh_cn 來(lái)改變語(yǔ)言了,具體這里不再做演示了。
國(guó)際化部分的內(nèi)容到此結(jié)束。
代碼下載:springmvci18n.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/liukemng/p/3750117.html