DescriptionWebWork supports internationalization (in short, i18n) in two different places: the UI tags and the action/field error messages.
Resource Bundle Search OrderResource bundles are searched in the following order:
For more information, checkout the LocalizedTextUtil class.
ExamplesUsing getText()To display i18n text, you can use a call to getText() in the property tag, or any other tag such as the UI tags (this is especially useful for labels of UI tags): <ww:property value="getText('some.key')" />
Text TagYou may also use the text tag: <-- Third Example --> <ww:text name="some.key" /> <-- Fourth Example --> <a:text name="some.invalid.key" > The Default Message That Will Be Displayed </a:text> I18n TagAlso, note that there is an i18n tag that will push a resource bundle on to the stack, allowing you to display text that would otherwise not be part of the resource bundle search hierarchy mentioned previously. <ww:i18n name="some.package.bundle" > <ww:text name="some.key" /> </ww:i18n>
I18n InterceptorSee I18n Interceptor for more info. It basically pushes a locale into the ActionContext map upon every request. Webwork (components, ActionSupport etc.) honours this and hence every i18n related aspect will used this locale. Its a pretty elegant way of changing locale upon request as well. Global resource (webwork.custom.i18n.resources) in webwork.propertiesA global resource bundle could be specified through the 'webwork.custom.i18n.resources' property in webwork.properties. The locale can be siwtched by 'webwork.locale' in the webwork.properties as well. Comparison with StrutsStruts users should be familiar with the application.properties resource bundle, where you can put all the messages in the application that are going to be translated. WebWork, though, splits the resource bundles per action or model class, and you may end up with duplicated messages in those resource bundles. A quick fix for that is to create a file called ActionSupport.properties in com/opensymphony/xwork and put it on your classpath. This will only work well if all your actions subclass ActionSupport. |