Spring MVC(十六)--Spring MVC国际化实例
上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式。我的场景是这样的:
访问一个页面时,这个页面有个表格,对表头中的列名实现国际化。
第一步:完成国际化配置
主要是配置用来定位资源文件的消息源和用来解析国际化的国际化解析器,都要配置在Spring的配置文件中
<!--Spring MVC实现国际化 -->
<!-- 第一步:配置消息源MessageSource用来加载对应的国际化属性文件:bean的ID名称只能是messageSource -->
<!--第一种方式:配置ResourceBundleMessageSource:这种方式只能把资源文件放到指定的路径下,不能热加载,需要重启系统才能加载它 -->
<!-- <bean id="messageResource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="basename" value="msg" />
</bean> --> <!--第二种方式:配置ReloadableResourceBundleMessageSource:这种方式只能把资源文件放到任何位置,不需要重启就能加载文件,并且可以设置刷新时间 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 默认编码方式 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 资源文件的前缀:多了一个classpath,如果资源文件在一个文件夹下,还要加上文件夹路径,否则报错 -->
<property name="basename" value="classpath:message/msg" />
<!-- 刷新时间 -->
<property name="cacheSeconds" value="3600" />
</bean> <!-- 第二步:配置国际化解析器,有cookie和session两种方式,一般用session比较保险 -->
<!--第一种:配置cookie国际化解析器 -->
<!-- <bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
cookie变量的名称
<property name="cookieName" value="lang" />
cookie超时时间
<property name="cookieMaxAge" value="20" />
默认使用简体中文
<property name="defaultLocale" value="zh_CN" />
</bean> --> <!--第一种:配置session国际化解析器 -->
<bean id="localResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
因为session有其自身定义的超时时间和编码,所以此处不需要设置
<property name="defaultLocale" value="zh_CN" />
</bean>
上面代码中,我配置了两种消息源和两种国际化解析器,其中注释掉的是不会热加载的消息源和cookie国际化解析器,因为它们都有一些缺陷,上一篇中已经介绍过。
第二步:配置拦截器
拦截器是在Spring MVC的配置文件中配置:
<!-- 配置国际化拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
</mvc:interceptor>
</mvc:interceptors>
第三步:创建资源文件
我将这两个文件都放在src/main/resource下的message文件夹下,所以上面配置消息源时basename的值为classpath:message/msg,这一点需要注意。
1⃣️中文资源文件msg_zh_CN.properties
welcome=\u4F60\u597D \u4E16\u754C\uFF01 param_param_id=\u53C2\u6570ID
param_param_name=\u53C2\u6570\u540D\u79F0
param_param_desc=\u53C2\u6570\u63CF\u8FF0
param_param_time=\u5165\u5E93\u65F6\u95F4
中文使用的是unicode编码,这个不需要管,显示时不会乱码。
2⃣️英文资源文件msg_en_US.properties
welcome=hello world!
param_param_id=Param ID
param_param_name=Param Name
param_param_desc=Param Describer
param_param_time=Save Time
第四步:创建页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="mvc" uri="http://www.springframework.org/tags/form"%>
<!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">
<%
String root = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ root + "/";
%>
<script type="text/javascript"
src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
<script type="text/javascript" src="<%=basePath%>js/param.js"></script>
<link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
<title>参数列表</title>
</head>
<body>
<div>
<table>
<thead>
<tr>
<td><spring:message code="param_param_id" /></td>
<td><spring:message code="param_param_name" /></td>
<td><spring:message code="param_param_desc" /></td>
<td><spring:message code="param_param_time" /></td>
</tr>
</thead>
<tbody>
<c:forEach var="paramItem" items="${paramList }">
<tr>
<td>${paramItem.paramId}</td>
<td>${paramItem.paramName }</td>
<td>${paramItem.paramDesc }</td>
<td>${paramItem.pramTime }</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</body>
</html>
上面代码中加粗的红色部分是重点内容:
- 首先要导入spring标签库,因为jsp使用的是spring mvc国际化;
- 使用<spring:message>标签获取国际化文件中的值;
第五步:创建控制器
/*
* 测试Spring MVC中传递参数的方式
*/ @Controller
@RequestMapping("/param")
public class ParamController { @Autowired
@Qualifier("paramService")
ParamService paramService = null; @RequestMapping(value = "index", method = RequestMethod.GET)
public ModelAndView getParam() {
ModelAndView mView = new ModelAndView();
List<Param> paramList = paramService.getAllParams();
mView.addObject("paramList", paramList);
mView.setViewName("param/indexParam");
return mView;
}
}
控制器中主要就是获取列表并渲染到indexParam视图中,这样在页面就能获取到列表数据了,下面进行测试;
第六步:测试
在浏览器输入URL:http://127.0.0.1:8080/mvc/param/index,结果如下:

