SpringMVC的国际化操作(十)上

简介: SpringMVC的国际化操作(十)上

一. SpringMVC 的国际化


关于国际化的重要性,这里就不说了。


可以与 Struts2的国际化进行比较性学习。 可以参考老蝴蝶以前写的Struts2 系列文章: Struts2实现国际化操作及中英文切换(九)


springmvc 实现国际化有两种方式:


1 . 在视图页面进行国际化, 需要使用 springmvc提供的标签库


2 . 在控制层实现国际化,需要使用 org.springframework.web.servlet.support.RequestContext 类 中的 getMessage() 方法。


springmvc 的国际化有三种表现形式


1 . 单个页面的国际化


2 . Session 域的国际化


3 . Cookie 域的国际化


其中, 单个页面的国际化 是读取页面的 浏览器 前端请求头的 accept-language 属性。 与浏览器的语言有关。


所使用的类是 : org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver,是默认的,也是最容易使用的,不需要设置。


Session 域的国际化, 所使用的类是: org.springframework.web.servlet.i18n.SessionLocaleResolver


Cookie 域的国际化,所使用的类是: org.springframework.web.servlet.i18n.CookieLocaleResolver


其中,Resolver 是解析器的意思。


先提供一下国际化的资源文件, 为login.properties(默认的), login_en_US.properties login_zh_CN.properties 文件。


放置在源文件夹 i18n 里面。


login.properties (默认是中文, I am china)


login.name=\u7528\u6237\u540D 
login.age=\u5E74\u9F84
login.description=\u63CF\u8FF0
login.submit=\u767B\u5F55
login.welcome=\u6B22\u8FCE{0}\u8BBF\u95EE


login_en_US.properites 美国的。


login.name=username
login.age=age
login.description=description
login.submit=submit
login.welcome=welcome to{0}


login_zh_CN.properties 中国的


login.name=\u7528\u6237\u540D 
login.age=\u5E74\u9F84
login.description=\u63CF\u8FF0
login.submit=\u767B\u5F55
login.welcome=\u6B22\u8FCE{0}\u8BBF\u95EE


放置目录为源文件下面。


微信图片_20211228211840.png


二. AcceptHeaderLocaleResolver 实现国际化


二.一 创建 国际化资源文件


如上面的 三个资源文件。 文件名为 login


二.二 springmvc.xml 配置文件中,配置国际化ResourceBundleMessageSource 的Bean


<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
      <value>login</value>
      <!-- 可依次写多个   <value>success</value>-->
    </property>
  </bean>


二.三 配置前端代码 login.jsp


1 .先引入 springmvc的标签库


<!-- 引入关于国际化的标签 -->
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>


2 . 前端页面 的标签显示 国际化


未国际化之间, 代码是这样:


  <h2>两个蝴蝶飞,国际化的使用</h2>
  <form:form commandName="user" action="login.action" method="post">
    <form:label path="name">姓名:</form:label>
    <form:input path="name"/><br/>
    <form:label path="age">年龄:</form:label>
    <form:input path="age"/><br/>
    <form:label path="description">描述:</form:label>
    <form:textarea path="description"/><br/>
    <form:button>提交</form:button>
  </form:form>


要国际化了,代码就变成了 这样:


<h2>两个蝴蝶飞,国际化的使用</h2> <!--这个标题,老蝴蝶就不国际化了-->
<form:form commandName="user" action="login.action" method="post">
    <form:label path="name"><spring:message code="login.name"></spring:message>:</form:label>
    <form:input path="name"/><br/>
    <form:label path="age"><spring:message code="login.age"></spring:message>:</form:label>
    <form:input path="age"/><br/>
    <form:label path="description"><spring:message code="login.description"></spring:message>:</form:label>
    <form:textarea path="description"/><br/>
    <form:button><spring:message code="login.submit"></spring:message></form:button>
  </form:form>


用了springmvc 标签的 spring:message 标签 里面的 code 属性。


spring:message 里面的常用属性有:


微信图片_20211228212637.png



二.四 后端接收


