springmvc 国际化配置

最近弄个国际化测试,终于弄出来了,期间遇到了各种问题,在这里总结下,希望可以帮助农民朋友们绕开弯路
第一步:在web.xml中配置servlet
<!-- 上下文参数(第一启动),指定其他spring配置文件路径 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
	    classpath:applicationContext-*.xml
    </param-value>
  </context-param>
  
  <!-- spring监听器(第二启动),监听springMvc环境 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

<!-- springMvc编码拦截器(第三启动),springMvc内置的编码拦截器 -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- springMvc前置总控制器(第四启动),在分发其它的控制器前都要经过这个总控制器 -->
  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- 	 这里必须在springmvc-servlet.xml文件中加入<context:component-scan base-package="***"/>和 <mvc:annotation-driven /> -->
       <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
          		classpath:springmvc-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup> 
  </servlet>
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <!-- 拦截所有 -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>
第二步:在项目中添加springmvc-servlet.xml文件

并在applicationContext-common.xml文件中配置如下:
 <!-- 国际化 -->
     <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
   		  <!-- 国际化信息所在的文件名 -->     
	        <property name="basename" value="messages" />
	        <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  --> 
	        <property name ="useCodeAsDefaultMessage" value="true"/>
	 </bean>
	   
	<!--  方式一 session域  -->
    <bean name="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
	</bean>

	<!-- 方式二 cookie域 -->
	<!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
       <property name="cookieMaxAge" value="604800"/>
       <property name="defaultLocale" value="zh_CN"/>
       <property name="cookieName" value="Language"></property>
     </bean>  -->
在springmvc-servlet.xml文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    
    <!-- 启动时扫描所有的controller -->
 	<context:component-scan base-package="test.action"></context:component-scan>
 	
 <!--必须 配置mvc 访问静态资源 ,配置后可以进入@Controller控制器文件-->
    <mvc:default-servlet-handler/>

	<!--配置MVC 访问动态资源
	 主要作用于@Controller,激活该模式,下面是一种简写形式,完全可以手动配置替代这种简写形式,它会自动注册DefaultAnnotationHandlerMapping与
	AnnotationMethodHandlerAdapter,是spring MVC为@Controllers分发请求所必须的 -->
    <mvc:annotation-driven /> 
      
    <!-- 配置js,css等静态文件直接映射到对应的文件夹,不被DispatcherServlet处理 ,但是测试没效果 和   <mvc:default-servlet-handler/> 效果等同-->
<!--     <mvc:resources  mapping="/*/script/**" location="/script/"/>
 	<mvc:resources  mapping="/*/css/**" location="/css/"/>
 	<mvc:resources  mapping="/*/images/**" location="/images/"/> -->
    
   
   <!-- jsp页面解析器 -->
    <bean id="internalResourceViewResolver" 
    	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 (视图文件存放路径)-->
        <property name="prefix" value="/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
     <!-- 装配拦截器 -->
	<mvc:interceptors>
		<bean id="localeChangeInterceptor"
			class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
			<property name="paramName" value="lang" />
        </bean>
    </mvc:interceptors>
第三步:在项目中添加国际化文件:

messages_en_GB.properties文件配置:

messages_zh_CN.properties文件配置:

自动转化为Unicode码

第四步:添加测试文件:
添加it8n.jsp视图文件

it8n.jsp视图文件内容:

添加控制器文件:
文件内容:
package test.action;
@Controller
@RequestMapping("/mvc")
public class MvcController {
	SessionLocaleResolver localeResolver;
//	CookieLocaleResolver  localeResolver;

	//method one 注意再国际化中必须使用转发才会有效果
	@RequestMapping(value="changeLanguage")
    public ModelAndView language(HttpServletRequest request,HttpServletResponse response,String language) throws Exception{
	language = LocaleContextHolder.getLocale().getLanguage().toLowerCase();
    	if(language==null||language.equals("")){
        }else{
            if(language.contains("zh")){
            	localeResolver.setLocale(request, response, Locale.UK );
            }else if(language.contains("en")){
            	localeResolver.setLocale(request, response, Locale.SIMPLIFIED_CHINESE );
            }else{
            	localeResolver.setLocale(request, response, Locale.SIMPLIFIED_CHINESE );
            }
        }
//    	return new ModelAndView("redirect:/jsp/it8n.jsp"); //重定向没有效果
    	return new ModelAndView("forward:/jsp/it8n.jsp"); //转发
    }
	
//method two
   /* @RequestMapping(value="/changeLanguage")
    public String language(HttpServletRequest request,String language) throws Exception{
    	//获取方式一
    	Locale loc =(Locale)request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
    	//获取方式二
//    	Locale loc = LocaleContextHolder.getLocale();
    	if(loc != null){
    		language = loc.getLanguage();
    	}
    	 if(language==null||language.equals("")){	 	
	request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
    	 }else{
    	 	if(language.contains("zh")){
    		 	Locale locale = new Locale("en", "GB"); 
			request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
             	}else if(language.contains("en")){
            	 	 Locale locale = new Locale("zh", "CN"); 
             		 request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); 
              	}else{
           		request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
              }
    	 } 
    		return "it8n";
    }*/	
}
测试效果:
进入到it8n.jsp文件中:

点击“切换语言”后:


在springmvc-servlet.xml文件配置:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值