南京北大青鸟

全国免费电话:400-885-5191

三分钟了解北大青鸟
当前位置:北大青鸟 > 学习园地 > 编程技巧

Struts2国际化

来源:南京北大青鸟张府园校区      作者:中博IT教育      发布时间:2012-11-20 17:32:21

国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设

国际化(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级优先级最大。

(责任编辑:南京北大青鸟)

分享到:

相关阅读:

上一篇:异常的相关介绍

下一篇:Javascript 跨域

抢免费试听名额

名额仅剩66名

教育改变生活

WE CHANGE LIVES