引用出处: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版本是该框架的一个重要里程碑,它在2008年发布,带来了许多新特性和改进,提升了开发者在构建应用程序时的灵活性和效率。 **依赖注入(DI)和控制反转(IoC)** Spring的核心特性之一是依赖注入(Dependency...
10. **国际化(i18n)支持**:Spring 2.5提供了更好的国际化支持,使得应用可以轻松地根据用户的选择展示不同语言的文本。 以上只是Spring 2.5中部分关键知识点的概述。在实际开发中,了解并熟练运用这些特性,将极...
6. **国际化(I18N)**:Spring 2.5提供了更好的国际化支持,包括对`ResourceBundleMessageSource`的改进,使得开发者可以更方便地管理多语言资源。 7. **轻量级HTTP客户端**:Spring 2.5引入了`...
Spring 2.5中的Bean工厂是容器的基础,而ApplicationContext是更高级的容器,提供更多的企业级服务,如消息源和国际化。在源代码中,可以研究这两个接口及其实现,理解它们如何管理bean的生命周期。 5. **数据访问...
8. **国际化(i18n)与本地化(l10n)**:Spring 2.5提供了对国际化和本地化的良好支持,通过ResourceBundle和MessageSource接口,可以轻松地处理多语言环境下的应用。 9. **Spring Web Services**:Spring 2.5开始...
7. **国际化**:Spring 2.5加强了对国际化的支持,提供了更方便的方式来处理多语言环境下的应用。 8. **测试支持**:Spring 2.5提供了更完善的测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`和`@...
8. **本地化支持**:Spring 2.5提供了更好的国际化和本地化支持,允许开发者通过`MessageSource`接口轻松处理多语言环境。 9. **Web应用增强**:Spring 2.5在MVC框架中引入了诸如`@RequestMapping`、`@RequestParam...
7. **Web 模块**:Spring 2.5 为 Web 开发提供了丰富的支持,包括视图解析、国际化、上传文件等功能。例如,Tiles 视图解析器可以组合多个小视图来构建复杂页面。 8. **测试支持**:Spring 提供了测试框架,使得...
6. **错误页面和国际化**:配置错误页面以展示异常信息,使用LocaleResolver实现多语言支持。 7. **测试**:编写单元测试和集成测试,确保每个组件的正确性。 8. **部署**:将项目打包成WAR文件,部署到Tomcat或...
8. **国际化支持**:通过`MessageSource`接口,Spring 2.5提供了强大的国际化支持,方便应用根据不同地区显示不同语言的内容。 9. **容器改进**:Spring 2.5的容器性能有所提升,启动速度更快,同时提供了更多的...
1. **国际化**:增强了对i18n的支持,提供了更方便的方式来管理消息资源。 2. **测试**:提供了更强大的测试工具和API,包括模拟对象(Mock Objects)和测试支持类。 3. **工具支持**:Spring 2.5集成了IDE工具,...
通过阅读《spring2.5+学习笔记.doc》和《黎活明__spring教程.ppt》以及《黎活明_struts2教程.ppt》,你可以更深入地了解Spring 2.5与Struts2的整合,以及在实际项目中如何有效地利用这些知识。尽管Spring框架已经...
9. **国际化(i18n)与本地化(l10n)**: Spring支持应用程序的国际化和本地化,通过资源bundle管理和`MessageSource`接口,可以轻松处理不同地区的文本和格式。 10. **Spring AOP增强**: Spring 2.5的AOP增强了对...
7. **国际化(i18n)与本地化(l10n)支持**:Spring 2.5提供了方便的工具和API,帮助开发者实现应用的国际化和本地化,如`MessageSource`接口。 8. **Web服务支持**:Spring 2.5增强了对SOAP和RESTful Web服务的...
这个`Spring2.5中文手册`是一个非常有价值的参考资料,帮助开发者深入理解并有效地利用Spring框架。 1. **Spring概述** - Spring是一个开源的Java平台,它提供了全面的应用程序架构支持,简化了Java Enterprise ...
7. **国际化**:Spring支持多语言环境,通过`<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">`来配置消息源,使应用能够根据用户的语言环境显示相应的文本。...
8. **国际化(I18N)支持**:Spring 2.5提供对多语言环境的支持,可以通过ResourceBundle和MessageSource接口轻松实现应用的国际化。 9. **模块化设计**:Spring 2.5的模块化设计使得开发者可以根据需要选择使用特定...
9. **国际化和本地化**:Spring 2.5提供了对国际化和本地化的支持,通过`MessageSource`接口和`@MessageSource`注解,可以轻松处理多语言环境下的消息。 10. **事件传播**:Spring 2.5的`ApplicationEvent`和`...