SpringMVC国际化
来源:互联网 发布:session用法 java 编辑:程序博客网 时间:2024/05/20 20:01
Spring MVC国际化是建立在Java国际化的基础之上的,也是通过提供不同国家语言环境的消息资源,然后通过java.util.ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的内容。
SpringMVC国际化执行步骤:
- 给系统加载国际化资源文件
- 输出国际化(两种方式)
方式二:在Controller中输出国际化信息,使用org.springframework.web.servlet.support.RequestContext的getMessage()方法获取
在Spring MVC中选择语言区域,可以使用提供的语言区域解析器。语言解析器接口:org.springframework.web.servlet.LocaleResolver,该接口实现类在org.springframework.web.servlet.i18n包下,主要包括:
- AcceptHeaderLocaleResolver:默认的语言解析器,Spring MVC读取浏览器accept-language属性确定使用语言区域
- SessionLocaleResolver:Spring MVC从HttpSession中获取用户设置的语言区域,需要显示配置
- CookieLocaleResolver:Spring MVC从Cookie中获取用户设置的语言区域,需要显示配置
一.基于浏览器国际化
默认使用org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver解析器,可以不配置
1.springmvc配置文件
如果只有一个属性文件,则使用下面两种配置都可以:
- <property name="basename" value="message"/>:basename是普通成员变量
- <property name="basenames" value="message"/>:basenames是可变参数
如果需要使用多个属性文件,则使用:
<property name="basenames">
<list>
<value>message1</value>
<list>
<value>message1</value>
<value>message2</value>
</list>
</property>
</list>
</property>
配置如下:
<!-- 国际化资源 --><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"><!-- 国际化信息所在的文件名 --><property name="basename" value="message"/></bean>
2.资源文件
配置文件中basename的值为message,所以国际化资源文件都需要以message_开头,如message_zh_CN.properties;资源文件需要放在src目录下
(1).message_en_US.properties
title=Titleloginname=LoginNamepassword=Password
title=标题loginname=登录名password=密码
3.页面
使用spring标签库,使用<spring:message code="xxx">输出国际化信息;也可以在程序中使用RequestContext的getMessage()方式获取
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %><!-- 代码方式 -->${title }${loginname }${password }<!-- 标签方式 --><table><caption><spring:message code="title"/></caption><tr><th><spring:message code="loginname"/></th><td><input type="text" name="loginname"></td></tr><tr><th><spring:message code="password"/></th><td><input type="password" name="password"></td></tr></table>
4.Controller
@RequestMapping(value = "/page/login", method = RequestMethod.GET)public String login(HttpServletRequest request, Model model) throws Exception {// 从后台代码获取国际化信息 RequestContext requestContext = new RequestContext(request); model.addAttribute("title", requestContext.getMessage("title")); model.addAttribute("loginname", requestContext.getMessage("loginname")); model.addAttribute("password", requestContext.getMessage("password"));return "login";}
5.测试
设置浏览器的语言,访问登录页面就可以根据语言显示国际化资源文件中配置的信息;页面就不贴出来啦,自行测试一下就好。二.基于Session的国际化
SessionLocaleResolver不是默认的语言区域解析器,需要进行配置。
1.springmvc配置文件
<!-- 国际化资源 --><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"><!-- 国际化信息所在的文件名 --> <property name="basename" value="message"/></bean><!-- SessionLocaleResolver配置 --><bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean><mvc:interceptors><!-- 国际化操作拦截器,基于(Session、Cookie)必须配置 --><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/></mvc:interceptors>
2.页面
传递requestLocale=zh_CN参数,后台取到参数后做判断,设置java.util.Locale信息
<div><a href="/springmvc/global/page/login2.do?requestLocale=zh_CN">中文</a> | <a href="/springmvc/global/page/login2.do?requestLocale=en_US">英文</a></div><!-- 代码方式 -->${title }${loginname }${password }<!-- 标签方式 --><table><caption><spring:message code="title"/></caption><tr><th><spring:message code="loginname"/></th><td><input type="text" name="loginname"></td></tr><tr><th><spring:message code="password"/></th><td><input type="password" name="password"></td></tr></table>
3.Controller
@RequestMapping(value = "/page/login2", method = RequestMethod.GET)public String login2(HttpServletRequest request, Model model, @RequestParam String requestLocale) throws Exception {if (requestLocale.equals("zh_CN")) {Locale locale = new Locale(Locale.SIMPLIFIED_CHINESE.getLanguage(), Locale.SIMPLIFIED_CHINESE.getCountry());request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);} else if (requestLocale.equals("en_US")) {Locale locale = new Locale(Locale.US.getLanguage(), Locale.US.getCountry());request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);} else {// 当前线程或者系统默认国际化request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, LocaleContextHolder.getLocale());}// 从代码获取国际化信息 RequestContext requestContext = new RequestContext(request); model.addAttribute("title", requestContext.getMessage("title")); model.addAttribute("loginname", requestContext.getMessage("loginname")); model.addAttribute("password", requestContext.getMessage("password"));return "ilogin2";}
4.资源文件
资源文件同 基于浏览器的国际化文件
三.基于Cookie的国际化
CookieLocaleResolver不是默认的语言区域解析器,需要进行配置。
1.spring mvc配置文件
<!-- 国际化资源 --><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"><!-- 国际化信息所在的文件名 --><property name="basename" value="message"/></bean><!-- CookieLocaleResolver配置 --><bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"></bean><mvc:interceptors><!-- 国际化操作拦截器,基于(Session、Cookie)必须配置 --><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/></mvc:interceptors>
2.页面
页面同上,改一下就行
3.Controller
根据提交的requestLocale参数值,创建CookieLocaleResolver对象,调用setLocale方法将语言环境设置在Cookie中
@RequestMapping(value = "/page/login3", method = RequestMethod.GET)public String login3(HttpServletRequest request, HttpServletResponse response, Model model, String requestLocale) throws Exception {if (requestLocale != null) {if (requestLocale.equals("zh_CN")) {Locale locale = new Locale(Locale.SIMPLIFIED_CHINESE.getLanguage(), Locale.SIMPLIFIED_CHINESE.getCountry());(new CookieLocaleResolver()).setLocale(request, response, locale);} else if (requestLocale.equals("en_US")) {Locale locale = new Locale(Locale.US.getLanguage(), Locale.US.getCountry());(new CookieLocaleResolver()).setLocale(request, response, locale);} else {// 当前线程或者系统默认国际化(new CookieLocaleResolver()).setLocale(request, response, LocaleContextHolder.getLocale());}}// 从后台代码获取国际化信息 RequestContext requestContext = new RequestContext(request); model.addAttribute("title", requestContext.getMessage("title")); model.addAttribute("loginname", requestContext.getMessage("loginname")); model.addAttribute("password", requestContext.getMessage("password"));return "login3";}
4.测试
查看浏览器的NetWork(谷歌浏览器),可以看到请求头、响应头中cookie信息:阅读全文
0 0
- SpringMVC国际化
- SpringMVC国际化
- SpringMVC 国际化
- SpringMVC国际化
- SpringMVC 国际化
- SpringMVC-国际化
- springmvc 国际化
- SpringMVC国际化
- springmvc国际化
- 【SpringMVC】【国际化】
- SpringMVC国际化
- SpringMVC国际化
- SpringMVC国际化
- SpringMVC国际化
- SpringMvc国际化
- SpringMVC 国际化
- springmvc国际化
- SpringMVC国际化
- 第十三周 项目一验证算法 4.验证平衡二叉树相关算法
- 信息摘要算法的功能
- torque配置
- Ubuntu系统用户忘记密码怎么办?
- matlab2015a连接mysql数据库
- SpringMVC国际化
- Unity 项目与iOS项目 合并 嵌入 交互 传值
- 如何让同一服务,ip域名session共享。
- C++STL--map和set词频统计和单词转换
- spring-boot+JPA+Thymeleaf动态生成select下拉选
- 行业资深人士预测:2018年新能源汽车技术发展趋势---凯利讯半导体
- 当我们讨论软降工程的时候在讨论什么
- 内网穿透一
- 二叉树节点间的最大距离问题