Class StrutsLocalizedTextProvider
- All Implemented Interfaces:
Serializable
,LocalizedTextProvider
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected final ConcurrentMap<String,
ResourceBundle> protected boolean
protected boolean
protected boolean
static final String
static final String
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addDefaultResourceBundle
(String bundleName) Adds the bundle to the internal list of default bundles.protected MessageFormat
buildMessageFormat
(String pattern, Locale locale) protected void
clearBundle
(String bundleName, Locale locale) Clear a specific bundle + locale combination from thebundlesMap
.protected void
Clears themissingBundles
contents.protected String
extractIndexedName
(String textKey) findDefaultText
(String textKey, Locale locale) Returns a localized message for the specified key, aTextName.findDefaultText
(String textKey, Locale locale, Object[] params) Returns a localized message for the specified key, aTextName, substituting variables from the array of params into the message.protected String
findMessage
(Class<?> clazz, String key, String indexedKey, Locale locale, Object[] args, Set<String> checked, ValueStack valueStack) Traverse up class hierarchy looking for message.findResourceBundle
(String bundleName, Locale locale) Finds the given resource bundle by it's name.CallsLocalizedTextProvider.findText(Class startClazz, String textKey, Locale locale, String defaultMessage, Object[] args)
with textKey as the default message.Finds a localized text message for the given key, textKey.findText
(Class<?> startClazz, String textKey, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) Finds a localized text message for the given key, textKey.findText
(ResourceBundle bundle, String textKey, Locale locale) Finds a localized text message for the given key, aTextName, in the specified resource bundle with aTextName as the default message.findText
(ResourceBundle bundle, String textKey, Locale locale, String defaultMessage, Object[] args) Finds a localized text message for the given key, aTextName, in the specified resource bundle.findText
(ResourceBundle bundle, String textKey, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) Finds a localized text message for the given key, aTextName, in the specified resource bundle.protected String
formatWithNullDetection
(MessageFormat mf, Object[] args) protected ClassLoader
protected org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg
getDefaultMessage
(String key, Locale locale, ValueStack valueStack, Object[] args, String defaultMessage) protected org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg
getDefaultMessageWithAlternateKey
(String key, String alternateKey, Locale locale, ValueStack valueStack, Object[] args, String defaultMessage) A helper method that can be used by descendant classes to perform some common two-stage message lookup operations against the default resource bundles.protected String
getMessage
(String bundleName, Locale locale, String key, ValueStack valueStack, Object[] args) protected void
logMissingText
(Class<?> startClazz, String textKey, Locale locale, org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg result, String indexedTextName) protected void
protected void
reloadBundles
(Map<String, Object> context) void
setCustomI18NResources
(String bundles) void
setDelegatedClassLoader
(ClassLoader classLoader) void
setDevMode
(String devMode) void
setReflectionProvider
(ReflectionProvider reflectionProvider) void
setReloadBundles
(String reloadBundles) void
setSearchDefaultBundlesFirst
(String searchDefaultBundlesFirst) Set thesearchDefaultBundlesFirst
flag state.protected boolean
unableToFindTextForKey
(org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg result) Determines if we found the text in the bundles.
-
Field Details
-
XWORK_MESSAGES_BUNDLE
- See Also:
-
STRUTS_MESSAGES_BUNDLE
- See Also:
-
bundlesMap
-
devMode
protected boolean devMode -
reloadBundles
protected boolean reloadBundles -
searchDefaultBundlesFirst
protected boolean searchDefaultBundlesFirst
-
-
Constructor Details
-
StrutsLocalizedTextProvider
public StrutsLocalizedTextProvider()
-
-
Method Details
-
findText
Description copied from interface:LocalizedTextProvider
CallsLocalizedTextProvider.findText(Class startClazz, String textKey, Locale locale, String defaultMessage, Object[] args)
with textKey as the default message.- Parameters:
startClazz
- class nametextKey
- text namelocale
- the locale- Returns:
- the localized text, or null if none can be found and no defaultMessage is provided
- See Also:
-
findText
public String findText(Class<?> startClazz, String textKey, Locale locale, String defaultMessage, Object[] args) Description copied from interface:LocalizedTextProvider
Finds a localized text message for the given key, textKey. Both the key and the message itself is evaluated as required. The following algorithm is used to find the requested message:- Look for the message in the default resource bundles.
- If not found, return defaultMessage
When looking for the message, if the key indexes a collection (e.g. user.phone[0]) and a message for that specific key cannot be found, the general form will also be looked up (i.e. user.phone[*]).
If a message is found, it will also be interpolated. Anything within
${...}
will be treated as an OGNL expression and evaluated as such.- Parameters:
startClazz
- the class whose name to use as the start point for the searchtextKey
- the key to find the text message forlocale
- the locale the message should be fordefaultMessage
- the message to be returned if no text message can be found in any resource bundleargs
- arguments resource bundle- Returns:
- the localized text, or null if none can be found and no defaultMessage is provided
-
findText
public String findText(Class<?> startClazz, String textKey, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) Description copied from interface:LocalizedTextProvider
Finds a localized text message for the given key, textKey. Both the key and the message itself is evaluated as required. The following algorithm is used to find the requested message:- Look for the message in the default resource bundles.
- If not found, return defaultMessage
When looking for the message, if the key indexes a collection (e.g. user.phone[0]) and a message for that specific key cannot be found, the general form will also be looked up (i.e. user.phone[*]).
If a message is found, it will also be interpolated. Anything within
${...}
will be treated as an OGNL expression and evaluated as such.If a message is not found a DEBUG level log warning will be logged.
- Parameters:
startClazz
- the class whose name to use as the start point for the searchtextKey
- the key to find the text message forlocale
- the locale the message should be fordefaultMessage
- the message to be returned if no text message can be found in any resource bundleargs
- argumentsvalueStack
- the value stack to use to evaluate expressions instead of the one in the ActionContext ThreadLocal- Returns:
- the localized text, or null if none can be found and no defaultMessage is provided
-
findText
Description copied from interface:LocalizedTextProvider
Finds a localized text message for the given key, aTextName, in the specified resource bundle with aTextName as the default message.If a message is found, it will also be interpolated. Anything within
${...}
will be treated as an OGNL expression and evaluated as such.- Parameters:
bundle
- a resource bundle nametextKey
- text namelocale
- the locale- Returns:
- the localized text, or null if none can be found and no defaultMessage is provided
- See Also:
-
findText
public String findText(ResourceBundle bundle, String textKey, Locale locale, String defaultMessage, Object[] args) Description copied from interface:LocalizedTextProvider
Finds a localized text message for the given key, aTextName, in the specified resource bundle.If a message is found, it will also be interpolated. Anything within
${...}
will be treated as an OGNL expression and evaluated as such.If a message is not found a WARN log will be logged.
- Parameters:
bundle
- the bundletextKey
- the keylocale
- the localedefaultMessage
- the default message to use if no message was found in the bundleargs
- arguments for the message formatter.- Returns:
- the localized text, or null if none can be found and no defaultMessage is provided
-
setReflectionProvider
-
addDefaultResourceBundle
Description copied from interface:LocalizedTextProvider
Adds the bundle to the internal list of default bundles. If the bundle already exists in the list it will be re-added.- Specified by:
addDefaultResourceBundle
in interfaceLocalizedTextProvider
- Parameters:
bundleName
- the name of the bundle to add.
-
getCurrentBundleNames
-
getCurrentThreadContextClassLoader
-
setCustomI18NResources
-
findDefaultText
Description copied from interface:LocalizedTextProvider
Returns a localized message for the specified key, aTextName. Neither the key nor the message is evaluated.- Specified by:
findDefaultText
in interfaceLocalizedTextProvider
- Parameters:
textKey
- the message keylocale
- the locale the message should be for- Returns:
- a localized message based on the specified key, or null if no localized message can be found for it
-
findDefaultText
Description copied from interface:LocalizedTextProvider
Returns a localized message for the specified key, aTextName, substituting variables from the array of params into the message. Neither the key nor the message is evaluated.- Specified by:
findDefaultText
in interfaceLocalizedTextProvider
- Parameters:
textKey
- the message keylocale
- the locale the message should be forparams
- an array of objects to be substituted into the message text- Returns:
- A formatted message based on the specified key, or null if no localized message can be found for it
-
findText
public String findText(ResourceBundle bundle, String textKey, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) Description copied from interface:LocalizedTextProvider
Finds a localized text message for the given key, aTextName, in the specified resource bundle.If a message is found, it will also be interpolated. Anything within
${...}
will be treated as an OGNL expression and evaluated as such.If a message is not found a WARN log will be logged.
- Specified by:
findText
in interfaceLocalizedTextProvider
- Parameters:
bundle
- the bundletextKey
- the keylocale
- the localedefaultMessage
- the default message to use if no message was found in the bundleargs
- arguments for the message formatter.valueStack
- the OGNL value stack.- Returns:
- the localized text, or null if none can be found and no defaultMessage is provided
-
setDelegatedClassLoader
- Parameters:
classLoader
- aClassLoader
to look up the bundle from if none can be found on the current thread's classloader
-
clearBundle
Clear a specific bundle + locale combination from thebundlesMap
. Intended for descendants to use clear a bundle + locale combination.- Parameters:
bundleName
- The bundle (combined with locale) to remove from the bundle maplocale
- Provides the locale to combine with the bundle to get the key- Since:
- 6.0.0
-
clearMissingBundlesCache
protected void clearMissingBundlesCache()Clears themissingBundles
contents. This allows descendants to clear the "missing bundles cache" when desired (or needed).Note: This method may be used when the
bundlesMap
state has changed in such a way that bundles that were previously "missing" may now be available (e.g. after callingLocalizedTextProvider.addDefaultResourceBundle(java.lang.String)
when theAbstractLocalizedTextProvider
has already been used for failed bundle lookups of a given key, or some transitory state made a bundle lookup fail.- Since:
- 6.0.0
-
reloadBundles
protected void reloadBundles() -
reloadBundles
-
buildMessageFormat
-
formatWithNullDetection
-
setReloadBundles
-
setDevMode
-
setSearchDefaultBundlesFirst
Set thesearchDefaultBundlesFirst
flag state. This flag may be used by descendant TextProvider implementations to determine if default bundles should be searched for messages first (before the standard flow of theLocalizedTextProvider
implementation the descendant provides).- Parameters:
searchDefaultBundlesFirst
- provideString
"true" or "false" to set the flag state accordingly.- Since:
- 6.0.0
-
findResourceBundle
Description copied from interface:LocalizedTextProvider
Finds the given resource bundle by it's name.Will use
Thread.currentThread().getContextClassLoader()
as the classloader.- Specified by:
findResourceBundle
in interfaceLocalizedTextProvider
- Parameters:
bundleName
- the name of the bundle (usually it's FQN classname).locale
- the locale.- Returns:
- the bundle, null if not found.
-
unableToFindTextForKey
protected boolean unableToFindTextForKey(org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg result) Determines if we found the text in the bundles.- Parameters:
result
- the result so far- Returns:
- true if we could not find the text, false if the text was found (=success).
-
getDefaultMessage
protected org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg getDefaultMessage(String key, Locale locale, ValueStack valueStack, Object[] args, String defaultMessage) - Returns:
- the default message.
-
getDefaultMessageWithAlternateKey
protected org.apache.struts2.text.AbstractLocalizedTextProvider.GetDefaultMessageReturnArg getDefaultMessageWithAlternateKey(String key, String alternateKey, Locale locale, ValueStack valueStack, Object[] args, String defaultMessage) A helper method that can be used by descendant classes to perform some common two-stage message lookup operations against the default resource bundles. The default resource bundles are searched for a value using key first, then alternateKey when the first search fails, then utilizing defaultMessage (which may benull
) if both key lookup operations fail.A known use case is when a key indexes a collection (e.g. user.phone[0]) for which some specific keys may exist, but not all, along with a general key (e.g. user.phone[*]). In such cases the specific key would be passed in the key parameter and the general key would be passed in the alternateKey parameter.
- Parameters:
key
- the initial key to search for a value within the default resource bundles.alternateKey
- the alternate (fall-back) key to search for a value within the default resource bundles, if the initial key lookup fails.locale
- theLocale
to be used for the default resource bundle lookup.valueStack
- theValueStack
associated with the operation.args
- the argument array for parameterized messages (may benull
).defaultMessage
- the default messageString
to use if both key lookup operations fail.- Returns:
- the
AbstractLocalizedTextProvider.GetDefaultMessageReturnArg
result containing the processed message lookup (by key first, then alternateKey if key's lookup fails). If both key lookup operations fail, defaultMessage is used for processing. If defaultMessage isnull
then the return result may benull
.
-
getMessage
protected String getMessage(String bundleName, Locale locale, String key, ValueStack valueStack, Object[] args) - Returns:
- the message from the named resource bundle.
-
findMessage
protected String findMessage(Class<?> clazz, String key, String indexedKey, Locale locale, Object[] args, Set<String> checked, ValueStack valueStack) Traverse up class hierarchy looking for message. Looks at class, then implemented interface, before going up hierarchy.- Returns:
- the message
-
extractIndexedName
-
logMissingText
-