struts2国际化

资源文件查询顺序

假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:

  1. 查找ChildAction_xx_XX.properties文件或ChildAction.properties;
  2. 查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;
  3. 查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;
  4. 判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;
  5. 查找当前包下的package.properties文件;
  6. 查找当前包的父包,直到最顶层包;
  7. 值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;
  8. 查找在struts.properties配置的默认的资源文件
  9. 输出user.title。

图3 资源文件查找顺序图

使用:

页面:<s:text name="HelloWorld"/>,<s:property value="%{getText('HelloWorld')}"/>

参数化国际化字符串

许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。在Struts 2.0中,我们通过以下两种方法做到这点:

  1. 在资源文件的国际化字符串中使用OGNL,格式为${表达式},例如:
    validation.require = ${getText(fileName)} is required
  2. 使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number | date | time | choice), 格式样式},例如:
    validation.between = Date must between { 0 , date, short} and { 1 , date, short}

在显示这些国际化字符时,同样有两种方法设置参数的值:

  1. 使用标志的value0、value1...valueN的属性,如:
    < s:text name ="validation.required" value0 ="User Name" />
  2. 使用param子元素,这些param将按先后顺序,代入到国际化字符串的参数中,例如:
    < s:text name ="validation.required" >
       
    < s:param value ="User Name" />
    </ s:text >

参考:http://www.blogjava.net/max/archive/2006/11/01/78536.html

猜你喜欢

转载自yuebishuhui-sina-com.iteye.com/blog/2220275