所谓国际化就是支持多种语言,web应用在不同的浏览环境中可以显示出不同的语言,比如说汉语、英语等。下面我将以具体的实例来举例说明:

(1)新建动态Java web项目,并导入几个SpringMVC必需的几个jar包,项目结构图和所需jar包如下:

(2)配置web.xml:

<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping><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></web-app>

常规配置,没有什么特殊的地方,不多解释

(3)SpringMVC的配置文件springmvc-servlet.xml:

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><context:component-scanbase-package="cn.zifangsky.**.controller"/><context:annotation-config/><!--激活Bean中定义的注解--><mvc:annotation-driven/><!--视图相关配置--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/WEB-INF/pages/"/><!--视图前缀--><propertyname="suffix"value=".jsp"/><!--视图后缀--></bean><!--存储区域设置信息--><beanid="localeResolver"class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/><!--国际化资源文件--><beanid="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><propertyname="basename"value="classpath:messages"/></bean><mvc:interceptors><beanid="localeChangeInterceptor"class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"><propertyname="paramName"value="lang"/></bean></mvc:interceptors></beans>

在上面的配置中,SessionLocaleResolver类通过一个预定义会话名将区域化信息存储在会话中。紧接着的“messageSource”配置的是国际化资源文件的路径,”classpath:messages”指的是classpath路径下的messages_zh_CN.properties文件和messages_en_US.properties文件。在这个配置文件的最后配置的是一个拦截器,该拦截器通过名为”lang”的参数来拦截HTTP请求,使其重新设置页面的区域化信息

(4)两个国际化资源文件:

i)messages_zh_CN.properties文件:

language.cn=\u4e2d\u6587language.en=\u82f1\u6587internationalisation=\u56fd\u9645\u5316welcome=\u6b22\u8fce\u8bbf\u95ee\u201c\u007a\u0069\u0066\u0061\u006e\u0067\u0073\u006b\u0079\u7684\u4e2a\u4eba\u535a\u5ba2\u201d\uff0c\u0055\u0052\u004c\uff1a\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u007a\u0069\u0066\u0061\u006e\u0067\u0073\u006b\u0079\u002e\u0063\u006e

ii)messages_en_US.properties文件:

language.cn=Chineselanguage.en=Englishinternationalisation=\u0020Internationalisationwelcome=Welcometovisit"zifangsky'spersonalblog",URL\uff1ahttp://www.zifangsky.cn

注:上面一些看起来“乱码”的地方实际上是经过Unicode编码的

(5)后台处理请求的controller:

packagecn.zifangsky.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.servlet.ModelAndView;@ControllerpublicclassI18nController{@RequestMapping(value="/hello")publicModelAndViewwelcome(){ModelAndViewmodelAndView=newModelAndView("welcome");returnmodelAndView;}}

这个controller很简单,就是转到一个视图页面welcome.jsp

(6)首页的index.jsp:

<%response.sendRedirect("hello.html");%>

意思很简单,就是项目启动之后就请求htllo.html,也就是让controller中的welcome方法处理这个请求

(7)welcome.jsp:

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@taglibprefix="mvc"uri="http://www.springframework.org/tags/form"%><%@taglibprefix="spring"uri="http://www.springframework.org/tags"%><html><head><title>SpringMVC<spring:messagecode="internationalisation"/></title></head><body>Language:<ahref="?lang=zh_CN"><spring:messagecode="language.cn"/></a>-<ahref="?lang=en_US"><spring:messagecode="language.en"/></a><h3><spring:messagecode="welcome"/></h3>Locale:${pageContext.response.locale}</body></html>

可以看出,在需要使用国际化处理的地方都使用了Spring的message标签,code属性对应资源文件中的“键”名称

(8)最后的显示效果如下:

i)中文:

ii)英文: