This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts-site.git
The following commit(s) were added to refs/heads/master by this push:
new 4c5d413 Adds a note about new struts.i18n.search.defaultbundles.first
flag
4c5d413 is described below
commit 4c5d4130e5dd9113a408f0c3afd0d6b34756a2e0
Author: Lukasz Lenart <[email protected]>
AuthorDate: Sun Jan 2 14:49:52 2022 +0100
Adds a note about new struts.i18n.search.defaultbundles.first flag
---
source/core-developers/localization.md | 39 +++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 12 deletions(-)
diff --git a/source/core-developers/localization.md
b/source/core-developers/localization.md
index 86f4a76..d0728b4 100644
--- a/source/core-developers/localization.md
+++ b/source/core-developers/localization.md
@@ -14,8 +14,9 @@ title: Localization
The framework supports internationalization (i18n) in the following places:
1. the _UI Tags_
-2. Messages and Errors from the
[ValidationAware](http://struts.apache.org/struts2-core/apidocs/index.html?com/opensymphony/xwork2/ValidationAware)
-3. Within action classes that extend
[ActionSupport](http://struts.apache.org/struts2-core/apidocs/index.html?com/opensymphony/xwork2/ActionSupport)
through the `getText()` method
+2. Messages and Errors from the
[ValidationAware](http://struts.apache.org/maven/struts2-core/apidocs/index.html?com/opensymphony/xwork2/ValidationAware)
+3. Within action classes that extend
[ActionSupport](http://struts.apache.org/maven/struts2-core/apidocs/index.html?com/opensymphony/xwork2/ActionSupport)
+ through the `getText()` method
## Resource Bundle Search Order
@@ -29,8 +30,8 @@ Resource bundles are searched in the following order:
6. search up the i18n message key hierarchy itself
7. global resource properties
-This is how it is implemented in a default implementation of the
`LocalizedTextProvider` interface. You can provide your
-own implementation using `TextProvider` and `TextProviderFactory` interfaces.
+This is how it is implemented in a default implementation of the
`LocalizedTextProvider` interface. You can provide your
+own implementation using `TextProvider` and `TextProviderFactory` interfaces.
To clarify #5, while traversing the package hierarchy, Struts 2 will look for
a file `package.properties`:
@@ -57,11 +58,11 @@ If you configure action as follow
</action>
```
-it will use a default class defined with `default-class-ref` in
`struts-default.xml` which is
+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:
-- define `com/opensymphony/xwork2/ActionSupport.properties` and put messages
there
-- point `default-class-ref` to your base class and then defined appropriated
`.properties` file (corresponding to
+- define `com/opensymphony/xwork2/ActionSupport.properties` and put messages
there
+- point `default-class-ref` to your base class and then defined appropriated
`.properties` file (corresponding to
class' name or package)
## Examples
@@ -136,11 +137,24 @@ class, and you may end up with duplicated messages in
those resource bundles. A
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.
+## Search in default bundles first
+
+Since Struts 2.6 it is possible to enable searching in default bundles first
instead of performing a full class hierarchy
+scan and then default bundles.
+
+By setting the below flag to `true` the default implementation of
[LocalizedTextProvider](https://struts.apache.org/maven/struts2-core/apidocs/index.html?com/opensymphony/xwork2/LocalizedTextProvider.html)
+(which is
[StrutsLocalizedTextProvider](https://struts.apache.org/maven/struts2-core/apidocs/index.html?com/opensymphony/xwork2/util/StrutsLocalizedTextProvider.html))
+will search the default bundles first. In some cases this can improve overall
application performance.
+
+```xml
+<constant name="struts.i18n.search.defaultbundles.first" value="true"/>
+```
+
## Using only global bundles
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`:
+the framework and via `struts.custom.i18n.resources`) you can use existing
[GlobalLocalizedTextProvider](https://struts.apache.org/maven/struts2-core/apidocs/index.html?com/opensymphony/xwork2/util/GlobalLocalizedTextProvider.html)
+implementation. To use this please define the following option in your
`struts.xml`:
```xml
<constant name="struts.localizedTextProvider" value="global-only" />
@@ -148,8 +162,9 @@ implementation. To use this please define the following
option in your `struts.
## Custom TextProvider and TextProviderFactory
-If you want use a different logic to search for localized messages, or you
want to use a database or just want to search
+If you want to use a different logic to search for localized messages, or you
want to use a database or just want to search
default bundles, you must implement both those interfaces (or subclass the
existing implementations). You can check
a small [example
app](https://github.com/apache/struts-examples/tree/master/text-provider) how
to use both.
-Please remember that the `TextProvider` interface is implemented by the
`ActionSupport` class, that's why
-an extra layer - `TextProviderFactory` - is needed.
+Please remember that the `TextProvider` interface is implemented by the
`ActionSupport` class, that's why
+an extra layer -
[TextProviderFactory](https://struts.apache.org/maven/struts2-core/apidocs/index.html?com/opensymphony/xwork2/TextProviderFactory.html)
+- is needed.