Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Table of Contents

Overview

The framework supports internationalization (i18n) in the following places:

...

To clarify #5, while traversing the package hierarchy, Struts 2 will look for a file package.properties:

...

...

If FooAction.properties does not exist, com/acme/action/package.properties will be searched for, if not found com/acme/package.properties, if not found com/package.properties, etc.

...

If you configure action as follow

...

it will use a default class defined with default-class-ref in struts-default.xml which is com.opensymphony.xwork2.ActionSupport. It means you have two options here to get I18N working in that case:

...

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}

...

...

The default implementation of TextProvider which is used in ActionSupport perform evaluation of value read from bundle base on the provided key, see Localizing Output for an example.

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}

...

...

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:

...

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.

...

If you don't need to use the package-scan-functionality and only base on the global bundles (those provided by the framework and via struts.custom.i18n.resources) you can use existing GlobalLocalizedTextProvider implementation. To use this please define the following option in your struts.xml:

...

Custom TextProvider and TextProviderFactory

...