//转到登录的页面
  @RequestMapping(value="toLogin")
  public String toLogin(Model model){
    model.addAttribute("user",new User());
    return "user/login";
  }
  //绑定到user对象。
  @RequestMapping(value="login") 
  public String login(@Validated User user,HttpServletRequest request,Model model){
    System.out.println("接收值:"+user.toString());
    RequestContext requestContext=new RequestContext(request);
    // getMessage 方法中的 key 是国际化 .properties 文件中的key
    String welcome=requestContext.getMessage("login.welcome");
    System.out.println("输出名称值:"+welcome);
    //进行 MessageFormat进行填充 占位符
    model.addAttribute("message",MessageFormat.format(welcome,user.getName()));
    model.addAttribute("user",user);
    return "user/list";
  }


二.五 list.jsp 页面的展示


<body>
<h4>前端展示后端的国际化,直接用 $  {} 从model中取出值</h4>
${message}  <br>
<h4>前端取出后端的值,用arguments 来接收参数</h4>
<spring:message code="login.welcome" arguments="${requestScope.user.name}"></spring:message>
</body>


注意,arguments 的用法。


二.六 重启服务器,进行测试


前端输入:


微信图片_20211228212847.png


控制台打印:


微信图片_20211228212939.png


数据展示:


微信图片_20211228213054.png


二.七 切换浏览器语言,进行国际化验证


以Firebox 浏览器 为例。


右侧菜单栏, 选择选项, 在常规的选项卡里面,选择语言 为英语 美国, 如果没有该语言,可以先进行下载。 下载成功后,选择英语 美国,重启服务器。 然后输入访问路径,查看是否国际化了。


微信图片_20211228213135.png


微信图片_20211228213205.png


微信图片_20211228213228.png


前台显示确实国际化了,并输入值:


微信图片_20211228213327.png


控制台打印:


微信图片_20211228213357.png


数据展示:


微信图片_20211228213431.png


通过accept-language 属性进行国际化是正确的。


二.八 springmvc.xml 配置国际化 ResourceBundleMessageSource 的Bean 完全配置。


除了 二.二 的配置之外,还可以进行完全的配置。


<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
      <value>login</value>
      <!-- 可依次写多个   <value>success</value>-->
    </property>
  </bean>
  <!-- 配置国际化的拦截器 -->
  <mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
  </mvc:interceptors>
  <!-- 配置 AcceptHeaderLocaleResolver 国际化bean  localeResolver 这个值不能改变-->
  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"></bean>


相关文章
|
11月前
|
XML 前端开发 Java
SpringMVC中资源国际化使用实践
SpringMVC中资源国际化使用实践
118 0
|
Java
SpringMVC-国际化
SpringMVC-国际化
57 0
|
Java Spring
springmvc-国际化&中英文切换&文件上传&下载
springmvc-国际化&中英文切换&文件上传&下载
|
编解码 前端开发 Java
springMVC--数据验证以及国际化
springMVC--数据验证以及国际化
126 0
|
前端开发 Java 应用服务中间件
Spring MVC-08循序渐进之国际化(基于Session-SessionLocaleResolver)
Spring MVC-08循序渐进之国际化(基于Session-SessionLocaleResolver)
67 0
|
前端开发 IDE Java
Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
159 0
|
前端开发 Java 数据库连接
SpringMVC的数据验证和JSR 303国际化显示(十一)下
SpringMVC的数据验证和JSR 303国际化显示(十一)下
377 0
SpringMVC的数据验证和JSR 303国际化显示(十一)下
|
前端开发 Java 数据库连接
SpringMVC的数据验证和JSR 303国际化显示(十一)中
SpringMVC的数据验证和JSR 303国际化显示(十一)中
213 0
SpringMVC的数据验证和JSR 303国际化显示(十一)中
|
前端开发 JavaScript Java
SpringMVC的数据验证和JSR 303国际化显示(十一)上
SpringMVC的数据验证和JSR 303国际化显示(十一)上
222 0
SpringMVC的数据验证和JSR 303国际化显示(十一)上
|
存储 前端开发
SpringMVC的国际化操作(十)下
SpringMVC的国际化操作(十)下
253 0
SpringMVC的国际化操作(十)下