Spring MVC与easyui国际化
1.建立资源文件
在webapp下建立文件夹language,在其中再添加file,命名分别为language.properties,language_en.properties,language_zh_CN.properties。其中language.properties为默认资源文件。
在其中添加内容,格式如下:
language.properties
welcome=Welcome
language_en.properties
welcome=Welcome
language_zh_CN.properties
welcome=\u6b22\u8fce
其中welcome为key,在jsp中调用使用的就是这个,汉语的需要使用unicode编码(在eclipse的properties文件中输入汉语会自动转换成unicode。\u6b22\u8fce-欢迎)
2.配置springMVC
在demo-servlet.xml中添加如下
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- Saves a locale change using a session-->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<!-- 国际化文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/language/language" />
<property name="defaultEncoding" value="UTF-8"/>
</bean>
其中<property name="basename" value="/language/language" />value即为资源文件所在,不需要后缀名.properties。
3.调用国际化
3.1 在web中调用国际化
在jsp文件头添加
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>
在jsp HTML显示内容处将内容更改,如
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="plain:true">
Welcome
</a>
更改为
<a href="javascript:void(0)" class="easyui-linkbutton" data-options="plain:true">
<spring:message code="welcome"/>
</a>
或
<input type="text" value="welcome" />
更改为
<input type="text" value='<spring:message code="welcome"/>' />
3.2 在javascript中调用国际化
在jsp文件头中添加
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>
将
$.messager.alert('info');
更改为
$.messager.alert('<spring:message code="message.info"/>');
注意:1.<spring>标签不可以这样写"<spring:message code=\"message.info\"/>"这样会出错。
2.在_en文件中key的值不可以使用\或'符号。
3.3 在java中调用国际化
在controller中使用
if(!model.containsAttribute("contentModel")){
RequestContext requestContext = new RequestContext(request);
String welcome = requestContext.getMessage("welcome");
}
其中request为HttpServletRequest,model为Model。
4 解决乱码
4.1 中文输入乱码
完成了上面的步骤之后,会发现XCenter界面中输入汉语,点击确定,往数据库中写入汉语时,写入的是乱码。
解决办法如下:
在applicationContext.xml中的
<property name="url" value="${jdbc.url}"/>
更改为
<property name="url" value="${jdbc.url}?useUnicode=true&characterEncoding=UTF-8"/>
注意:不要在jdbc.properties中的jdbc.url=jdbc:mysql://localhost:3306/demo之后添加?useUnicode=true&characterEncoding=UTF-8,这样是不正确的。
4.2 部分界面显示中文乱码
接下来发现在大部分界面因为添加了这句
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
可以正常显示中文了,但是XCenter部分界面中文显示为???,经过检查发现是因为在controller中返回值为String,而且标记为@ResponseBody,查资料发现是因为Spring MVC中@ResponseBody默认编码是ISO-8859-1(其他的都是UTF-8,谁知道为什么同一个框架中这里要用另外一种编码)。
解决办法:
在
@RequestMapping(value = "welcome", method = RequestMethod.POST)
中添加produces = "application/json; charset=utf-8"
变成
@RequestMapping(value = "welcome", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
然后会发现在部分的tree中中文仍然显示为乱码,发现是因为返回值转换成JSON格式的原因。
解决办法:
tree的返回值格式化将
JSON.toJSONStringWithDateFormat(rs.getDefaultModel(), "yyyy-MM-dd HH:mm:ss");
更改为
JSON.toJSONString(rs.getDefaultModel());
5 中英文切换
5.1 资源文件的中英文切换
这个比较简单,使用如下代码就行
<a href="?locale=en" onclick="changeLanguage('en')">English</a>
<a href="?locale=zh" onclick="changeLanguage('zh_CN')">简体中文</a>
5.2 easyui框架的中英文切换
easyui中有些框架(如datagrid)有些内容是框架自带的,需要在<head>中加入
<script type="text/javascript" src="js/locale/easyui-lang-zh_CN.js"></script>
那如何切换中英文呢
首先不要在<head>中添加上面这句,然后在主界面<head>中加入如下js语句
<script type="text/javascript">
var language=window.navigator.language;
var userLanguage="${sessionScope['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE']}";
if(null != userLanguage&&userLanguage!=""){//not login
language = userLanguage;
}
$(function(){
var src = 'js/locale' + '/easyui-lang-'+language.replace("-","_")+'.js';// when login in China the language=zh-CN
$.getScript(src);
});
</script>
这是使用jquery加载js文件。
接下来将项目中需要替换的内容全部用步骤3中的方法替换就行了,这样国际化就完成了。
Spring MVC与easyui国际化的更多相关文章
- Spring MVC + Velocity实现国际化配置
国际化介绍 web开发中,国际化是需要考虑的一个问题,而且这个问题一般是越早敲定越好(不然等到系统大了,翻译是个问题).下面是结合实际项目(Spring MVC+Velocity)对实现国际化的一些总 ...
- spring MVC +freemarker + easyui 实现sql查询和执行小工具总结
项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...
- spring mvc综合easyui点击上面菜单栏中的菜单项问题
采用easyui的tree报错发生的背景后,会弹出一个窗口,有一个问题是,当你点击顶部 解决方案,如下面(运用easyui1.36): /home/cyz/workspace/hb_manager ...
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
(这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...
- Spring MVC(十六)--Spring MVC国际化实例
上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式.我的场景是这样的: 访问一个页面时,这个页面有个表格,对表头中的列名实现国际化. 第 ...
- [Spring MVC] - 从数据库读取MessageSource
Spring MVC中使用MessageSource默认是写在properties文件当中,以支持国际化. 但很多时候我们需要把数据写到数据库当中,而不是在properties文件当中,以方便日常维护 ...
- Spring MVC学习纲要
感慨一下 之前用过Spring MVC, MyBatis,但是很久不用之后发现很多知识点都荒废了,毕竟工作就是重复,重复再重复.没有啥新东西.所以还是找个时间把忘了的东西捡起来.万一搞了个大bug,然 ...
- 使用Spring MVC 实现 国际化
使用Spring MVC 实现 国际化 博客分类: Spring 1. 版本 Spring 3.1 2. 配置 LocaleResolver LocaleResolver 是指 ...
- spring mvc 国际化
spring mvc 国际化 使用CookieLocaleResolver实现国际化的步骤:1.注册 messageSource,localeResolver 两个bean2.调用localeReso ...
随机推荐
- 短小实用 渗透用的Python小脚本
渗透的很多时候,找到的工具并不适用,自己码代码才是王道,下面三个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小实用. 一.记录root密码小工具 root.py #!/usr/bin/py ...
- Python练习题 028:求3*3矩阵对角线数字之和
[Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得 ...
- 探索多线程使用同一个数据库connection的后果
在项目中看到有用到数据库的连接池,心里就思考着为什么需要数据库连接池,只用一个连接会造成什么影响?(只用一个connection)? 1 猜想:jdbc的事务是基于connection的,如果多线程 ...
- solr4.x配置IK2012FF智能分词+同义词配置
本文配置环境:solr4.6+ IK2012ff +tomcat7 在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口T ...
- entity framework 连接 oracle 发布后出现的问题(Unable to find the requested .Net Framework Data Provider)
用entity framework 搭建的一个windows 程序,在vs中用oracle 的ODT 工具连接oracle数据库,昨天发布后出现下面一个错误, System.ArgumentExcep ...
- DataContractJsonSerializer和JavaScriptSerializer内部实现差异
定义一个下面这样的类,此类有Serializable属性,并且有一个属性的定义没有使用自动属性来实现. [Serializable] public class Users { public int U ...
- unity中js脚本与c#脚本互相调用
unity中js脚本与c#脚本互相调用 test1.js function OnGUI() { if(GUI.Button(Rect(25,25,100,30),"JS Call CS& ...
- Redis入门(集合)
集合 Redis的集合是字符串的无序集合.在Redis您可以添加,删除和测试文件是否存在,在成员O(1)的时间复杂度. 例子 redis 127.0.0.1:6379> sadd tutoria ...
- javascript线程解释(setTimeout,setInterval你不知道的事)---转载
在工作中,可能我们经常遇到在有很多 setInterval 的页面, 再手动触发 setTimeout 的时候经常失败, 尤其是 jquery做动画的时候,一些渐入溅出的东西,很多东西都不被触发……, ...
- hdu 4745 动态规划
思路:特水的一个最长回文子序列动态规划.比赛时硬卡第一题,49WA后终于AC,可惜没时间做这题,结果成绩也就可想而知了.兔子跳一样权值的石头,并且一个正跳,一个反跳,这不就是个回文子序列吗?????! ...