Class NlsBundle

  • All Implemented Interfaces:
    NlsArgumentsKeys, NlsBundleDescriptor
    Direct Known Subclasses:
    NlsBundleCli, NlsBundleException, NlsBundleSync, NlsBundleValidation

    public class NlsBundle
    extends Object
    implements NlsBundleDescriptor, NlsArgumentsKeys
    Abstract base class for all "resource-bundles" using this native language support (NLS) module. Instead of a ResourceBundle you create a custom class extending this one in order to define the messages. This is done by defining methods with NlsMessage as return type and the dynamic argument values as parameters. We recommend to follow these conventions:
    • For your bundle you define a Package and a base name (e.g. my.package.NlsBundleExample). This namespace must not be occupied by an existing type.
    • You create a non-abstract final class for that namespace (e.g. my.package.NlsBundleExample) extending NlsBundle.
    • This class defines a public method for each provided NlsMessage using the internationalized message for the root locale.
    • By default the message key used in the method implementation (see example below) shall be the method name.
    • You have to ensure that the message keys are unique within an NlsBundle class as otherwise the localization is NOT possible.
    • Your localized *.properties files have to be named using the base name followed by the according locale suffix as for a regular ResourceBundle (e.g. my/package/NlsBundleExample_de.properties or my/package/NlsBundleExample_zh_HK.properties). For the root locale you ommit that locale suffix (e.g. my/package/NlsBundleExample.properties).
    • For creating and maintaining these localized *.properties files, we provide the CLI tool NlsBundleSynchronizer.
    Here is an example:
     package com.example;
     public final class NlsBundleMynameRoot extends NlsBundle {
    
       private static NlsBundleMynameRoot INSTANCE = new NlsBundleMynameRoot();
    
       public NlsMessage errorValueOutOfRange({int value, int min, int max) {
         return create("errorValueOutOfRange", "The value {value} has to be in the range from {min} to {max}!", NlsArguments.of(KEY_VALUE, value, KEY_MIN, min, KEY_MAX, max));
       }
    
       public static NlsBundleMynameRoot get() {
         return INSTANCE;
       }
     }
     
    For localization you create or generate *.properties files in the same package for each supported Locale. In the example above e.g. com/example/NlsBundleMyname_de.properties with this content:
     errorValueOutOfRange = Der Wert {value} muss innerhalb des Wertebereichs von {min} bis {max} liegen!
     
    Now you can use this as following:
     NlsMessage message = NlsBundleMynameRoot.get().errorValueOutOfRange(5, 0, 4);
     System.out.println(message.getMessage();
     System.out.println(message.getLocalizedMessage(Locale.GERMAN);
     
    This will print the following result:
     The value 5 has to be in the range from 0 to 4!
     Der Wert 5 muss innerhalb des Wertebereichs von 0 bis 4 liegen!
     
    See NlsVariable for advanced features.