struts2国际化

来源:互联网 发布:淘宝勾针玩偶 编辑:程序博客网 时间:2024/05/04 21:11

为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容是很多的 key-value对,其中key是不变的,是程序使用的部分,而value随不同的国家/语言变化,是程序的显示部分。


资源文件的命名可以是如下3种形式:

                 baseName_language_country.properties

                 baseName_language.properties

                 baseName.properties
其中baseName是资源文件的基本名称,用户可以自由定义,而language和country都不可随意变化,必须是Java所支持的语言和国家。

国际化资源文件有三个级别


1.Action级别
UserAction.properties
UserAction_en_US.properties
UserAction_zh_CN.properties
资源文件必须和Action在同一个包里

2.package级别
package.properties
package_en_US.properties
package_zh_CN.properties
在相应的包里

3.App级别
lang.properties
lang_en_US.properties
lang_zh_CN.properties
需要在struts2.xml里配置常量来指定资源文件的名称
<constant name="struts.custom.i18n.resources" value="lang"></constant>
对配置文件进行自动读取
<constant name="struts.i18n.reload" value="true"></constant>

举个例子:

App级别

lang.properties

user.management.register.title = User Registeruser.management.label.username = UserNameuser.management.label.password = Passworduser.management.label.age = Ageuser.management.button.submit = SUBMIT

lang_en_US.properties

user.management.register.title = User Registeruser.management.label.username = UserNameuser.management.label.password = Passworduser.management.label.age = Ageuser.management.button.submit = SUBMIT


lang_zh_CN.properties由于编码问题,在properties配置文件中中文会以ISO-8859-1的编码现实展示
user.management.register.title = \u7528\u6237\u6CE8\u518C†Œuser.management.label.username = \u5E10\u53F7user.management.label.password = \u5BC6\u7801 user.management.label.age = \u5E74\u9F84„user.management.button.submit = \u63D0\u4EA4

Action级别

UserAction.properties

username.requiredstring=the username must be required stringpassword.requiredstring=the password must be required stringage.requiredstring=The age must be between 1-50


UserAction_en_US.properties
username.requiredstring=the username must be required stringpassword.requiredstring=the password must be required stringage.requiredstring=The age must be between 1-50


UserAction_zh_CN.properties由于编码问题,在properties配置文件中中文会以ISO-8859-1的编码现实展示
username.requiredstring=\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7Apassword.requiredstring=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7Aage.requiredstring=\u5E74\u9F84\u5FC5\u987B\u57281-150\u4E4B\u95F4

UserAction-user_register-validation.xml(UserAction中的register方法的验证器)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC  "-//Apache Struts//XWork Validator 1.0.3//EN"  "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  <validators><field name="username"><field-validator type="requiredstring"><message key="username.requiredstring"/></field-validator></field><field name="age"><field-validator type="int"><param name="max">150</param><param name="min">1</param><message key="age.requiredstring"/></field-validator></field><field name="password"><field-validator type="requiredstring"><message key="password.requiredstring"/></field-validator></field></validators>


UserAction 

package com.zucc.action;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.zucc.model.User;public class UserAction extends ActionSupport implements ModelDriven<User>{private User user;@Overridepublic String execute() throws Exception {System.out.println("UserAction execute.....");System.out.println("username:"+user.getUsername());System.out.println("password:"+user.getPassword());System.out.println("age:"+user.getAge());System.out.println("do register....");return SUCCESS;}@Overridepublic User getModel() {this.user = new User();return this.user;}public String register() throws Exception{System.out.println("UserAction register....");System.out.println("username:"+user.getUsername());System.out.println("password:"+user.getPassword());System.out.println("age:"+user.getAge());return SUCCESS;}}


register.jsp可以点击切换英文和切换中文来进行中英文切换

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h1><s:text name="user.management.register.title"/></h1><a href="user_register?request_locale=en_US">切换英文</a><a href="user_register?request_locale=zh_CN">切换中文</a><form action="user_register" method="post"><s:text name="user.management.label.username"/><input type="text" name="username" value="${username}"/>${fieldErrors['username'][0]}<br/><s:text name="user.management.label.password"/><input type="password" name="password"/>${fieldErrors['password'][0]}<br/><s:text name="user.management.label.age"/><input type="text" name="age" value="${age}"/>${fieldErrors['age'][0]}<br/><s:text name="user.management.button.submit" var="submit"/><input type="submit" value="${submit}"></form></body></html>

struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="true" />    <constant name="struts.devMode" value="true" />    <constant name="struts.custom.i18n.resources" value="lang"></constant>    <constant name="struts.i18n.reload" value="true"></constant>     <package name="default" namespace="/" extends="struts-default"> <action name="user_*" class="com.zucc.action.UserAction" method="{1}"> <result>/Hello.jsp</result> <result name="input">/register.jsp</result> </action>    </package></struts>

结果如下:

英文结果

中文结果






0 0