因为模式是简体中文,所以不需要输入language参数就能获取资源文件内容实现国际化,下面将URL改为这样
http://127.0.0.1:8080/mvc/param/index?language=en_US,即加上参数language,并定义为英文,结果如下:

表格表头的列名变成英文,说明国际化成功。
以上就是完整的实例。
Spring MVC(十六)--Spring MVC国际化实例的更多相关文章
- Spring学习(十六)----- Spring AOP实例(Pointcut(切点),Advisor)
在上一个Spring AOP通知的例子,一个类的整个方法被自动拦截.但在大多数情况下,可能只需要一种方式来拦截一个或两个方法,这就是为什么引入'切入点'的原因.它允许你通过它的方法名来拦截方法.另外, ...
- spring学习 十六 spring加载属性文件
第一步:创建一个properties文件,以数据库链接作为实例db.properties jdbc.url=jdbc:mysql://192.168.153.128:3306/mybaties?cha ...
- Spring Boot(十六):使用Jenkins部署Spring Boot
Spring Boot(十六):使用Jenkins部署Spring Boot jenkins是devops神器,介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署 ...
- Spring(十六)之MVC框架
MVC 框架教程 Spring web MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业 ...
- Spring学习十四----------Spring AOP实例
© 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
- Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis
在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...
- spring boot(十五)spring boot+thymeleaf+jpa增删改查示例
快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency> <groupId>org.springframework.b ...
- spring cloud学习(六)Spring Cloud Config
Spring Cloud Config 参考个人项目 参考个人项目 : (希望大家能给个star~) https://github.com/FunriLy/springcloud-study/tree ...
- (转)Spring Boot(十六):使用 Jenkins 部署 Spring Boot
http://www.ityouknow.com/springboot/2017/11/11/spring-boot-jenkins.html enkins 是 Devops 神器,本篇文章介绍如何安 ...
随机推荐
- Shell中整数自增的几种方式
Shell中整数自增的几种方式 2016年08月27日 19:07:40 杰瑞26 阅读数:2816 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- JAVA javah
{ 用法: javah [options] <classes>其中, [options] 包括: -o <file> 输出文件 (只能使用 - ...
- iOS13适配/黑暗模式的适配/KVC访问私有属性/模态弹窗ViewController 默认样式改变 /LaunchImage即将废弃/蓝牙的权限申请/推送Device Token适配/UIKit 控件变化/StatusBar新增样式
目录 1. KVC访问私有属性 2. 模态弹窗ViewController 默认样式改变 3. 黑暗模式的适配 4. LaunchImage即将废弃 5. 新增一直使用蓝牙的权限申请 6. Sign ...
- Vue.js - 路由 vue-router 的使用详解2(参数传递)
一.使用冒号(:)的形式传递参数 1,路由列表的参数设置 (1)路由列表的 path 是可以带参数的,我们在路由配置文件(router/index.js)里以冒号的形式设置参数. (2)下面样例代码中 ...
- 极限学习机(Extreme Learning Machine)学习笔记
最近研究上了这个一个东西--极限学习机. 在很多问题中,我大多会碰到两个问题,一个是分类,另一个就是回归.简单来说,分类是给一串数打个标签,回归是把一串数变为一个数. 在这里我们需要处理的数据一般维度 ...
- 干货:Java正确获取客户端真实IP方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- Django开发学习BUG记录--RemovedInDjango19Warning:Model class apps.user.models.User doesn't declare an explicit app_label
报错信息: /home/python/PycharmProjects/dailyfresh/apps/user/models.py:8: RemovedInDjango19Warning: Model ...
- POJ1149_PIGS(网络流/EK)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15721 Accepted: 7021 Description ...
- SpringCloud学习笔记《---06 Config 分布式配置中心---》基础篇
- Ubantu18.04安装WPS
1.去WPS官网选在合适的版本下载安装包2.在官网下载字体包3.分别右键点击安装包,选择第一项“用软件安装打开”,进行安装即可.4.此时启动应用,应该会提示系统缺失字体.5.解决字体缺失(转)