spring mvc番外篇(二):国际化和本地化

2.1 简介

国际化(Internationalization:I18N):使程序在不傲任何修改的情况下,就可以在不同的国家或地区和不同的语言环境下,按照当地的语言和格式习惯显示字符。例如,对于中国大陆的用户,会自动显示中文简体的提示信息、错误信息等。而对于美国的用户,会自动显示英文的提示信息、错误信息等。

本地化(Localization:L10N):在开发国际化的程序时,创建某种语言相关的文本和格式资源的过程叫做本地化。

 

2.2 案例开发步骤

步骤一:在myeclipse8.6中新建web工程mvcI18n,拷贝如下包到lib目下:

说明:commons-logging-1.1.3.jar是日志包,在下载的struts2官方包里面可以找到。其它的包都在spring3.2.2版本官方包里面找到。

     spring-aop-3.2.2.RELEASE.jar:与Aop 编程相关的包

spring-beans-3.2.2.RELEASE.jar:提供了简捷操作bean 的接口

spring-context-3.2.2.RELEASE.jar:构建在beans 包基础上,用来处理资源文件及国际化。

spring-core-3.2.2.RELEASE.jar:spring 核心包

spring-web-3.2.2.RELEASE.jar:web 核心包,提供了web 层接口

spring-webmvc-3.2.2.RELEASE.jar:web 层的一个具体实现包,DispatcherServlet也位于此包中。

注意:以上包是springmvc开发所需要的最基本包,不能再精简。

 

步骤二:编写web.xml 配置文件,代码如下:

=================================web.xml========================

<!-- 配置spring的字符集过滤 -->

  <filter>

    <filter-name>encode</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>

    <init-param>

    <param-name>forceEncoding</param-name>

    <param-value>true</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>encode</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

 

 

  <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>*.do</url-pattern>

  </servlet-mapping>

 

  <!—项目启动的时候就要加载spring mvc中的国际化配置 --> 

    <listener>

       <listener-class>

            org.springframework.web.context.ContextLoaderListener

       </listener-class>       

    </listener>

     

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/springmvc-servlet.xml</param-value>

    </context-param>

   

   

  <welcome-file-list>

    <welcome-file>Register.jsp</welcome-file>

  </welcome-file-list>

================================================================

 

步骤三:在webroot根目录下编写Register.jsp,对注册页面进行国际化处理,如下所示:

================================ Register.jsp=======================

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="http://www.springframework.org/tags"  prefix="s"%>

<%

String path =request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    <title><s:message code="title"></s:message></title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control"content="no-cache">

    <meta http-equiv="expires"content="0">   

<style type="text/css">

    #show{ border: 2px solid blue; width:400px;}

</style> 

  </head>

 

<body>

<div id="show">

    <p align="right"><a href="ChangeLang.do?lang=cn">中文</a>&nbsp;

               <a href="ChangeLang.do?lang=us">English</a>

    </p>

    <h2 align="center">&nbsp;<s:message code="textNav"></s:message></h2>

    <form action="Register.do" method="post">

       <table border="1px"cellspacing="0">

           <tr><td><s:message code="textUserName"></s:message></td><td><input type="text" name="userName"/></td></tr>

           <tr><td><s:message code="textPwd1"></s:message></td><td><input type="password" name="pwd1"/></td></tr>

           <tr><td><s:message code="textPwd2"></s:message></td><td><input type="password" name="pwd2"/></td></tr>

           <tr><td><s:message code="textPhone"></s:message></td><td><input type="text" name="phone"/></td></tr>

           <tr><td colspan="2"><input type="submit" value="<s:message code='textSubmit'></s:message>"/>&nbsp;

               <input type="reset" value="<s:message code="textReset"></s:message>"/></td></tr>

       </table>

    </form>

</div>

</body>

</html>

==================================================================

 

步骤四:编写控制器I18nController.java,如下所示:

================================== I18nController.java==============

package com.stu.controls;

 

import java.util.Locale;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.LocaleResolver;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

 

public class I18nControllerimplements Controller {

    private LocaleResolver localeResolver;

 

    public void setLocaleResolver(LocaleResolver localeResolver) {

       this.localeResolver = localeResolver;

    }

 

    public ModelAndView handleRequest(HttpServletRequest request,

           HttpServletResponse response) throws Exception {

       Locale currentLocale = null;

       String i18nType = request.getParameter("lang");

       System.out.println("-------------->>>>>>>>>>>>>>>>>>>>>>>i18nType="+ i18nType);

       if (i18nType.equals("cn")) {

           currentLocale = new Locale("zh", "CN");

       } else if (i18nType.equals("us")) {

           currentLocale = new Locale("en", "US");

       }else{

           //由浏览器语言决定

           currentLocale=request.getLocale();

       }

       localeResolver.setLocale(request, response, currentLocale);

       return new ModelAndView("Register");

    }

}

====================================================================

 

步骤五: 在web-inf目录下建立springmvc-servlet.xml的配置文件,它的命名规则{servlet-name}-servlet.xml ,注意下划线处。当DispatcherServlet启动的时候,它会默认根据此规则到web-inf目录下去找这个xml配置文件。

=========================springmvc-servlet.xml==========================

<?xml version="1.0"encoding="UTF-8" ?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTDBEAN//EN"

 "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>   

    <bean id="simpleUrlHandlerMapping"

       class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

       <property name="mappings">

           <props>

              <prop key="/ChangeLang.do">i18nController</prop>

           </props>

       </property>

    </bean>

   

    <bean id="jspViewResolver"

       class="org.springframework.web.servlet.view.InternalResourceViewResolver">

       <property name="prefix"value="/"></property>

       <property name="suffix"value=".jsp"></property>

    </bean>

   

    <!-- 国际化配置 -->

    <bean id="messageSource"

        class="org.springframework.context.support.ResourceBundleMessageSource">

       <!—设置语言包 -->  

<property name="basename" value="languages.message"/>

       <!—使用默认语言包 -->

<property name="useCodeAsDefaultMessage" value="true"/>

    </bean>

   

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

    </bean>

   

    <!-- 注入控制器 -->

    <bean id="i18nController"class="com.stu.controls.I18nController">

        <property name="localeResolver" ref="localeResolver"/>

    </bean>

</beans>

==========================================================

 

步骤六:建立本地化语言文件,如图所示。

 

(1) 默认的语言文件,简体中文

 

(2) 英语语言文件

 

(3) 繁体中文语言文件

 

步骤七: 启动tomcat,发布项目,在地址栏分别输入 http://localhost:8080/mvcI18n/

进行测试。 如图所示:

 

点击中文链接,界面变中文

或者修改IE的默认语言选项,界面语言也会更改: