说明:SpringMVC的国际化步骤与Java国际化步骤基本相似,只是实现起来更加简单。SpringMVC国际化可按如下步骤进行:
(1)给系统加载国际化资源文件。
(2)输出国际化。有两种输出方式:
a.在视图页面输出国际化需要使用SpringMVC的标签库。(在jsp页面头部引入标签:<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>)
b.在Controller的处理方法中输出国际化信息,需要使用org.springframework.web.servlet.support.RequestContext的getMessage()方法来完成。
---------------------------------------------
SpringMVC提供了一个语言区域解析器接口LocalResolver,该接口常用的实现类都在org.springframework.web.servlet.i18n包下,包括AcceptHeaderLocaleResolver(默认,可不手动配置)、SessionLocaleResolver(需手动配置)、CookieLocaleResolver(需手动配置)。本文仅讨论第一种。。
===============================================================
===============================================================
1.项目结构
---------------------
2.搭建环境的配置文件
web.xml
18NTest
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/springmvc-config.xml
1
springmvc
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
springmvc-config.xml
/WEB-INF/content/
.jsp
--------------------------------------
3.然后就是编写国际化文件:
message_en_US.properties
loginname= Login name:
password = Password:
submit = Submit
welcome = Welcom {0} access fkit
title = Login Page
username = administrator
message_zh_CN.properties(这个中文文件要着重强调下!!!,以下可以看到的是不是明确的中文,首先就是properties文件的编码格式问题,默认的是ISO-8859-1,最开始的时候我在这个文件中改为UTF-8编码后出现了中文乱码,后来检查了所有的编码格式明明都是utf8了但还是不知道为什么还会出现乱码。最后到了第二天发现问题出现在这里,具体原因我还不是很清楚,不过总算暂时解决了中文乱码,此处希望大神能留下脚印,感激不尽…)
loginname= \u767B\u5F55\u540D:
password = \u5BC6\u7801:
submit = \u63D0\u4EA4
welcome = \u6B22\u8FCE {0} \u8BBF\u95EE\u75AF\u72C2\u8F6F\u4EF6
title = \u767B\u5F55\u9875\u9762
username = \u7BA1\u7406\u5458
------------------------------------------------------------
4.接下来就没有什么内容了,一口气将代码全贴出来
User.java
package org.fkit.domain;
import java.io.Serializable;
// 域对象,实现序列化接口
public class User implements Serializable{
private String loginname;
private String password;
private String username;
public User() {
super();
// TODO Auto-generated constructor stub
}
//省略set和get方法
}
UserController.java
package org.fkit.controller;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.support.RequestContext;
@Controller
public class UserController{
private static final Log logger = LogFactory.getLog(UserController.class);
@RequestMapping(value="/{formName}")
public String loginForm(
@PathVariable String formName,
Model model){
User user = new User();
model.addAttribute("user",user);
// 动态跳转页面
return formName;
}
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(
@ModelAttribute @Validated User user,
Model model,
HttpServletRequest request) {
logger.info(user);
// 如果登录名是fkit,密码是123456,则验证通过
if(user.getLoginname()!=null && user.getLoginname().equals("fkit")
&& user.getPassword()!=null && user.getPassword().equals("123456")){
//从后台代码获取国际化信息username
RequestContext requestContext = new RequestContext(request);
String username = requestContext.getMessage("username");
// 将获取的username信息设置到User对象并设置到Model当中
user.setUsername(username);
model.addAttribute("user", user);
return "success";
}
return "error";
}
}
--------------------------------
5.页面代码
loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
测试基于浏览器请求的国际化
"/>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
Insert title here
小结:虽然乍一看不是很复杂,但还是困扰了我好一会,在编码的过程中我所遇到的问题已经在各个部分说明了……