Struts2国际化

 

国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。

很多技术框架都提供国际化支持,struts2的国际化大致上分为页面的国际化,Action的国际化以及xml的国际化。

我们将使用Struts2国际化技术实现登录功能的国际化。实现根据客户端的浏览器区域进行语言的切换,我们以英文和中文为例子。

右键点击TestStruts2_001项目的“src”文件夹,选择“New”->“File”在里面新建一文件:

在File name处输入“struts.properties”。properties文件为资源文件。其内容格式为:“Key=Value”。点击“Finish”后即可看到打开了该文件,界面如下:

点击“Add”按钮,看到如下窗体:

在Name处输入“struts.custom.i18n.resources”。这个为键名。

在Value处输入“messageResource”。这个则为键值。

添加完后点击“Finish”可以看到列表中出现:

用同样的方法,先新建一个名字叫messageResource_en_US.properties的文件,分别添加键值:

Name

Value

netrobot.login.username

username

netrobot.login.password

password

netrobot.login.submitbutton

submit

netrobot.helloworld

Hello World!

得到下面列表:

 

使用同样方法再创建一个messageResource_zh_CN.properties的文件,并且在里面添加键值:

Name

Value

netrobot.login.username

用户名

netrobot.login.password

密码

netrobot.login.submitbutton

登录

netrobot.helloworld

你好!

得到如图:

注意,查看messageResource_zh_CN.properties的代码视图“Source”可以看到:

netrobot.login.username=\u7528\u6237\u540D

netrobot.login.password=\u5BC6\u7801

netrobot.login.submitbutton=\u767B\u5F55

netrobot.helloworld=\u4F60\u597D\uFF01

中文不能直接写在properties文件中,必须使ascii码表示。

然后我们修改一下login.jsp页面:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head></head>
 6   <body>
 7        <s:form action="loginAction" >
 8         <s:textfield name="username" key="netrobot.login.username"/>
 9         <s:password name="password" key="netrobot.login.password"/>
10         <s:submit key="netrobot.login.submitbutton"/>
11     </s:form>        
12   </body>
13 </html>

 

在各个控件后加上相应的key=””,即可实现页面的国际化。表单控件有很多,其他控件的用法请参考struts2相关文档。

我们再修改一下HelloWorld.java,在里面修改代码如下:

 1 package hello;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 public class HelloWorld extends ActionSupport{
 4     private String message;
 5     public String getMessage() {
 6         return message;
 7     }
 8     public void setMessage(String message) {
 9         this.message = message;
10     }
11     public String execute(){
12         setMessage(getText("netrobot.helloWorld"));
13         return "success";
14     }
15 }

 

与之前的区别有两个地方:1. HelloWorld类继承了ActionSupport,要使用Struts2的国际化,必须继承该类。2. 通过getText("label.helloWorld")方法获得国际化后的HelloWorld值。通过getText方法可以实现Action中的国际化。

运行结果:

假如运行时,操作系统为英文操作系统,则显示英文界面如图:

 

在控制面板将系统的“区域与语言”设置为“中文(中国)”,则显示中文界面:

 

注意:

如需添加其他语言,只需增加messageResource_语言_国家.properties文档即可。语言和国家的代码请参考相关资料。

国际化资源文件分为三种级别
(1)全局资源文件,可以被整个应该程序引用,也就是struts.custom.i18n.resources = messageResource指定的文件。

(2) 包级资源文件,每个包的根目录下可以新建资源文件,仅被当前包中的类访问.文件名格式为:package_语言代码_国家代码.

(3) Action级资源文件,仅被当前Action引用,名称为action名_语言代码_国家代码

查找顺序为从小范围到大范围, Action级优先级最大 

posted @ 2012-11-07 14:20  hlb  阅读(516)  评论(0编辑  收藏  举报