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. javaSE_07Java中类和对象-封装特性--练习

    1.编写封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,一个学生类,我们关注姓名,年龄,学历等信息,要求年龄必须在19-40岁之间,默认为19,学历必须是大专,本科,研究生这几 ...

  2. 提升单元测试体验的利器--Mockito使用总结

    为神马要使用Mockito? 在编写单元测试的时候,为了尽可能的保证隔离性,我们时常需要对某些不容易构造或者不容易获取或者对外部环境有依赖的对象,用一个虚拟的对象来创建以便于测试.假设你正在开发的的代 ...

  3. 搭建arm交叉工具链

    1.将arm-linux-gcc-4.4.3压缩包,拷到home/armtoolchain下,进行压缩. 2.压缩命令:tar -xzvf arm-linux-gcc-4.4.3.tgz,解压后得到了 ...

  4. ASP.NET MVC5(二):控制器、视图与模型

    前言 本篇博文主要介绍ASP.NET MVC中的三个核心元素:控制器.视图与模型,以下思维导图描述了本文的主要内容. 控制器 控制器简介 在介绍控制器之前,简单的介绍一下MVC工作原理:URL告知路由 ...

  5. SpringMVC 整合Jackson报错

    最近用spring4.x整合Jackson,结果莫名其妙的一直报错,网上收索的结果都是在maven或者gradle的环境下配置依赖条件解决的:但是eclipseIDE环境下的jar包应该是会自动依赖影 ...

  6. java入门学习笔记之2(Java中的字符串操作)

    因为对Python很熟悉,看着Java的各种字符串操作就不自觉的代入Python的实现方法上,于是就将Java实现方式与Python实现方式都写下来了. 先说一下总结,Java的字符串类String本 ...

  7. JS事件及其兼容用法

    JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 1.事件流:描述的是从页面中接收事件的顺序. IE提出的事件冒泡流:事件开始由最具体的 ...

  8. C++汉诺塔递归实现

    程序背景: 汉诺塔(Tower of Hanoi)又称河内塔,问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命 ...

  9. Jexus部署.Net Core项目

    Jexus Jexus 即 Jexus Web Server,简称JWS,是Linux平台上 的一款ASP.NET WEB服务器.它是 Linux.Unix.FreeBSD 等非Windows系统架设 ...

  10. kaggle Titanic心得

    Titanic是kaggle上一个练手的比赛,kaggle平台提供一部分人的特征,以及是否遇难,目的是预测另一部分人是否遇难.目前抽工作之余,断断续续弄了点,成绩为0.79426.在这个比赛过程中,接 ...