Struts2系列教程之国际化配置实现的方法介绍



Struts2系列教程之国际化配置实现的方法介绍,所有的标签都是通过当前起作用的Locale来支持国际化的。比如说,“date”标签使用用户Locale来决定正确的日期格式;“actionerror”、“fielderror”和“actionmessage”标签都是通过声明式验证配置中所提供的key来获取要渲染的文本。还有一些其他的标签很值得关注。

有两种方式可以编程式获取一个页面所需的国际化文本,它们都需要Action继承ActionSupport这个类,这样才可以使用必需的国际化方法。

第一种是使用“text”标签,这个标签通过“name”属性所提供的key来检索文本:

 额外的信息可以在Resource Bundle通过花括号来提供。上面的例子对应的属性文件内容的形式是这样的:

label.greeting=Hello there!

label.greeting2=Hello there {0}!

 

第二种方式是通过OGNL方法和“property”标签来获取文本值。这种技术和上面介绍的那中的不同在于开发者对风格的选择。10。在方法调用时,OGNL表达式可以被用在任何进行表达式运算的标签中。在第二种方式下,上面的页面就变成了:

<s:property value=”getText(‘label.greeting’)”/>

<s:property value=”getText(‘label.greeting2’)”>

<s:param >Mr Smith</s:param>

</s:property>


 

由于“label”属性在默认情况下不是OGNL表达式,所以我们需要使用“%{”和“}”符号来强制Struts2把它作为OGNL表达式解析。

 

<s:textfield label=”%{getText(‘label.greeting’)}”/>

在需要大段文字的时候,OGNL表达式还可以和“include”标签一起使用,用来指定语言目录。在这种情况下,我们要确保每一个Action都继承了一个基类,同时在基类中向外暴露一个决定Locale目录的方法。在这里我们有一个getLocaleDirectory()方法。对应的页面为:

 

<s:include value=”/include/%{localeDirectory}/copyright.html” />

“i18n”标签提供了一种从被渲染页面的值栈中获取额外的Resouce Bundle的方式,它的“name”属性描述了Resouce Bundle的名称。“i18n”标签中的任何标签都可以访问新的Resouce Bundle文本。

<s:i18n name=”myCustomBundle”>

The value for abc in myCustomBundle is <s:text name=”abc”/>

</s:i18n>