`
coolyongzi
  • 浏览: 51355 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring2.5的国际化配置

阅读更多
引用出处:http://hi.baidu.com/renyijiu/blog/item/601251f92054c95c252df2c6.html



基于浏览器语言的国际化配置

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

<!-- 资源文件绑定器 -->        
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">                

<property name="basename" value="message-info" />              
<property name="useCodeAsDefaultMessage" value="true" />      

</bean>


其中,message-info是你的properties文件的通用名。如:我的配置文件叫message-info.properties,message-info_zh_CN.properties等等

只要有了这个配置,然后配置JSP渲染器为JSTL支持的,那么在你的JSP文件中使用fmt标记就可以实现客户浏览器语言国际化了。
如:<fmt:message key="info.login.title" />
其中的info.login.title和你的资源文件对应

二、基于动态加载的国际化配置

1、基于请求的国际化配置

基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主。

配置方式如下:
首先配置拦截器
<!-- 国际化操作 拦截器 必需配置,可以和其它国际化方式通用 -->      

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />



这个配置呢,是不论请求级别的国际化,还是Cookie级别的国际化,再或者Session级别的国际化,都必需有配置这个拦截器,否则会不能使用。

配好上面的拦截器之后,就将拦截器注入到你的UrlHandlerMapping中,例如:
<bean id="defaultUrlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">                

<property name="interceptors" ref="localeChangeInterceptor" />                

<property name="order">                        
<value>1</value>              
</property>      

</bean>



这个时候,但凡有了符合UrlMapping的请求,就会被拦截,并且开始配置国际化参数
         <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver">         </bean>


默认的参数名为locale主意大小写。里面放的就是你的提交参数。如:en_US,zh_CN之类的,这个时候,你在页面上加一句<a href="?locale=zh_CN">简体中文</a>
如果你的资源中,饱含建议中文的配置,那么就会变成你确定的简体中文拉。

2、基于Session的国际化配置

拦截器和基于请求的相同

Session的配置如下:
         <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">         </bean>  


在你的处理的Controller中,将提交上来的locale字段信息生成真正的Locale对象,然后将对象保存在Session中,默认保存的ID是SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME



这样,当你的Session不过期,那么语言种类始终保持正确的说。我一直是这样子用的,我觉得还是Session的好,老外们用了很满意。

3、基于Cookie的国际化配置

这个我就不说了,反正用的不多,至少我做的项目能不用Cookie就不用Cookie,所以,基于Cookie的国际化配置我就不细说了,如果想知道怎么配置,那么下载一个Spring,其中的例子程序就是用Cookie配置的,你自己读代码就OK了。

三、注意事项

如果不用默认的浏览器语言国际化方式,那么拦截器一定要配置,如果你有多个UrlMapping,那么就每个都配上拦截器。
至于配置的LocaleResolver的名字,一定要用上面的配置中的名字localeResolver当然了,这个是默认的名字来的,自己设置成别的也可以,但是就是麻烦,反正我用默认的就感觉不错



解决问题:
在前几天引用“Spring 的MVC I18N-国际化相关配置 ”并做了测试,发现 有一问题。程序运行会抛出异常

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

public class AcceptHeaderLocaleResolver implements LocaleResolver {

public Locale resolveLocale(HttpServletRequest request) {
   return request.getLocale();
}

public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
   throw new UnsupportedOperationException(
     "Cannot change HTTP accept header - use a different locale resolution strategy");
}

}

请注意上面的类,该类允许继承,所以需要改写setLocale方法,
源码示范如下

package org.springframework.web.servlet.i18n;

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;
}
  
}
然后在action-servlet.xml里的设置为

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
   <property name="basename" value="message" />
</bean>
<bean id="myViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
<bean id="filenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors" ref="localeChangeInterceptor"/>
   <property name="mappings">
   <value>
     chinese.do=filenameController
     us.do=filenameController
   </value>
   </property>
</bean>
<bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.MyAcceptHeaderLocaleResolver"/>

<bean id="viewResolver";
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
   <property name="prefix" value="/WEB-INF/jsp/" />
   <property name="suffix" value=".jsp" />
</bean>

分享到:
评论

相关推荐

    Spring2.5-中文参考手册chm

    Spring2.5版本是该框架的一个重要里程碑,它在2008年发布,带来了许多新特性和改进,提升了开发者在构建应用程序时的灵活性和效率。 **依赖注入(DI)和控制反转(IoC)** Spring的核心特性之一是依赖注入(Dependency...

    spring2.5的所有jar包

    10. **国际化(i18n)支持**:Spring 2.5提供了更好的国际化支持,使得应用可以轻松地根据用户的选择展示不同语言的文本。 以上只是Spring 2.5中部分关键知识点的概述。在实际开发中,了解并熟练运用这些特性,将极...

    spring2.5中文文档

    6. **国际化(I18N)**:Spring 2.5提供了更好的国际化支持,包括对`ResourceBundleMessageSource`的改进,使得开发者可以更方便地管理多语言资源。 7. **轻量级HTTP客户端**:Spring 2.5引入了`...

    Spring2.5 源代码

    Spring 2.5中的Bean工厂是容器的基础,而ApplicationContext是更高级的容器,提供更多的企业级服务,如消息源和国际化。在源代码中,可以研究这两个接口及其实现,理解它们如何管理bean的生命周期。 5. **数据访问...

    spring 2.5中文帮助文档

    8. **国际化(i18n)与本地化(l10n)**:Spring 2.5提供了对国际化和本地化的良好支持,通过ResourceBundle和MessageSource接口,可以轻松地处理多语言环境下的应用。 9. **Spring Web Services**:Spring 2.5开始...

    Spring2.5-中文参考手册chm.zip

    7. **国际化**:Spring 2.5加强了对国际化的支持,提供了更方便的方式来处理多语言环境下的应用。 8. **测试支持**:Spring 2.5提供了更完善的测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`和`@...

    传智播客spring2.5源代码

    8. **本地化支持**:Spring 2.5提供了更好的国际化和本地化支持,允许开发者通过`MessageSource`接口轻松处理多语言环境。 9. **Web应用增强**:Spring 2.5在MVC框架中引入了诸如`@RequestMapping`、`@RequestParam...

    spring2.5常用包

    7. **Web 模块**:Spring 2.5 为 Web 开发提供了丰富的支持,包括视图解析、国际化、上传文件等功能。例如,Tiles 视图解析器可以组合多个小视图来构建复杂页面。 8. **测试支持**:Spring 提供了测试框架,使得...

    spring2.5 mvc 完整项目

    6. **错误页面和国际化**:配置错误页面以展示异常信息,使用LocaleResolver实现多语言支持。 7. **测试**:编写单元测试和集成测试,确保每个组件的正确性。 8. **部署**:将项目打包成WAR文件,部署到Tomcat或...

    spring2.5中文文档(PDF)

    8. **国际化支持**:通过`MessageSource`接口,Spring 2.5提供了强大的国际化支持,方便应用根据不同地区显示不同语言的内容。 9. **容器改进**:Spring 2.5的容器性能有所提升,启动速度更快,同时提供了更多的...

    spring 2.5依赖包

    1. **国际化**:增强了对i18n的支持,提供了更方便的方式来管理消息资源。 2. **测试**:提供了更强大的测试工具和API,包括模拟对象(Mock Objects)和测试支持类。 3. **工具支持**:Spring 2.5集成了IDE工具,...

    Spring2.5

    通过阅读《spring2.5+学习笔记.doc》和《黎活明__spring教程.ppt》以及《黎活明_struts2教程.ppt》,你可以更深入地了解Spring 2.5与Struts2的整合,以及在实际项目中如何有效地利用这些知识。尽管Spring框架已经...

    传智播客 spring2.5源代码_lib包

    9. **国际化(i18n)与本地化(l10n)**: Spring支持应用程序的国际化和本地化,通过资源bundle管理和`MessageSource`接口,可以轻松处理不同地区的文本和格式。 10. **Spring AOP增强**: Spring 2.5的AOP增强了对...

    传智播客 黎活明spring2.5 ppt

    7. **国际化(i18n)与本地化(l10n)支持**:Spring 2.5提供了方便的工具和API,帮助开发者实现应用的国际化和本地化,如`MessageSource`接口。 8. **Web服务支持**:Spring 2.5增强了对SOAP和RESTful Web服务的...

    Spring2.5中文手册

    这个`Spring2.5中文手册`是一个非常有价值的参考资料,帮助开发者深入理解并有效地利用Spring框架。 1. **Spring概述** - Spring是一个开源的Java平台,它提供了全面的应用程序架构支持,简化了Java Enterprise ...

    spring2.5的applicationContext配置文件

    7. **国际化**:Spring支持多语言环境,通过`&lt;bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"&gt;`来配置消息源,使应用能够根据用户的语言环境显示相应的文本。...

    Spring2.5-中文参考手册(这是个chm格式的文档)

    8. **国际化(I18N)支持**:Spring 2.5提供对多语言环境的支持,可以通过ResourceBundle和MessageSource接口轻松实现应用的国际化。 9. **模块化设计**:Spring 2.5的模块化设计使得开发者可以根据需要选择使用特定...

    spring2.5源码

    9. **国际化和本地化**:Spring 2.5提供了对国际化和本地化的支持,通过`MessageSource`接口和`@MessageSource`注解,可以轻松处理多语言环境下的消息。 10. **事件传播**:Spring 2.5的`ApplicationEvent`和`...

Global site tag (gtag.js) - Google Analytics