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的页面上是如何使用国际化,以及其国际化具体怎么实现的。