自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

spring的MVC國際化的設(shè)置

開發(fā) 后端
Spring框架提供了構(gòu)建Web應(yīng)用程序的全功能MVC模塊。使用Spring可插入的MVC架構(gòu),可以選擇是使用內(nèi)置的Spring Web框架還是Struts這樣的Web框架。

一、基于瀏覽器語言的國際化配置

使用Spring的MVC,并且配置中有配置Resource文件

Xml代碼

  1. <!-- 資源文件綁定器 -->             
  2. <bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource">                     
  3. <property name="basename" value="message-info" />                   
  4. <property name="useCodeAsDefaultMessage" value="true" />           
  5. </bean>   

其中,message-info是你的properties文件的通用名。如:我的配置文件叫 message-info.properties,message-info_zh_CN.properties等等,只要有了這個配置,然后配置JSP 渲染器為JSTL支持的,那么在你的JSP文件中使用fmt標(biāo)記就可以實現(xiàn)客戶瀏覽器語言國際化了。

如:

  1. <fmt:message key="info.login.title" />  

其中的info.login.title和你的資源文件對應(yīng).

另外一種方式是使用spring自帶的標(biāo)簽顯示國際化信息,如:

  1. <spring:message code="main.title" /><br> 
  2. <input type="button" value="<spring:message code="main.title" />"/><br>  

二、基于動態(tài)加載的國際化配置

1、基于請求的國際化配置

基于請求的國際化配置是指,在當(dāng)前請求內(nèi),國際化配置生效,否則自動以瀏覽器為主。

配置方式如下:

首先配置攔截器

  1. <!-- 國際化操作 攔截器 必需配置,可以和其它國際化方式通用 -->      
  2. <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  

這個配置呢,是不論請求級別的國際化,還是Cookie級別的國際化,再或者Session級別的國際化,都必需有配置這個攔截器,否則會不能使用。

配好上面的攔截器之后,就將攔截器注入到你的UrlHandlerMapping中,例如:

Xml代碼

  1. <bean id="defaultUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">                    
  2. <property name="interceptors" ref="localeChangeInterceptor" />                    
  3. <property name="order">                             
  4. <value>1</value>                   
  5. </property>          
  6. </bean> 

這個時候,但凡有了符合UrlMapping的請求,就會被攔截,并且開始配置國際化參數(shù)

  1. <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver">         
  2. </bean>  

默認(rèn)的參數(shù)名為locale主意大小寫。里面放的就是你的提交參數(shù)。如:en_US,zh_CN之類的,這個時候,你在頁面上加一句<a href="?locale=zh_CN">簡體中文</a>

如果你的資源中,飽含建議中文的配置,那么就會變成你確定的簡體中文拉。

2、基于Session的國際化配置

攔截器和基于請求的相同

Session的配置如下:

  1. <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> 
  2. </bean>   

在你的處理的Controller中,將提交上來的locale字段信息生成真正的Locale對象,然后將對象保存在Session中,默認(rèn)保存的ID是SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME

這樣,當(dāng)你的Session不過期,那么語言種類始終保持正確的說。我一直是這樣子用的,我覺得還是Session的好,老外們用了很滿意。

3、基于Cookie的國際化配置

這個我就不說了,反正用的不多,至少我做的項目能不用Cookie就不用Cookie,所以,基于Cookie的國際化配置我就不細(xì)說了,如果想知道怎么配置,那么下載一個Spring,其中的例子程序就是用Cookie配置的,你自己讀代碼就OK了。

三、注意事項

如果不用默認(rèn)的瀏覽器語言國際化方式,那么攔截器一定要配置,如果你有多個UrlMapping,那么就每個都配上攔截器。

至于配置的LocaleResolver的名字,一定要用上面的配置中的名字localeResolver當(dāng)然了,這個是默認(rèn)的名字來的,自己設(shè)置成別的也可以,但是就是麻煩,反正我用默認(rèn)的就感覺不錯

解決問題:

在前幾天引用“Spring 的MVC I18N-國際化相關(guān)配置 ”并做了測試,發(fā)現(xiàn) 有一問題。程序運行會拋出異常

