两种Java实现国际化的方法

目前,公司中很多项目需要国际化的实现,现在的实现方式是通过JS替换显示的方法,切换语言的过程造成了中英文语言的闪烁出现,带来极其不好的用户体验。另外,使用JS替换的方法配置的Json格式的配置文件,不易于读写,造成了开发不同模块同事写入文件时候的冲突,和JS加载对于其他JS加载造成各种意想不到的bug,给开发人员造成了极大的痛苦,故本文基于Struts2和SpringMVC两种方式,简单阐述Struts2和SpringMVC两种国际化的实现。

  文章结构

  一、使用Struts2方式实现国际化

  1、实现原理

  1-1、源码注释

  1-2、流程图

  2、环境搭建w

  2-1、新建一个动态Web工程

  2-2、当前src目录下添加struts2的配置文件

  2-3、加入struts2运行所依赖的jar包

  2-4、添加国际化资源文件

  3、创建Action类及配置struts2.xml 

  3-1、Action类 

  3-2、struts2.xml

  3-3、Jsp页面 

  4、实现效果 

  二、使用SpringMVC方式实现国际化 

  1、实现原理 

  2、工程结构 

  3、目录详解

  4、实现展示 

  总结

  一、使用Struts2的方式实现国际化

  1、实现原理

  Struts 2国际化是建立在Java国际化的基础之上,一样也是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息---整个过程与Java程序的国际化完全相同,只是Struts2框架对Java程序国际化进行了进一步封装,从而简化了应用程序的国际化。

  下面通过源码注释和流程图详细说明国际化实现原理。

  1-1源码注释

  1-2流程图

  根据请求参数中获取的local对象,判断local对象是否为空,若不为空,将获取的local字符串保存到session中,若为空,则从session中获取session中保存的local,若session 中获取的local为空,则从请求消息头中获取local对象, 最后,将local对象保存到值栈的Map栈中。

  2、Struts2环境的搭建

  2-1新建一个动态web工程

  在web.xml中加入struts2的核心filter,可参见struts2官方例子中的struts-2.3.15.3\apps\struts2-blank\WEB-INF\web.xml复制。

  2-2当前src目录下添加struts2的配置文件

  可复制struts-2.3.15.3\apps\struts2-blank\WEB-INF\src\java\struts.xml

  2-3加入struts2运行所依赖的jar包

  2-4添加国际化资源文件

  文件内容如下

  至此,我们的准备工作就完成了。

  3、创建Action类以及配置struts.xml

  4、实现效果

  点击前往登陆界面

  切换为Engilish

  二、使用SpringMVC的方式实现国际化

  1、实现原理

  默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型。

  当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(LocalResolver),找到后使用它获取请求所对应的本地化类型信息。

  SpringMVC 还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。

  2、工程结构

  src下存放着中文和英文、默认语言的资源文件,显示的效果会根据Jsp页面的key值从国际豪华资源文件中寻找匹配的value值。

  springDispatcherServlet-servlet.xml写入SpringMVC的相关配置。

  3、目录详解

  src下properties文件存放需要国际化的字段。以key-value的形式存在。

  名称必须遵守 basename_国家语言码.properties格式。如i18n_zh_CN.properties。

  lib下存放有关于springMVC所依赖的jar包。

  WebContent下pages 文件夹名称必须springDispatcherServlet-servlet.xml

  所配置的<property name="prefix" value="/WEB-INF/pages/"></property>一致。

  下面两个jsp页面login负责展现中英文状态的切换,success负责展现切换页面中英文状态的保持。index.jsp负责初始语言的选择。

  springDispatcherServlet-servlet.xml是SpringMVC的配置文件。具体内容如下所示:

  4、实现展示

  首次打开index.jsp页面,程序会根据当前浏览器的local对象匹配相应的国际化资源文件,点击切换语言的链接,会根据链接参数重新匹配国际化资源文件,已达到语言切换的效果。

  index.jsp

  点击语言进入login.jsp,首次选择的是中文

  再次点击English链接

  可以确定中英文切换成功,而且无闪烁出现,给用户极好的体验。

  接下来验证中英文状态在不同页面的保持。英文状态点击Success Page链接

  切换到中文状态点击Success Page

  总结

  目前,Struts2和SpringMVC是比较流行的view层框架,掌握两者的特点和实现方式,可以极大的简化我们的开发,提高我们的开发效率,并且为项目带来极好的用户体验。struts2简单易用的标签,springMVC强大的注解,映射的功能,极大的解放了工程师构建前端页面的生产力,使项目的视图层结构清晰,控制层和持久化层代码的编写也更加简洁,方便。

  Struts2和SpringMVC各有优势,Struts2的入口为filter,而SpringMVC的入口为Servlet,Struts2 是基于全局的配置,而SpringMVC是基于方法的。故SpringMVC要比Struts2处理更快,而SpringMVC的标签更是简化开发,故笔者比较推荐使用SpringMVC的实现方式。

