国际化
一,全局的国际化资源文件
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>