您的位置:首页 > 编程语言 > Java开发

struts2:国际化

2012-06-05 13:13 162 查看
国际化

一,全局的国际化资源文件

1,资源文件:资源文件放在src下面,命名为 “基名_language_country.properties”

如:hwt_zh_CN.properties

2,在struts.xml中配置基名(以上面的配置文件为例):<constant
name="struts.custom.i18n.resources"value="hwt"/>

3,页面中的引用:直接写<s:text name=”key名字”/>,会直接到全局的配置文件中去找

4,错误信息的国际话:在Action中可以通过 getText(“key的名字”);可以得到资源文件中的值,如:

public
void
validate() {
if(username ==
null ||
"".equals(username)){
this.addFieldError("username",
getText("errors.username"));
}else
if
(tel == null ||
"".equals(tel)){
this.addFieldError("tel",
getText("errors.tel"));
}else
if
(!Pattern.compile("^1[358]\\d{9}$").matcher(tel).matches()){
this.addFieldError("tel",
getText("errors.telFormat"));
}
}

如果使用的是validate,那么就使用<messagekey=”key名字”/>来取得资源文件中的值

<field
name="username">
<field-validator
type="requiredstring">
<message
key="errors.username">
</message>
</field-validator>
</field>

二,package下的国际资源文件

1,资源文件:资源文件放在相应的包下面,命名为 “package_language_country.properties”,package是固定的:如:package_zh_CN.properties

2,在页面包的资源文件访问:

<s:i18n
name="hwt/action/package">--注意:前面是包名,后面的package是固定的
<s:text
name="prompt.username"></s:text>
</s:i18n>

3,错误信息的国际化和全局的国际化是一样的;

三,Action下的国际资源文件

1,资源文件:资源文件放在Action所在的包下面,命名为 “ActionClassName_language_country.properties”,ActionClassName是Action类名:如:LoginAction_zh_CN.properties

2,在页面包的资源文件访问:

<s:i18n
name="hwt/action/LoginAction">--注意:前面是包名,后面是类名
<s:text
name="prompt.username"></s:text>
</s:i18n>

3,错误信息的国际化和全局的国际化是一样的;

四,输出带占位符的国际化信息

如在资源文件中配置信息如下:

prompt.username=username

errors.required={0} is required !

在页面可以直接访问:

<s:text name="errors.required ">

<s:param><s:text name=”prompt.username”/></s:param>

</s:text>

在Action类中获取带占位符的国际化信息,可以使用

getText(String key, String[] args)或getText(StringaTextName, List args)方法。

如:

public
void
validate() {
if(username ==
null ||
"".equals(username)){
this.addFieldError("username",
getText("errors.required",new String[]{getText("prompt.username")}));
}else
if
(tel == null ||
"".equals(tel)){
this.addFieldError("tel",
getText("errors.required",new String[]{getText("prompt.tel")}));
}else
if
(!Pattern.compile("^1[358]\\d{9}$").matcher(tel).matches()){
this.addFieldError("tel",
getText("errors.idcard",new String[]{getText("prompt.tel")}));
}
}

五,动态的语言切换

动态的语言切换非常容易,只需要在url地址后面就加上 request_locale=zh_CN或者request_locale=en_US….

1,建一个类

public
class
ChangeLanguage extends ActionSupport{

public String execute()
throws Exception{
return
super
.execute();
}
}

2,配置问中要注册上面写的那个类:

<action
name="changeLanguage"
class="hwt.action.ChangeLanguage">
<result>/login.jsp</result>
</action>

3,页面

<body>
<a
href="${pageContext.request.contextPath}/validator/changeLanguage.action
?request_locale=zh_CN">简体中文</a>
<a
href="${pageContext.request.contextPath}/validator/changeLanguage.action
?request_locale=en_US">English</a>
<form
action="${pageContext.request.contextPath }/validator/loginAction_login.action"
method="post">
<s:text
name="prompt.username"/>:<input
type="text"
name="username"
value="${username }"/><s:fielderror
fieldName="username"/><br/>
<s:text
name="prompt.tel"/>:<input
type="text"
name="tel"
value="${tel}"/><s:fielderrorfieldName="tel"/><br/>
<input
type="submit"
value="<s:text
name='button.confirm'/>"/>
</form>
</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: