struts2:国际化

来源:互联网 发布:天刀捏脸数据男 编辑:程序博客网 时间:2024/04/28 06:16

国际化

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

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

如:hwt_zh_CN.properties

         2,在struts.xml中配置基名(以上面的配置文件为例):<constantname="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名字”/>来取得资源文件中的值

   <fieldname="username">

       <field-validatortype="requiredstring">

           <messagekey="errors.username">

           </message>

       </field-validator>

    </field>

 

二,package下的国际资源文件

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

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

<s:i18nname="hwt/action/package">--注意:前面是包名,后面的package是固定的

        <s:textname="prompt.username"></s:text>

    </s:i18n>

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

 

 

三,Action下的国际资源文件

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

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

<s:i18nname="hwt/action/LoginAction">--注意:前面是包名,后面是类名

        <s:textname="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,配置问中要注册上面写的那个类:

<actionname="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>

        <formaction="${pageContext.request.contextPath }/validator/loginAction_login.action"method="post">

             <s:textname="prompt.username"/><inputtype="text"name="username"value="${username }"/><s:fielderrorfieldName="username"/><br/>

            <s:textname="prompt.tel"/><inputtype="text"name="tel" value="${tel}"/><s:fielderrorfieldName="tel"/><br/>

            <inputtype="submit"value="<s:textname='button.confirm'/>"/>

        </form>

  </body>

原创粉丝点击