SpringMVC项目国际化(i18n)实现方法

  按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并不多,但偶尔用到也会比较费时间滴;-),不如驻足本帖片刻吧︿( ̄︶ ̄)︿

  额,嗯~,记得一开始从事软件开发时在一个很轻量级的项目中碰到了一个貌似叼炸天的需求,什么?国际化?没听说过,不知道怎么玩儿。。。,谷歌翻帖快一周,大神们的神贴也看了许久,可就是解决不了我的项目需求,怎么办,加大神Q骚扰之~~(@^_^@)~,在正式写此文前特别要感谢“Erola”,他的原贴:http://www.cnblogs.com/liukemng/p/3750117.html,请在看本博之前先膜拜下大神的博文吧(⊙ ▽ ⊙),由于大神已经将国际化的集中用法都讲清楚了,遂,在此我会着重讲下实际开发中我所碰到的一个问题~

  我们的需求其实很简单,就是客户为方便歪果仁使用他们的系统,在界面上设置两个用于语言切换的link(中文|EN),切换后当前页面功能保持不变(就是不跳转),需要的时候手动切换,默认基于语言和位置的国际化就直接pass了(切换浏览器语言位置以切换页面语言),当然也不能在每个视图解析时让每个controller都顺带切换语言逻辑,这样可行,但对写代码来说~太过冗余!

  遂,比较可行的办法是基于关键字请求的页面切换,憋了老久,容我先上图哈~,如图>>>just like this to that--->

  

  SpringMVC自身是支持(这里使用的是spring-3.2),不用单独写代码来 实现页面的语言切换,看似很靠谱,但~,请注意,由于这个项目是内网使用的不涉及到增删改,所以之前把页面都放在WEB-INF外部,就像这样:

(所有controller只做数据处理)导致的一个问题是点到其他页面后页面语言又被还原了!为这个问题翻帖搞了许久许久,一直不明白为什么,在这里我总结下:所有不经过controller视图解析的目标页面都不会应用指定的语言区域!!!,切记,这个很重要很重要。

  已看过以上至理名言后,解决的办法其实很简单,在每个目标页面对应的controller里面加上一个默认的页面跳转,这样:

这样,只要切换语言,就不会出现上面提到的问题,明白以上的问题所在,以下就按部就班的配置:

  首先,需要在web-context.xml里面将i18n的bean配置到拦截器内(只需看第二行),以便在每个视图解析的时候都能应用到国际化--->

     <mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
<bean class="com.hst.core.spring.HttpCacheInterceptor"/>
</mvc:interceptors>

  然~,在WEB-INF下面的resources内增加这两个文件:

这里是中英文切换,如果有其它语言,则每种语言都单独写一个properties语言配置文件,请注意文件的命名。

  再~,在jsp页面眉头声明spring的标签库:

  再~,将以前每个页面显示的中文文本的地方用spring的message标签替换:

别忘记 :每个标签内的code的值是前面properties中对应的key,回头看看properties的内容就明了~--->

  如此,就差最后一步,也是最简单的一步:界面添加link,一般只需要在主jsp里面添加就可以了,位置自定哈~,告诉你个小秘密,你只需要这样就OK (~ ̄▽ ̄)~

  OK~终于完成~,分享知识是快乐的,祝大家周末愉快玩儿得happyヾ(o◕∀◕)ノヾ

======小建议======

  properties文件里面的中文默认只显示成Unicode编码,如有大量的文本需要添加,建议使用properties editor插件,eclipse安装此插件请参考:http://www.cnblogs.com/panie2015/p/5637847.html

springMVC项目国际化(i18n)实现方法的更多相关文章

  1. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用

    log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n  ---internationalization  不就是i和n之间有18个字母... http://logging.a ...

  2. SpringMVC的国际化

    关于SpringMVC的国际化,http://www.cnblogs.com/liukemng/p/3750117.html这篇文章已经讲的很好了.它讲了有如下几种国际化方式 1:基于Http的hea ...

  3. angular项目国际化配置(ngx-translate)

    原文 https://www.jianshu.com/p/7d1da3098625 大纲 1.认识ngx-translate 2.ngx-translate的配置步骤 3.ngx-translate的 ...

  4. SpringBoot 快速支持国际化i18n

    学习目标 快速学会如何在工程中支持国际化语言. 快速查阅 专题阅读:<SpringBoot 布道系列> 源码下载:springboot-locale-i18n — Hey Man,Don' ...

  5. 零配置简单搭建SpringMVC 项目

    SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对Sp ...

  6. maven -- 学习笔记(四)实现在Eclipse用maven搭建springmvc项目(附构建步骤和详细实现代码)

    Learn from:http://www.cnblogs.com/fangjins/archive/2012/05/06/2485459.html,感谢楼主的分享,才有下面的这篇学习小结 一.环境准 ...

  7. 项目搭建系列之一:使用Maven搭建SpringMVC项目

    约定电脑都安装了eclipse,且已配置好Maven以及eclipse插件. 1.Eclipse 2.maven 3.Eclipse 需要安装maven插件.url:maven - http://do ...

  8. 国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  9. javaweb学习总结(三十一)——国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

随机推荐

  1. 微信小程序,前端大梦想(八)

    微信小程序之多媒体实例-播放器 播放音频和视频的功能也是小程序的特色,API也十分简单,本节我们一起来开发一个播放网络音乐的功能.API如下: 属性名 类型 默认值 说明 id String audi ...

  2. Common.Logging源码解析一

    Common.Logging是Apache下的一个开源日志接口组件,主要用于切换不同的日志库,因为当前流行的日志库有很多向log4j.log4net(log4j的.net版本)等等,所以为了能灵活的切 ...

  3. vue-cli webpack在node环境下安装使用

    第一步,需要下载并安装node.js以及他的npm组件: 第二步,用node -v;npm -v来测试node.js以及npm是否安装成功(建议用GIT命令行工具,因为GIT是linux系统),如果显 ...

  4. nginx反向代理cas-server之2:生成证书,centOS下使用openssl生成CA证书(根证书、server证书、client证书)

    前些天搭好了cas系统,这几天一致再搞nginx和cas的反向代理,一直不成功,但是走http还是测试通过的,最终确定是ssl认证证书这一块的问题,原本我在cas服务端里的tomcat已经配置了证书, ...

  5. debian安装dwm窗口管理器

    我安装debian版本是debian-8.8.0-i386-netinst最小安装 首先去官网下载源代码 http://git.suckless.org/dwm #安装x-window环境 $sudo ...

  6. STL的空间配置器std_alloc 笔记

    STL的空间配置器std_alloc 笔记 C++的内存分配基本操作是 ::operator new(),内存释放是 ::operator delete(),这里个全局函数相当于C的malloc和fr ...

  7. 浅谈JavaScript递归

    递归:是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.递归指的是一个过程:函数不断引用自身,直到引用的对象已知. //公园里面有200个桃子,每天吃掉一半,扔掉一个烂的,第6天 ...

  8. 下载旧版chrome

    问题描述: xp只能使用chrome 49及其之前的版本,去哪里下载? 解决办法: 1. 在这里 http://www.slimjet.com/chrome/google-chrome-old-ver ...

  9. spring boot + mybatis + druid

    因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...

  10. [HNOI2007]紧急疏散EVACUATE (湖南2007年省选)

    [HNOI2007]紧急疏散EVACUATE 题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面 ...