“Cannot change HTTP accept header - use a different locale resolution strategy”,根本原因是spring source 做了限制,源碼如下

Java代碼

  1. public class AcceptHeaderLocaleResolver implements LocaleResolver {    
  2. public Locale resolveLocale(HttpServletRequest request) {     
  3. return request.getLocale();     
  4. }    
  5. public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {     
  6. throw new UnsupportedOperationException(     
  7.     "Cannot change HTTP accept header - use a different locale resolution strategy");     
  8. }     

請注意上面的類,該類允許繼承,所以需要改寫setLocale方法,源碼示范如下

Java代碼

  1. package org.springframework.web.servlet.i18n;    
  2. import java.util.Locale;    
  3. import javax.servlet.http.HttpServletRequest;     
  4. import javax.servlet.http.HttpServletResponse;    
  5. import org.springframework.web.servlet.DispatcherServlet;     
  6. import org.springframework.web.servlet.LocaleResolver;    
  7. public class MyAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver {     
  8. private Locale myLocal;     
  9. public Locale resolveLocale(HttpServletRequest request) {     
  10. return myLocal;     
  11. }     
  12. public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {     
  13. myLocal = locale;     
  14. }     
  15.        
  16. }    

然后在action-servlet.xml里的設(shè)置為

Xml代碼

  1. <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">     
  2. <property name="basename" value="message" />     
  3. </bean>     
  4. <bean id="myViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />     
  5. <bean id="filenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />     
  6. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">     
  7. <property name="interceptors" ref="localeChangeInterceptor"/>     
  8. <property name="mappings">     
  9.    <value>     
  10.     chinese.do=filenameController     
  11.     us.do=filenameController     
  12.    </value>     
  13. </property>     
  14. </bean>     
  15. <bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />     
  16. <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />     
  17. <bean id="localeResolver" class="org.springframework.web.servlet.i18n.MyAcceptHeaderLocaleResolver"/>   
  18. <bean id="viewResolver"     
  19. class="org.springframework.web.servlet.view.InternalResourceViewResolver">     
  20. <property name="viewClass"     
  21.    value="org.springframework.web.servlet.view.JstlView" />     
  22. <property name="prefix" value="/WEB-INF/jsp/" />     
  23. <property name="suffix" value=".jsp" />     
  24. </bean> 

原文鏈接:http://sharpspeed.iteye.com/blog/1159986

【編輯推薦】

  1. 深入Java,初探JVM
  2. struts2國際化小結(jié)
  3. 說說Maven項目搭建及常用包添加
  4. 電影《Java風(fēng)云》預(yù)告片

 

 

責(zé)任編輯:艾婧 來源: sharpspeed的博客
相關(guān)推薦

2024-01-04 08:16:34

Spring國際化標(biāo)準(zhǔn)

2022-07-27 10:39:14

Spring代碼IDEA

2011-05-17 09:39:38

JavaSE

2024-01-17 10:16:22

前端國際化消息鍵

2010-03-02 16:44:59

CentOS Mono

2010-07-28 14:52:29

Flex國際化

2024-05-17 08:25:06

數(shù)據(jù)驅(qū)動React語言包

2023-01-31 10:29:26

JavaScript國際化國際化庫

2011-07-08 11:13:42

Cocoa Touch XCode

2009-06-03 08:30:30

禚佳春法航華為

2009-01-19 09:06:31

gettextPHP國際化編程

2010-01-04 13:09:51

Silverlight

2011-08-19 13:13:14

struts2Java

2015-03-13 09:50:46

2009-06-25 16:04:30

2009-03-04 10:53:39

gettextsmartyphp

2009-10-27 14:36:50

PHP 6Unicode編程

2021-05-17 10:13:24

iOS名詞復(fù)數(shù)開發(fā)

2017-01-09 16:24:07

滴滴Android 端 App

2009-12-29 15:05:29

WPF支持國際化
點贊
收藏

51CTO技術(shù)棧公眾號