springmvc笔记-5-国际化
来源:互联网 发布:第一版主新域名 编辑:程序博客网 时间:2024/06/16 21:13
1.messageSource接口
2.localeResolver接口
3.message标签
4.AcceptHeaderLocaleResolver国际化
5.SessionLocaleResolver国际化
6.CookieLocaleResolver国际化
springmvc国际化步骤
1.给系统加载国际化资源文件
2.输出国际化
方式一:在视图页面上输出国际化消息,需要使用springmvc标签库
方式二:在Controller的处理方法中输出国际化消息,需要使用org.springframework.web.servlet.support.RequestContext的getMessage()方法来完成
为用户选择语言区域时,最常用的方法是通过读取用户浏览器的accept-language标题值,accept-language提供了关于用户浏览器语言的信息。选择语言区域的其他方法还包括读取HttpSession或则Cookie
springmvc提供了一个语言区域解析器接口LocaleResolver,该接口的常用实现类都在org.springframework.web.servlet.i18n下面包括:
AcceptHeaderLocaleResolver(默认,可以不用显示配置)
SessionLocaleResolver(需要显示配置)
CookieLocaleResolver(需要显示配置)
message标签:
需要在jsp页面添加
<%@taglib prefix=”spring” uri=”http://www.springframework.org/tags” %>
案例一:
配置两个资源文件
文件名为:[springmvc配置文件中的value值]_zh_CN.properties
eg:
fkit_en_US.properties
fkit_zh_CN.properties
fkit_en_US.properties内容为:
name= Login name:password = Password:submit = Submitwelcome = Welcom {0} access fkittitle = Login Pageusername = administrator
fkit_zh_CN.properties内容为
name= \u767B\u5F55\u540D:password = \u5BC6\u7801:submit = \u63D0\u4EA4welcome = \u6B22\u8FCE {0} springmvc testtitle = \u767B\u5F55\u9875\u9762username = \u7BA1\u7406\u5458
在springmvc的配置文件中配置
下面的<list>中的value值与上面资源文件名称相对应
<!-- 自动注册组件 --> <mvc:annotation-driven /> <!-- 使用默认的Servlet来响应静态文件 --> <!-- <mvc:default-servlet-handler /> --> <!-- 扫包 ,将所有spring的注解注册成bean --> <context:component-scan base-package="com.**"></context:component-scan> <!-- 配置annotation类型的处理映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> <!-- 配置annotation类型处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 在index.jsp页面配置静态资源文件的路径时 可以使用${basePath} --> <bean id="bresource" class="com.core.TmBasePathExposer" init-method="init"></bean> <!-- 利用messageSource告诉springmvc国际化的属性文件保存在哪里 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- basenames属性来指定国际化的属性文件名称 --> <property name="basenames"> <list> <value>message</value> <value>fkit</value> </list> </property> </bean> <mvc:interceptors> <!-- 国际化操作拦截器 如果采用基于(Session/Cookie)则必需配置 --> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors> <!-- AcceptHeaderLocaleResolver 配置,因为AcceptHeaderLocaleResolver是默认语言区域解析器,不配置也可以 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" />
实体代码:
package com.entity;public class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
访问http://localhost:8080/springmvcNote1/internation/loginForm
进入loginForm方法转到login.jsp页面
@Controller@RequestMapping("internation")public class InternationalController { // http://localhost:8080/springmvcNote1/internation/loginForm @RequestMapping("loginForm") public String loginForm(Model model){ User user = new User(); model.addAttribute("user",user); return "Internationalization/login"; }
login.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %><%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>aaaa <!-- 使用message标签来输出国际化信息 --> <h3><spring:message code="title"/></h3> <form:form modelAttribute="user" method="post" action="login"> <table> <tr> <td><spring:message code="name"/></td> <td><form:input path="name"/></td> </tr> <tr> <td><spring:message code="password"/></td> <td><form:input path="password"/></td> </tr> <tr> <td><input type="submit" value="<spring:message code="submit"/>"/></td> </tr> </table> </form:form></body></html>
点击提交转到
@RequestMapping("login") public String test01(@ModelAttribute @Validated User user ,Model model,HttpServletRequest request){ if(user.getPassword()!=null && user.getName()!=null && user.getName().equals("caoxuekun") && user.getPassword().equals("123")){ System.out.println("****************"); //从后台代码获取国际化信息username RequestContext requestContext = new RequestContext(request); String name = requestContext.getMessage("name"); //将获取的username信息设置到user对象,并设置到model中 user.setName(name); model.addAttribute("user",user); return "/Internationalization/success"; } return "Internationalization/error"; }
如果输入的用户名和密码分别为caoxuekun和123那么跳转到success.jsp页面,否则跳转到error.jsp页面
效果:
改变浏览器的语言(下面对应的是火狐)
SessionLocaleResolver国际化:
不是默认语言区域解析器,需要显示配置,springmvc会从HttpSession作用域中获取用户所设置的语言区域。
案例
springmv中的配置文件
<!-- 利用messageSource告诉springmvc国际化的属性文件保存在哪里 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- basenames属性来指定国际化的属性文件名称 --> <property name="basenames"> <list> <value>message</value> <value>fkit</value> </list> </property> </bean> <mvc:interceptors> <!-- 国际化操作拦截器 如果采用基于(Session/Cookie)则必需配置 --> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors> <!-- AcceptHeaderLocaleResolver 配置,因为AcceptHeaderLocaleResolver是默认语言区域解析器,不配置也可以 --> <!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" /> --> <!-- SessionLocaleResolver 配置 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
访问:localhost:8080/springmvcNote1/internation/sessionLogin
进入sessionLogin方法转到sessionLogin.jsp页面
@RequestMapping(value="/sessionLogin") public String sessionLogin( String request_locale, Model model, HttpServletRequest request){ System.out.println("request_locale = " + request_locale); if(request_locale != null){ // 设置中文环境 if(request_locale.equals("zh_CN")){ Locale locale = new Locale("zh", "CN"); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); } // 设置英文环境 else if(request_locale.equals("en_US")){ Locale locale = new Locale("en", "US"); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); } // 使用之前的语言环境 else { request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale()); } } User user = new User(); model.addAttribute("user",user); // 动态跳转页面 return "Internationalization/sessionLogin"; }
sessionLogin.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" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>测试基于SessionLocaleResolver的国际化</title></head><body><!-- 用户可以选择切换语言环境 --><a href="sessionLogin?request_locale=zh_CN">中文</a> | <a href="sessionLogin?request_locale=en_US">英文</a><br/><h3><spring:message code="title"/></h3><form:form modelAttribute="user" method="post" action="login" > <table> <tr> <td><spring:message code="name"/></td> <td><form:input path="name"/></td> </tr> <tr> <td><spring:message code="password"/></td> <td><form:input path="password"/></td> </tr> <tr> <td><input type="submit" value="<spring:message code="submit"/>"/></td> </tr> </table></form:form></body></html>
点击提交跳转到test01方法,如果登陆名和密码为caoxuekun和123
那么跳转到success.jsp否则error.jsp
@RequestMapping("login") public String test01(@ModelAttribute @Validated User user ,Model model,HttpServletRequest request){ if(user.getPassword()!=null && user.getName()!=null && user.getName().equals("caoxuekun") && user.getPassword().equals("123")){ //从后台代码获取国际化信息username RequestContext requestContext = new RequestContext(request); String name = requestContext.getMessage("name"); //将获取的username信息设置到user对象,并设置到model中 user.setName(name); model.addAttribute("user",user); return "/Internationalization/success"; } return "Internationalization/error"; }
success.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <spring:message code="welcome" arguments="${requestScope.user.name}"/></body></html>
实体类
package com.entity;public class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
CookieLocaleResolver国际化
案例
springmvc配置文件
<mvc:annotation-driven /> <!-- 使用默认的Servlet来响应静态文件 --> <!-- <mvc:default-servlet-handler /> --> <!-- 扫包 ,将所有spring的注解注册成bean --> <context:component-scan base-package="com.**"></context:component-scan> <!-- 配置annotation类型的处理映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> <!-- 配置annotation类型处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 在index.jsp页面配置静态资源文件的路径时 可以使用${basePath} --> <bean id="bresource" class="com.core.TmBasePathExposer" init-method="init"></bean> <!-- 利用messageSource告诉springmvc国际化的属性文件保存在哪里 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- basenames属性来指定国际化的属性文件名称 --> <property name="basenames"> <list> <value>message</value> <value>fkit</value> </list> </property> </bean> <mvc:interceptors> <!-- 国际化操作拦截器 如果采用基于(Session/Cookie)则必需配置 --> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors> <!-- AcceptHeaderLocaleResolver 配置,因为AcceptHeaderLocaleResolver是默认语言区域解析器,不配置也可以 --> <!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" /> --> <!-- SessionLocaleResolver 配置 --> <!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /> --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
访问:http://localhost:8080/springmvcNote1/internation/cookieLogin
进入cookieLogin方法,跳转到cookieLogin.jsp页面
@RequestMapping(value="cookieLogin") public String cookieLogin( String request_locale, Model model, HttpServletRequest request, HttpServletResponse response){ System.out.println("request_locale = " + request_locale); if(request_locale != null){ if(request_locale.equals("zh_CN")){ Locale locale = new Locale("zh", "CN"); (new CookieLocaleResolver()).setLocale (request, response, locale); } else if(request_locale.equals("en_US")){ Locale locale = new Locale("en", "US"); (new CookieLocaleResolver()).setLocale (request, response, locale); }else { (new CookieLocaleResolver()).setLocale (request, response, LocaleContextHolder.getLocale()); } } User user = new User(); model.addAttribute("user",user); // 动态跳转页面 return "Internationalization/cookieLogin"; }
cookieLogin.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" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>测试基于SessionLocaleResolver的国际化</title></head><body><!-- 用户可以选择切换语言环境 --><a href="cookieLogin?request_locale=zh_CN">中文</a> | <a href="cookieLogin?request_locale=en_US">英文</a><br/><h3><spring:message code="title"/></h3><form:form modelAttribute="user" method="post" action="login" > <table> <tr> <td><spring:message code="name"/></td> <td><form:input path="name"/></td> </tr> <tr> <td><spring:message code="password"/></td> <td><form:input path="password"/></td> </tr> <tr> <td><input type="submit" value="<spring:message code="submit"/>"/></td> </tr> </table></form:form></body></html>
提交跳转到test01方法,登陆成功进入success.jsp页面,否则进入error.jsp页面
@RequestMapping("login") public String test01(@ModelAttribute @Validated User user ,Model model,HttpServletRequest request){ if(user.getPassword()!=null && user.getName()!=null && user.getName().equals("caoxuekun") && user.getPassword().equals("123")){ //从后台代码获取国际化信息username RequestContext requestContext = new RequestContext(request); String name = requestContext.getMessage("name"); //将获取的username信息设置到user对象,并设置到model中 user.setName(name); model.addAttribute("user",user); return "/Internationalization/success"; } return "Internationalization/error"; }
- springmvc笔记-5-国际化
- SpringMVC国际化
- SpringMVC国际化
- SpringMVC 国际化
- SpringMVC国际化
- SpringMVC 国际化
- SpringMVC-国际化
- springmvc 国际化
- SpringMVC国际化
- springmvc国际化
- 【SpringMVC】【国际化】
- SpringMVC国际化
- SpringMVC国际化
- SpringMVC国际化
- SpringMVC国际化
- SpringMvc国际化
- SpringMVC 国际化
- springmvc国际化
- iTween基础之Rotate(旋转角度)
- Java多线程基础
- 初探Laravel
- 查看系统短信
- 语义分割--Efficient and Robust Deep Networks for Semantic Segmentation
- springmvc笔记-5-国际化
- EL表达式写三目运算
- POJ2566(77/600)
- Jenkins-持续集成平台
- 数理逻辑2 -- 量化理论7
- 在Android so文件的.init、.init_array上和JNI_OnLoad处下断点
- 什么!?几十行代码实现折线图!!!
- linux下实时查看tomcat运行日志
- Java并发ReadWriteLock接口