Class Messages

java.lang.Object
java.util.ResourceBundle
org.apache.juneau.cp.Messages

public class Messages extends ResourceBundle
An enhanced ResourceBundle.

Wraps a ResourceBundle to provide some useful additional functionality.

  • Instead of throwing MissingResourceException, the ResourceBundle.getString(String) method will return "{!key}" if the message could not be found.
  • Supported hierarchical lookup of resources from parent parent classes.
  • Support for easy retrieval of localized bundles.
  • Support for generalized resource bundles (e.g. properties files containing keys for several classes).

The following example shows the basic usage of this class for retrieving localized messages:

# Contents of MyClass.properties foo = foo {0} MyClass.bar = bar {0}

public class MyClass { private static final Messages MESSAGES = Messages.of(MyClass.class); public void doFoo() { // A normal property. String foo = MESSAGES.getString("foo","x"); // == "foo x" // A property prefixed by class name. String bar = MESSAGES.getString("bar","x"); // == "bar x" // A non-existent property. String baz = MESSAGES.getString("baz","x"); // == "{!baz}" } }

The ability to resolve keys prefixed by class name allows you to place all your messages in a single file such as a common "Messages.properties" file along with those for other classes.

The following shows how to retrieve messages from a common bundle:

public class MyClass { private static final Messages MESSAGES = Messages.of(MyClass.class, "Messages"); }

Resource bundles are searched using the following base name patterns:

  • "{package}.{name}"
  • "{package}.i18n.{name}"
  • "{package}.nls.{name}"
  • "{package}.messages.{name}"

These patterns can be customized using the Messages.Builder.baseNames(String...) method.

Localized messages can be retrieved in the following way:

// Return value from Japan locale bundle. String foo = MESSAGES.forLocale(Locale.JAPAN).getString("foo");

See Also:
  • Constructor Details

    • Messages

      protected Messages(Messages.Builder builder)
      Constructor.
      Parameters:
      builder - The builder for this object.
  • Method Details

    • create

      public static final Messages.Builder create(Class<?> forClass)
      Static creator.
      Parameters:
      forClass - The class we're creating this object for.
      Returns:
      A new builder.
    • of

      public static final Messages of(Class<?> forClass)
      Constructor.
      Parameters:
      forClass - The class we're creating this object for.
      Returns:
      A new message bundle belonging to the class.
    • of

      public static final Messages of(Class<?> forClass, String name)
      Constructor.
      Parameters:
      forClass - The class we're creating this object for.
      name - The bundle name (e.g. "Messages").
      If null, uses the class name.
      Returns:
      A new message bundle belonging to the class.
    • forLocale

      public Messages forLocale(Locale locale)
      Returns this message bundle for the specified locale.
      Parameters:
      locale - The locale to get the messages for.
      Returns:
      A new Messages object. Never null.
    • keySet

      public Set<String> keySet(String prefix)
      Returns all keys in this resource bundle with the specified prefix.

      Keys are returned in alphabetical order.

      Parameters:
      prefix - The prefix.
      Returns:
      The set of all keys in the resource bundle with the prefix.
    • getString

      public String getString(String key, Object... args)
      Similar to ResourceBundle.getString(String) except allows you to pass in MessageFormat objects.
      Parameters:
      key - The resource bundle key.
      args - Optional MessageFormat-style arguments.
      Returns:
      The resolved value. Never null. "{!key}" if the key is missing.
    • findFirstString

      public String findFirstString(String... keys)
      Looks for all the specified keys in the resource bundle and returns the first value that exists.
      Parameters:
      keys - The list of possible keys.
      Returns:
      The resolved value, or null if no value is found or the resource bundle is missing.
    • handleGetObject

      protected Object handleGetObject(String key)
      Specified by:
      handleGetObject in class ResourceBundle
    • containsKey

      public boolean containsKey(String key)
      Overrides:
      containsKey in class ResourceBundle
    • keySet

      public Set<String> keySet()
      Overrides:
      keySet in class ResourceBundle
    • getKeys

      Specified by:
      getKeys in class ResourceBundle
    • toString

      public String toString()
      Overrides:
      toString in class Object