下面是基于session的,springMVC国际花的一个例子:    

需求是

输入url:展示中文界面

http://localhost:8080/MySSM/user?lang=zh

输入url:  展示英文界面

http://localhost:8080/MySSM/user?lang=en

下面是我demo项目的例子使用:

1.工程结构:

2.springMVC配置文件中 国际化相关的配置:

    <!-- 存储区域设置信息
SessionLocaleResolver类通过一个预定义会话名将区域化信息存储在会话中。
-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /> <!-- 国际化资源文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 -->
<property name="useCodeAsDefaultMessage" value="true" />
</bean> <mvc:interceptors>
<!-- 该拦截器通过名为”lang”的参数来拦截HTTP请求,使其重新设置页面的区域化信息 -->
<!-- <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> -->
<bean class="com.cy.interceptor.LanguageInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>

注意我重新使用了自己的拦截器:com.cy.interceptor.LanguageInterceptor

因为原来的拦截器org.springframework.web.servlet.i18n.LocaleChangeInterceptor,浏览器必须要输入lang=en_US,lang=zh_CN,才能改变语言。但是觉得输入这么多麻烦,因为一般就认为zh中文,en英文了。

3.语言LanguageInterceptor.java:

我只是把LocaleChangeInterceptor源代码拷贝了一部分过来;做些修改,主要是:

localeResolver.setLocale(request, response, newLocale)设置语言了;

package com.cy.interceptor;

import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.support.RequestContextUtils; /**
* 语言拦截器
* @author CY
*
*/
public class LanguageInterceptor extends HandlerInterceptorAdapter{ /**
* Default name of the locale specification parameter: "locale".
*/
public static final String DEFAULT_PARAM_NAME = "locale";
private String paramName = DEFAULT_PARAM_NAME; public void setParamName(String paramName) {
this.paramName = paramName;
}
public String getParamName() {
return this.paramName;
} @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Locale newLocale = getLocale(request.getParameter(getParamName()));
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if (localeResolver == null) {
throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?");
} localeResolver.setLocale(request, response, newLocale); return true;
} //根据language 获取Locale
public static Locale getLocale(String language){
Locale locale = new Locale("zh", "CN");
if(language!=null && language.equals("en")){
locale = new Locale("en", "US");
} return locale;
} }

4.如果想在controller中获取messages配置文件中的值怎么做呢?

下面是一部分代码:

import org.springframework.web.servlet.support.RequestContext;
import org.springframework.web.servlet.support.RequestContextUtils;
import java.util.ResourceBundle; @Controller
public class UserController {
private static Logger logger = Logger.getLogger(UserController.class); @Autowired
private UserService userService; /**
* 从国际化资源配置文件中根据key获取value 方法一
* @param request
* @param key
* @return
*/
public static String getMessage(HttpServletRequest request, String key){
Locale currentLocale = RequestContextUtils.getLocale(request);
String lang = currentLocale.getLanguage();
ResourceBundle bundle = ResourceBundle.getBundle("messages_"+lang, currentLocale);
return bundle.getString(key);
}
/**
* 从国际化资源配置文件中根据key获取value 方法二
* @param request
* @param key
* @return
*/
public static String getMessage2(HttpServletRequest request, String key){
RequestContext requestContext = new RequestContext(request);
String value = requestContext.getMessage(key);
return value;
} @RequestMapping("/user")
public ModelAndView getUsers(HttpServletRequest request){
List<VoUser> userList = userService.getUsers(); ModelAndView mv = new ModelAndView(); //从message中获取文字
//String showUserInfo = getMessage(request, "showUserInfo");
String showUserInfo = getMessage2(request, "showUserInfo"); mv.addObject("showUserInfo", showUserInfo);
mv.addObject("userList", userList);
mv.setViewName("user");
return mv;
} }

5.jsp中使用spring:message code:主要是:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<spring:message code="userName"/>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="resources/bootstrap/bootstrap.min.css">
<title><spring:message code="userManage"/></title>
<style type="text/css">
.container{
margin-top: 30px;
}
.imgclass{
height: 100px;
}
</style>
</head>
<body> <div class="container">
<p class="text-center bg-success">${showUserInfo}</p>
<div class="form-horizontal">
<c:forEach var="user" items="${userList }">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label"><spring:message code="userName"/></label>
<div class="col-sm-10">
<input class="form-control" placeholder="Email" value="${user.name }">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label"><spring:message code="age"/></label>
<div class="col-sm-10">
<input class="form-control" placeholder="Password" value="${user.age }">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label"><spring:message code="photoName"/></label>
<div class="col-sm-10">
<input class="form-control" value="${user.photoName }">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label"><spring:message code="photo"/></label>
<div class="col-sm-10">
<img class="imgclass" src="getImg?username=${user.name }&photoName=${user.photoName}"/>
</div>
</div>
</c:forEach>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<a href="toAddUser" class="btn btn-default"><spring:message code="addUser"/></a>
</div>
</div>
</div> </div>
</body>
<script src="resources/js/jquery.min.js"></script>
<script src="resources/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript">
$(function(){ });
</script>
</html>

