struts2的国际化很简单,只需要properties文件和标签就可以输出了。在struts.xml文件3中配置constant,输出不起作用。下面讲讲仅仅利用标签和properties文件来进行国际化。
标签<s:i18n name="i18n/message" >。
struts2需要知道国际化文件存放的路径和国际化文件的名称。其中i18n的name属性就是制定国际化资源存放的路径和名称,不过,这里指定的路径是相对路径,都是以class目录为基准的。上述的配置指的是class/i18n/message_xx_xx.properties文件。
struts2会在启动的时候加载国际化文件的内容到内存中,如果在web程序启动的时候,修改这个国际化文件,是不会重新加载到内存的。所以国际化资源文件是不可动态加载的。
<s:i18n>这个标签,应该包裹<html>元素,把这个标签放在<html>元素的外层。
标签<s:text name="xx"/>
这个标签必须在<s:i18n>标签内使用,否则是不起作用的,这个标签是用来输出资源文件的指定键的值,至于选用哪一个资源文件,会根据浏览器当前的语言来进行选择。如果资源文件不存在这个键,那么把这个键当做值来输出。下面是我的JSP页面的一个实例。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="../common/Taglib.jsp"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <s:i18n name="i18n/message"> <html> <head> <base href="<%=basePath%>"> <title><s:text name="admin_login_page_title"/></title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="/QuickOrder/js/import.js"></script> </head> <body> <div style="width: 320px; height: 240px; position: relative; top: 200px; left: 900px;"> <div class="easyui-panel" title='<s:text name="admin_login"/>' style="width: 320px; heigth: 240px; padding: 20px;"> <form id="adminLoginForm" method="POST" action="/QuickOrder/j_spring_security_check"> <input type="hidden" name="mode" value="admin"/> <table width="100%" cellspacing="0" cellpadding="2" align="center" border="0"> <tr> <td> <a class="easyui-linkbutton" data-options="iconCls: 'icon-male', plain: true,"> <s:text name="username"/> </a> </td> <td> <input id="adminUsername" name="j_username" class="easyui-validatebox"/> </td> </tr> <tr> <td> <a class="easyui-linkbutton" data-options="iconCls: 'icon-password1', plain: true,"> <s:text name="password"/> </a> </td> <td> <input id="adminPwd" type="password" name="j_password" class="easyui-validatebox"/> </td> </tr> <s:if test="%{#application.setting.verificationCodeLogin == true}"> <tr> <td colspan="2" style="text-align: right; padding-right: 25px;"> <img alt='<s:text name="verification_code"/>' src="/QuickOrder/quickorder/VerificationCode.png"> <input name="verificationCode" type="text" size="4"/> </td> </tr> </s:if> <tr> <td colspan="2" style="text-align: right;"> <a class="easyui-linkbutton" data-options="iconCls: 'icon-sign-in'" οnclick="adminLogin();"> <s:text name="login"/> </a> </td> </tr> </table> </form> </div> </div> <script type="text/javascript"> $adminLoginForm = $("#adminLoginForm"); $adminUsername = $("#adminUsername"); $adminPwd = $("#adminPwd"); function initialize() { $("#adminUsername, #adminPwd").validatebox({ required: true, validType: { length: [6,20] } }); } function adminLogin()//管理员登录按钮 { $adminLoginForm.submit(); } </script> </body> </html> </s:i18n> |
总之,使用<s:i18n>和<s:text>标签,再结合国际化资源文件,就能够实现JSP页面的国际化。