在Struts 2.0中国际化(i18n)您的应用程序
2009-02-15 12:18
477 查看
国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。
其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。
不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。
在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以参考我早前的文章《为Struts 2.0做好准备》)。
在src文件夹中加入struts.properties文件,内容如下:
struts.custom.i18n.resources=globalMessages
其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。
不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。
国际化Hello World
下面让我们看一个例子——HelloWorld。这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld。在Eclipse创建工程配置开发和运行环境(如果对这个步骤有问题,可以参考我早前的文章《为Struts 2.0做好准备》)。
在src文件夹中加入struts.properties文件,内容如下:
struts.custom.i18n.resources=globalMessages
package tutorial; import java.util.Hashtable; import java.util.Locale; import java.util.Map; publicclass Locales public Map<String, Locale> getLocales() Map<String, Locale> locales =new Hashtable<String, Locale>(2); locales.put("American English", Locale.US); locales.put("Simplified Chinese", Locale.CHINA); return locales; } } tutorial/Locales.java <%@taglib prefix="s" uri="/struts-tags"%> <script type="text/javascript"> <!-- function langSelecter_onChanged() { document.langForm.submit(); } //--> </script> <s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/> <s:bean id="locales" name="tutorial.Locales"/> <form action="<s:url includeParams="get" encode="true"/>" name="langForm" style="background-color: powderblue; padding-top: 4px; padding-bottom: 4px;"> Language: <s:select label="Language" list="#locales.locales" listKey="value" listValue="key" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE" name="request_locale" id="langSelecter" onchange="langSelecter_onChanged()" theme="simple"/> </form> LangSelector.jsp 上述代码的原理为,LangSelector.jsp先实例化一个Locales对象,并把对象的Map类型的属性locales赋予下拉列表(select) 。如此一来,下拉列表就获得可用语言的列表。大家看到LangSelector有<s:form>标志和一段Javascript脚本,它们的作用就是在用户在下拉列表中选择了后,提交包含“reqeust_locale”变量的表单到Action。在打开页面时,为了下拉列表的选中的当前区域,我们需要到session取得当前区域(键为“WW_TRANS_I18N_LOCALE”的属性),而该属性在没有设置语言前是为空的,所以通过值栈中locale属性来取得当前区域(用户浏览器所设置的语言)。 你可以把LangSelector.jsp作为一个控件使用,方法是在JSP页面中把它包含进来,代码如下所示: <s:include value="/LangSelector.jsp"/> 在例1中的HellloWorld.jsp中<body>后加入上述代码,并在struts.xml中新建Action,代码如下: <action name="HelloWorld"> <result>/HelloWorld.jsp</result> </action> 或者,如果你多个JSP需要实现上述功能,你可以使用下面的通用配置,而不是为每一个JSP页面都新建一个Action。 <action name="*"> <result>/{1}.jsp</result> </action> 分布运行程序,在浏览器的地址栏中输入http://localhost:8080/Struts2_i18n/HelloWorld.action,出现图4所示页面: 图3 HelloWorld.action 在下拉列表中,选择“American English”,出现图5所示页面: 图4 HelloWorld.action
相关文章推荐
|