6.messages_zh.properties和messages_en.properties配置:

userManage=userManagement
userName=username
age=age
photoName=photo name
photo=photo
addUser=add user
showUserInfo=this is display user information
userManage=\u7528\u6237\u7BA1\u7406
userName=\u59D3\u540D
age=\u5E74\u9F84
photoName=\u7167\u7247\u540D\u79F0
photo=\u7167\u7247
addUser=\u589E\u52A0\u7528\u6237
showUserInfo=\u8FD9\u91CC\u662F\u5C55\u73B0\u7528\u6237\u4FE1\u606F

效果:

-------------

springMVC国际化配置和使用的更多相关文章

  1. JAVA记录-SpringMVC国际化配置

    1.搭建SpringMVC框架,不过多阐述 2.spring-mvc.xml加入以下配置: <!-- 国际化资源配置,资源文件绑定器--> <bean id="messag ...

  2. SpringMVC国际化配置

    一.什么是国际化: 国际化是设计软件应用的过程中应用被使用与不同语言和地区 国际化通常采用多属性文件的方式解决,每个属性文件保存一种语言的文字信息,    不同语言的用户看到的是不同的内容 二.spr ...

  3. springmvc国际化 基于请求的国际化配置

    springmvc国际化 基于请求的国际化配置 基于请求的国际化配置是指,在当前请求内,国际化配置生效,否则自动以浏览器为主. 项目结构图: 说明:properties文件中为国际化资源文件.格式相关 ...

  4. springmvc国际化 基于浏览器语言的国际化配置

    当前标签: springmvc   springmvc国际化 基于浏览器语言的国际化配置 苏若年 2013-10-09 13:03 阅读:305 评论:0   SpringMVC中应用Ajax异步通讯 ...

  5. 基于session 的springMvc 国际化

    项目中采用springMvc的框架,需要动态切换语言,找了一些资料,最后决定采用基于session的动态切换,实现动态切换中文,英文,韩文,其实就是把中文翻译成其他语言显示 springMvc国际化包 ...

  6. SpringBoot 国际化配置,SpringBoot Locale 国际化

    SpringBoot 国际化配置,SpringBoot Locale 国际化 ================================ ©Copyright 蕃薯耀 2018年3月27日 ht ...

  7. Spring MVC + Velocity实现国际化配置

    国际化介绍 web开发中,国际化是需要考虑的一个问题,而且这个问题一般是越早敲定越好(不然等到系统大了,翻译是个问题).下面是结合实际项目(Spring MVC+Velocity)对实现国际化的一些总 ...

  8. SpringMVC 国际化问题

    1.首先在src文件下添加3个properties文件 a.message.properties message.username=UserName message.password=Password ...

  9. SpringBoot源码学习系列之SpringMVC自动配置

    目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. ...

随机推荐

  1. POJ 1062 昂贵的聘礼(最短路)题解

    题意:中文题意不解释... 思路:交换物品使得费用最小,很明显的最短路,边的权值就是优惠的价格,可以直接用Dijkstra解决.但是题目中要求最短路路径中任意两个等级不能超过m,我们不能在连最短路的时 ...

  2. 试着用React写项目-利用Webpack搭环境

    转载请注明出处:王亟亟的大牛之路 最近都蛋疼,然后前些天开了个会就是关于"不加班就得死"的死命令,作为抵制加班的先头兵,我感觉我时日无多是时候加快武装自己的速度不然吃土都不配了,就 ...

  3. java学习之浅谈多线程4--SwingWorker

    GUI事件处理和绘图代码在一个被称为事件分发线程的特殊线程中执行.如果一个事件需要很长的时间处理,线程就不能顾及到队列中的其他任务.为了解决这个问题,可以运行费时的任务来处理单独线程中的事件.Swin ...

  4. UOJ #185【ZJOI2016】 小星星

    题目链接:小星星 首先有个暴力很好想.令\(f_{i,j,S}\)表示把\(i\)这棵子树对应到原图中的\(S\)集合,\(i\)号点对应到了\(j\)号点的方案数.这玩意儿复杂度是\(O(3^nn^ ...

  5. 获取和设置HTML标签中的数据

  6. Java网络编程和NIO详解6:Linux epoll实现原理详解

    Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...

  7. C++的const类成员函数

    转自:http://blog.csdn.net/lihao21/article/details/8634876 我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编 ...

  8. HDU-5492 Find a path (枚举+DP)

    Problem Description Frog fell into a maze. This maze is a rectangle containing N rows and M columns. ...

  9. springboot 用mybatis-generator自动生成bean和dao

    1.在pom.xml里添加maven插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifac ...

  10. ossim中Spot5模型bug修复

    ossim中Spot5模型在读取像素视线角时存在一个严重的bug,导致某些点的视线角提取错误. 下面是ossim中getPixelLookAngleX 函数的代码: ossimSpotDimapSup ...