印刷 http://www.biyinjishi.com/
印刷知识 http://www.biyinjishi.com/kdocs/
印刷技巧 http://www.biyinjishi.com/kdocslist/1/
印刷模板 http://www.biyinjishi.com/kdocslist/2/
印刷工艺 http://www.biyinjishi.com/kdocslist/3/
印刷材质 http://www.biyinjishi.com/kdocslist/4/
印刷创意 http://www.biyinjishi.com/kdocslist/5/
印刷平台 http://www.biyinjishi.com/kdocslist/6/
普通名片 http://www.biyinjishi.com/products/a10-b1010/d100001/
中端名片 http://www.biyinjishi.com/products/a10-b1010/d100002/
高端名片 http://www.biyinjishi.com/products/a10-b1010/d100003/
创意名片 http://www.biyinjishi.com/products/a10-b1010/d100004/
会员卡 http://www.biyinjishi.com/products/a10-b1020/
PVC会员卡 http://www.biyinjishi.com/products/a10-b1020/d100006/
磁条会员卡 http://www.biyinjishi.com/products/a10-b1020/d100007/
芯片会员卡 http://www.biyinjishi.com/products/a10-b1020/d100008/
邀请函 http://www.biyinjishi.com/products/a10-b1030/
请柬 http://www.biyinjishi.com/products/a10-b1030/
证卡 http://www.biyinjishi.com/products/a10-b1035/
标签 http://www.biyinjishi.com/products/a10-b1035/
宣传物料 http://www.biyinjishi.com/products/a20/
单页 http://www.biyinjishi.com/products/a20-b2010/
折页 http://www.biyinjishi.com/products/a20-b2010/
宣传单页 http://www.biyinjishi.com/products/a20-b2010/d100015/
宣传折页 http://www.biyinjishi.com/products/a20-b2010/d100016/
海报 http://www.biyinjishi.com/products/a20-b2030/d100020/
展板 http://www.biyinjishi.com/products/a20-b2030/d100021/
展架 http://www.biyinjishi.com/products/a20-b2035/d100021
X展架 http://www.biyinjishi.com/products/a20-b2035/d100023/
易拉宝 http://www.biyinjishi.com/products/a20-b2035/d100024/
手提袋 http://www.biyinjishi.com/products/a20-b2050/d100024
纸质手提袋 http://www.biyinjishi.com/products/a20-b2050/d100026/
布质手提袋 http://www.biyinjishi.com/products/a20-b2050/d100027/

时间: 2024-10-09 00:33:14

两种Java实现国际化的方法的相关文章

两种 js下载文件的方法(转)

function DownURL(strRemoteURL, strLocalURL){ try{ var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP"); xmlHTTP.open("Get", strRemoteURL, false); xmlHTTP.send(); var adodbStream = new ActiveXObject("ADODB.Stream"); adodbStrea

两种局部刷新UITableView的方法的使用条件

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //1.取消选中这一行 [tableView deselectRowAtIndexPath:indexPath animated:YES]; //2.获取当前选中的数据 Shop *shop = _shops[indexPath.row]; //3.控制当前cell是否被选中 if( [_deleteShops

JavaScript强化教程——DOM编程(两种控制div移动的方法)

本文为H5EDU机构官方HTML5培训教程,主要介绍:JavaScript强化教程--DOM编程(两种控制div移动的方法) 第一种 按钮控制首先 创建两个html按钮和一个div并给div一个样式 input type="button" value="左" id="1"> <input type="button" value="右" id="2"> <div i

jQuery使用serialize(),serializeArray()方法取得表单数据+字符串和对象类型两种表单提交的方法

原始form表单值获取方式(手动): $.ajax({ type: "POST", url: "ajax.php", data: "Name=摘取天上星&position=IT技术", success: function(msg){alert(msg);}, error: function(error){alert(error);} }); JQ serialize()方法取值: $.ajax({ type: "POST&quo

Linux下两种删除过期文件的方法详述

一.概述 在实际的C软件开发项目中,不同的软件会在不同的目录中生成文件,由于磁盘的存储空间有限,开发人员不得不考虑对目录下的过期文件进行删除.一般说来,有两种删除过期文件的方法,一种是在C程序中实现,一种是利用crontab实现.本文对这两种方法的具体实现进行详细的介绍. 为了便于说明,本文中的过期文件的后缀为.c,存放在/home/zhou/zhouzx/Test目录下,过期时间为1天. 二.在C程序中实现过期文件删除 在该方法中,我们要考虑的主要问题为: (1)要删除过期多久的文件?文件存放

placeholder和json两种实现登录隐藏的方法

<head> <title> placeholder和json两种实现登录隐藏的方法 </title> <script type="text/javascript"> //判断浏览器是否支持 placeholder属性 function isPlaceholder() { var input = document.createElement('input'); return 'placeholder' in input; } if (!i

Java学习笔记——线程两种常用的创建调用方法

这是两种开发中常用的线程使用方法,匿名对象调用即可,很简单,掌握即可 <span style="font-size:18px;">class ThreadDemo { public static void main(String[] args) { new Thread() { public void run() { //coding here } }.start(); Runnable r = new Runnable() { public void run() { //

[转]两种Sigma-Delta ADC SNR仿真方法

假设现有一组Sigma-Delta ADC输出序列,下面将介绍两种计算出相应SNR的方法.其中由cadence导出数据的CIW窗口命令为:ocPrint(?output "输出目录/输出文件名" v("/保存的电路节点" ?resultsDir "cadence仿真数据目录/psf" ?result " "tran-tran") ?from 起始时刻 to 截止时刻 ?step 步长). 方法一: 第一种方法就是采用

两种最常用的 HTTP 方法:GET 和 POST的区别

什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信. HTTP 的工作方式是客户机与服务器之间的请求-应答协议. web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端. 举例:客户端(浏览器)向服务器提交 HTTP 请求:服务器向客户端返回响应.响应包含关于请求的状态信息以及可能被请求的内容. 两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST. GET - 从指