Springmvc中的国际化 - AcceptHeaderLocaleResolver实现国际化

说明: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.项目结构

Springmvc中的国际化 - AcceptHeaderLocaleResolver实现国际化_第1张图片Springmvc中的国际化 - AcceptHeaderLocaleResolver实现国际化_第2张图片

---------------------

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


	

小结:虽然乍一看不是很复杂,但还是困扰了我好一会,在编码的过程中我所遇到的问题已经在各个部分说明了……

你可能感兴趣的:(Spring框架)