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

Struts2使用23 -- 国际化

2009-11-06 12:21 375 查看
 

所有的标签都是通过当前起作用的Locale来支持国际化的。比如说,“date”标签使用用户Locale来决定正确的日期格式;“actionerror”、“fielderror”和“actionmessage”标签都是通过声明式验证配置中所提供的key来获取要渲染的文本。还有一些其他的标签很值得关注。
有两种方式可以编程式获取一个页面所需的国际化文本,它们都需要Action继承ActionSupport这个类,这样才可以使用必需的国际化方法。
第一种是使用“text”标签,这个标签通过“name”属性所提供的key来检索文本:

<s:text name="label.greeting"/>
<s:text name="label.greeting2">
       <s:param >Mr Smith</s:param>
</s:text>
额外的信息可以在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>
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息