Spring mvc 之国际化

springmvc如何处理国际化的呢,废话不多说。

1.国际化在java里原生态的方式是使用ResouceBundle来完成的,贴上代码(其后附上项目Maven构建)。

public static void main(String[] args) {
		//中文
		ResourceBundle rb = ResourceBundle.getBundle("i18n/message", Locale.CHINESE);
		String result = rb.getString("error.username.null");
		System.out.println(result);
		
		//英文
		ResourceBundle rb1 = ResourceBundle.getBundle("i18n/message", Locale.ENGLISH);
		String result1 = rb1.getString("error.username.null");
		System.out.println(result1);
	}

 执行结果:


2.springmvc中使用MessageSource接口的实现类来实现的,具体实现方案也是通过java原生态的ResourceBundle来完成国际化工作

 先来看下ResouceBundle接口类文档吧

 

具体实现:

/**
	 * Resolves the given message code as key in the registered resource bundles,
	 * returning the value found in the bundle as-is (without MessageFormat parsing).
	 */
	@Override
	protected String resolveCodeWithoutArguments(String code, Locale locale) {
		String result = null;
		for (int i = 0; result == null && i < this.basenames.length; i++) {
			ResourceBundle bundle = getResourceBundle(this.basenames[i], locale);
			if (bundle != null) {
				result = getStringOrNull(bundle, code);
			}
		}
		return result;
	}

---  未完待续

3.在springmvc的controller中是怎么使用国际化的呢

package com.demo.web.controllers;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.support.RequestContext;
import com.demo.web.models.FormatModel;

@Controller
@RequestMapping(value = "/global")
public class GlobalController {
    
    @RequestMapping(value="/test", method = {RequestMethod.GET})
    public String test(HttpServletRequest request,Model model){
        if(!model.containsAttribute("contentModel")){
            
            //从后台代码获取国际化信息
            RequestContext requestContext = new RequestContext(request);
            model.addAttribute("money", requestContext.getMessage("money"));
            model.addAttribute("date", requestContext.getMessage("date"));

            
            FormatModel formatModel=new FormatModel();

            formatModel.setMoney(12345.678);
            formatModel.setDate(new Date());
            
            model.addAttribute("contentModel", formatModel);
        }
        return "globaltest";
    }
    
}

4.在springmvc的页面上是如何使用国际化,以及其国际化具体怎么实现的。

猜你喜欢

转载自chongdiyang.iteye.com/blog/2209243