| | | | Browse by category |
Question
Does Composer support internationalization?
Answer
Since version 5.0, JViews Composer includes internationalization capabilities that can serve as inspiration for your own internationalization mechanism. The Composer implementation is built upon the java.util.ResourceBundle
facilities; see the JDK reference manual here
for further details.
Apart from this, note that i18n is part of the Java language. So, you can use the Java i18n API in your application, and integrate it within your JViews objects to benefit from this.
For example, suppose you want to provide a multilingual JViews application, so that the labels displayed through JViews objects (for example IlvLabel
) depend on the current system locale. To do this, you define the language-specific messages in a property file (one for each locale), and store them in a java.util.ResourceBundle
Java object. Then, when you create your IlvLabel
object, you need to get the localized message from the resource bundle, and set it as the label of your IlvLabel
instance.
Here is a simple example. It expects the locale and encoding to be passed as a command line parameter (for example: 'java Test18n en US') so that testing the multilingual feature is made easy. For a real application, the default locale used is of course the system locale.
import ilog.views.*;
import ilog.views.graphic.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
public class Test18n extends JFrame {
private IlvManager mgr;
private IlvManagerView mgrview;
private String bundleName = "TestDbm";
private ResourceBundle res;
public Test18n() {
super("JViews and internationalization");
res = ResourceBundle.getBundle(bundleName);
mgr = new IlvManager(); mgrview = new IlvManagerView(mgr);
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
pane.add(mgrview, BorderLayout.CENTER);
String helloString = getLocalizedString("hello");
lvLabel label = new IlvLabel(new IlvPoint(50,50), helloString);
mgr.addObject(label, false); setSize(800,600);
}
private String getLocalizedString(String key) {
try {
return res.getString(bundleName + "." + key);
} catch (MissingResourceException e) {
return key;
}
}
public static void main(String[] args) {
if (args.length ==2)
Locale.setDefault(new Locale(args[0], args[1]));
(new Test18n()).setVisible(true);
}
}
The content of the messages database files is simply the translation of the word "hello" in the corresponding language.
Each file is named TestDbm_ll_CC.properties
, where TestDbm
is the name passed to ResourceBundle.getBundle()
, ll
is the language, and CC
the country. For example:
the file TestDbm_fr_FR.properties
contains the string:
TestDbm.hello = Bonjour
whereas the file TestDbm_en_US.properties
contains:
TestDbm.hello = Hello
Since JViews 8.1, you can use facilities of IlvResourceUtil
provided by the JViews Framework to retrieve resource bundles. These facilities allow you to optimize the performance of resource loading for applets.