本文将通过一个详细的实例来展示Struts框架的国际化,使用的版本号是struts1.1。
案例:在一个页面上有一个下拉框,下拉框中有3个国家的语言选项,各自是“中文简体”、“繁体中文”、“英文”。
使用者通过对这三个选项的改变,而实现3种语言的变化。效果例如以下:
一、详细开发思想例如以下:
1)通过一个Action来获得JSP页面下拉框的选择项,依据这些选项来动态改变保存在Session中的Locale对象;
2)JSP页面的全部显示都会通过<bean:message>标签来读取资源配置文件,依据3种语言给出3个资源配置文件,资源配置文件的“键”不会改变,改变的是“值”。简体和繁体的“值”会使用UTF-8编码。
二、 部分代码例如以下:
a) 在Action中提供针对请求到来的Locale对象的动态变化,
package struts.sample.cap4.sample1.action; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import struts.sample.cap4.sample1.form.LanguageSelectForm; public class I18SelectAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { LanguageSelectForm languageSelectForm = (LanguageSelectForm) actionForm; Locale locale = null; //依据页面的下拉选择得到Locale对象的内容 if (languageSelectForm.getLanguageSelect().equals("0")) { locale = Locale.SIMPLIFIED_CHINESE; } if (languageSelectForm.getLanguageSelect().equals("1")) { locale = Locale.US; } if (languageSelectForm.getLanguageSelect().equals("2")) { locale = Locale.TRADITIONAL_CHINESE; } //将Locale对象的内容存放到Session中 request.getSession().setAttribute(Globals.LOCALE_KEY, locale); return mapping.findForward("success"); } }
b) 提供一个ActionForm
该Action没有检验的方法。不过传递从页面到来的參数。
package struts.sample.cap4.sample1.form; import org.apache.struts.action.ActionForm; public class LanguageSelectForm extends ActionForm { //下拉框的value String languageSelect; public String getLanguageSelect() { return languageSelect; } public void setLanguageSelect(String languageSelect) { this.languageSelect = languageSelect; } }
c) JSP页面
JSP页面的部分仅仅有一个下拉框和一些提示信息。
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <html> <head> <title>selectlanguage</title> <script language="javascript"> function selectsubmit() { if (document.all("languageSelect").value != "9999") { document.langform.submit(); } } </script> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <form name="langform" action="I18SelectAction.do" method="POST"> <table border="0" width="486" cellpadding="6"> <tr> <td><bean:message key="form.languagefamily" /></td> <td> <select name="languageSelect" onchange="selectsubmit();"> <option value="9999" selected="selected"> <bean:message key="form.language999" /> </optioon> <option value="0"> <bean:message key="form.language0" /> </optioon> <option value="1"> <bean:message key="form.language1" /> </optioon> <option value="2"> <bean:message key="form.language2" /> </optioon> </select> </td> </tr> </table> </form> </body> </html>
三、3个不同语言的资源配置文件
三种不同语言的配置文件分别为application_en_US.properties、application_zh_CN.properties、application_zh_TW.properties,相应了英文、中文简体和繁体中文3种不同的显示。
application_en_US.properties内容例如以下:
form.language0=SIMPLIFIED_CHINESE form.language1=ENGLISH form.language2=TRADITIONAL_CHINESE form.language999=Please Choose your language form.languagefamily=Language
application_zh_CN.properties的内容例如以下:
</pre><pre class="java" name="code">form.language0=u7B80u4F53u4E2Du6587 form.language1=u82F1u8BED form.language2=u7E41u4F53u4E2Du6587 form.language999=u8BF7u9009u62E9u6240u9700u8BEDu8A00u7684u79CDu7C7B form.languagefamily=u8BEDu8A00
application_zh_TW.properties的内容例如以下:
form.language0=u7C21u9AD4u4E2Du6587 form.language1=u82F1u8A9E form.language2=u7E41u9AD4u4E2Du6587 form.language999=u8ACBu9078u64C7u6240u9700u8A9Eu8A00u7684u7A2Eu985E form.languagefamily=u8A9Eu8A00
完整代码地址:http://download.csdn.net/detail/sanqima/7479141