查看完整版本: WebWork2文档中文化计划

sapphire01 2007-11-14 17:48

WebWork2文档中文化计划

描述WebWork在两个不同的地方支持国际化(简称 i18n): UI标签和 action/field 错误信息.
[list][*][url=http://wiki.javascud.org/display/ww2cndoc/Tags][color=#0000ff]Tags[/color][/url] 一般指 [url=http://wiki.javascud.org/display/ww2cndoc/i18n][color=#0000ff]i18n[/color][/url] 和 [url=http://wiki.javascud.org/display/ww2cndoc/text][color=#0000ff]text[/color][/url] 标签[*][url=http://wiki.javascud.org/display/ww2cndoc/Validation][color=#0000ff]校验[/color][/url][/list]资源包搜索顺序资源包按照下面的顺序搜索:
[list=1][*]ActionClass.properties[*]BaseClass.properties (所有的基类直到 Object.properties)[*]Interface.properties (每一个接口和子接口)[*]ModelDriven 的 model (如果实现了 ModelDriven), 对于 model 对象从第一步重复执行[*]package.properties (类所在的目录和每个父目录直到根目录)[*]搜索 i18n message key 自己的层次关系[*]全局资源属性 (webwork.custom.i18n.resources) ,在webwork.properties 里定义的[/list]要了解更多的信息,请查阅 LocalizedTextUtil 类.
[table=85%][tr][td][img=16,16]http://wiki.javascud.org/images/icons/emoticons/check.gif[/img][/td][td][b]Package 层次关系[/b]
为了把 #5 阐述清楚, 当它在一个包的层次中遍历的时候, WebWork会寻找一个叫package.properties的文件:
com/
acme/
package.properties
actions/
package.properties
FooAction.java
FooAction.properties
如果 FooAction.properties 不存在,就会寻找com/acme/action/package.properties, 如果没有找到 com/acme/package.properties, 如果没有找到 com/package.properties, 依此类推.
[/td][/tr][/table]例子使用 getText()为了显示 i18n 文字,你可以在[url=http://wiki.javascud.org/display/ww2cndoc/property][color=#0000ff]property[/color][/url] 标签里使用一个对getText()的调用,或者任何其它标签,例如UI标签(这尤其对UI标签的label有用):
[table=98%,#ffffe0][tr][td]Content pulled from external source. Click [url=http://wiki.javascud.org/plugins/snippet/clearCache.action?id=i18nExample&url=com.opensymphony.webwork.components.Property][color=#0000ff]here[/color][/url] to refresh.
[/td][/tr][tr][td]<ww:property value="getText('some.key')" />

[/td][/tr][/table]Text 标签你也可以使用 [url=http://wiki.javascud.org/display/ww2cndoc/text][color=#0000ff]text[/color][/url] 标签:
[table=98%,#ffffe0][tr][td]Content pulled from external source. Click [url=http://wiki.javascud.org/plugins/snippet/clearCache.action?id=i18nExample&url=com.opensymphony.webwork.components.Text][color=#0000ff]here[/color][/url] to refresh.
[/td][/tr][tr][td]<ww:text name="some.key" />

[/td][/tr][/table]I18n 标签也要注意到有一个[url=http://wiki.javascud.org/display/ww2cndoc/i18n][color=#0000ff]i18n[/color][/url]标签会把一个资源包推送到stack中,允许你显示不是前面提到的搜索层次关系中的资源包包含的文字.
[table=98%,#ffffe0][tr][td]Content pulled from external source. Click [url=http://wiki.javascud.org/plugins/snippet/clearCache.action?id=i18nExample&url=com.opensymphony.webwork.components.I18n][color=#0000ff]here[/color][/url] to refresh.
[/td][/tr][tr][td]<ww:i18n name="some.package.bundle" >     <ww:text name="some.key" /></ww:i18n>

[/td][/tr][/table]  [table=85%][tr][td][img=16,16]http://wiki.javascud.org/images/icons/emoticons/forbidden.gif[/img][/td][td]在SiteMesh的装饰页面里面使用国际化是可能的,但是存在几个怪异之处.查阅 [url=http://wiki.javascud.org/display/ww2cndoc/SiteMesh][color=#0000ff]SiteMesh[/color][/url] 页面来了解如何整合WebWork和SiteMesh,包括整合的技巧.
[/td][/tr][/table]
I18n 拦截器查看 [url=http://wiki.javascud.org/display/ww2cndoc/I18n+Interceptor][color=#0000ff]I18n Interceptor[/color][/url] 了解更多信息. 它基本上就是在每个请求中把一个locale放到ActionContext Map中. Webwork (组件, ActionSupport 等.) 会感知到这个,并且每个i18n相关的部分都会使用这个locale.这也是一个基于request的改变locale的优雅方式.
在webwork.properties里配置的全局资源包 (webwork.custom.i18n.resources)一个全局的资源包可以通过在webwork.properties里面设定 'webwork.custom.i18n.resources' 属性来做到. locale也可以通过在webwork.properties里面的 'webwork.locale' 属性来切换.
和Struts比较Struts用户应该会熟悉使用application.properties资源包,在这个文件中你可以放置所有应用程序中要被翻译的信息.WebWork尽管把资源包拆成基于每个action或者model类的方式,但是你可能会在这些文件里不断重复文字信息.对此的一个快速修正方式就是创建一个叫ActionSupport.properties 的文件放在com/opensymphony/xwork 包中,并把它设置在classpath中.如果你的action都是ActionSupport的子类这会工作的很好.
页: [1]
查看完整版本: WebWork2文档中文化计划