Overview
The framework supports internationalization (i18n) in the following places:
- the UI Tags
- Messages and Errors from the ValidationAware interface (implemented by ActionSupport and ValidationAwareSupport)
- Within action classes that extend ActionSupport through the getText() method
Resource Bundle Search Order
Wiki Markup |
---|
{snippet:id=searchorder|javadoc=true|url=com.opensymphony.xwork2.util/LocalizedTextUtil.java} |
For more, see the LocalizedTextUtil class.
Tip | ||
---|---|---|
| ||
|
Examples
There are several ways to access the message resources, including getText
, the text
tag, and the i18n
tag.
Using getText
from a Tag
To display i18n text, use a call to getText
in the property tag, or any other tag, such as the UI tags. (The getText
technique is especially useful for labels of UI tags.)
Wiki Markup |
---|
{snippet:id=i18nExample|javadoc=true|lang=xml|url=org.apache.struts2.components.Property} |
Note |
---|
The default implementation of |
Using the text
tag
The text tag retrieves a message from the default resource bundle.
Wiki Markup |
---|
{snippet:id=i18nExample|javadoc=true|lang=xml|url=org.apache.struts2.components.Text} |
Using the I18n
tag
The i18n tag pushes an arbitrary resource bundle on to the value stack. Other tags within the scope of the i18n tag can display messages from that resource bundle.
Wiki Markup |
---|
{snippet:id=i18nExample|javadoc=true|lang=xml|url=org.apache.struts2.components.I18n} |
Tip | ||||
---|---|---|---|---|
| ||||
Internationalizing SiteMesh decorators is possible, but there are quirks. See SiteMesh Plugin for more. |
Using the Key attribute of UI Tags
The key attribute of most UI tags can be used to retrieve a message from a resource bundle:
Code Block |
---|
<s:textfield key="some.key" name="textfieldName"/> |
I18n Interceptor
Essentially, the i18n Interceptor pushes a locale into the ActionContext map upon every request. The framework components that support localization all utilize the ActionContext locale. See I18n Interceptor for details.
Global Resources (struts.custom.i18n.resources) in struts.properties
Wiki Markup |
---|
{snippet:id=globalresource|javadoc=true|url=com.opensymphony.xwork2.util.LocalizedTextUtil} |
Formatting Dates and Numbers
See Formatting Dates and Numbers for more details and examples.
Comparison with Struts 1
Struts 1 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. Struts 2, 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/xwork2 and put it on your classpath. This will only work well if all your actions subclass XWork2's ActionSupport.