Class ResourceInternationalString

All Implemented Interfaces:
Serializable, Char­Sequence, Comparable<International­String>, Formattable, International­String

public abstract class ResourceInternationalString extends AbstractInternationalString implements Serializable
An international string backed by a Resource­Bundle. Resource bundles can be Java classes or properties files, one for each language. The resource bundle is specified by get­Bundle(Locale), which must be defined by subclasses. The subclass will typically invoke Resource­Bundle​.get­Bundle(resources, locale) where resources is the fully qualified class name of the base resource bundle (without locale suffix). The appropriate resource bundle is loaded at runtime for the client's language by looking for a class or a properties file with the right suffix, for example "_en" for English or "_fr" for French. See the Resource­Bundle​.get­Bundle(…) Javadoc for more information.


If a file named "My­Resources​.properties" exists in org​.mypackage and contains the following line:
MyKey = some value
Then an international string for "some value" can be created using the following code:
InternationalString value = new ResourceInternationalString("MyKey") {
    @Override protected ResourceBundle getBundle(Locale locale) {
        return ResourceBundle.getBundle("org.mypackage.MyResources", locale);
The "some value" string will be localized if the required properties files exist, for example "My­Resources_fr​.properties" for French or "My­Resources_it​.properties" for Italian, etc. If needed, users can gain more control by overriding the get­Bundle(Locale) method.

Immutability and thread safety

This class is immutable and thus inherently thread-safe if the bundles created by get­Bundle(Locale) is also immutable. Subclasses may or may not be immutable, at implementation choice. But implementers are encouraged to make sure that subclasses remain immutable for more predictable behavior.
See Also:
  • Field Details

    • key

      protected final String key
      The key for the resource to fetch. This value is given at construction time and cannot be null.
  • Constructor Details

    • ResourceInternationalString

      protected ResourceInternationalString(String key)
      Creates a new international string from the specified key.
      key - the key for the resource to fetch.
  • Method Details

    • getBundle

      protected abstract ResourceBundle getBundle(Locale locale)
      Returns the resource bundle for the given locale. This implementation must be provided by subclasses because, in a modularized application, the call to the Resource­Bundle​.get­Bundle(String, Locale) method is caller-sensitive. This method is typically implemented as below:
          protected ResourceBundle getBundle(final Locale locale) {
              return ResourceBundle.getBundle(resources, locale, MyResource.class.getClassLoader());
      locale - the locale for which to get the resource bundle.
      the resource bundle for the given locale.
      See Also:
    • toString

      public String toString(Locale locale) throws MissingResourceException
      Returns a string in the specified locale. If there is no string for the specified locale, then this method searches for a string in another locale as specified in the Resource­Bundle class description.

      Handling of null argument value

      In the default implementation, the null locale is handled as a synonymous of Locale​.ROOT. However, subclasses are free to use a different fallback. Client code are encouraged to specify only non-null values for more determinist behavior.
      Specified by:
      to­String in interface International­String
      Specified by:
      to­String in class Abstract­International­String
      locale - the desired locale for the string to be returned.
      the string in the specified locale, or in a fallback locale.
      Missing­Resource­Exception - if no resource can be found for the key specified at construction time.
      See Also:
    • equals

      public boolean equals(Object object)
      Compares this international string with the specified object for equality.
      equals in class Object
      object - the object to compare with this international string.
      true if the given object is equal to this string.
    • hashCode

      public int hashCode()
      Returns a hash code value for this international text.
      hash­Code in class Object
      a hash code value for this international text.