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>
<a href="ChangeLang.do?lang=us">English</a>
</p>
<h2 align="center"> <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>"/>
<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的默认语言选项,界面语言也会更改: