Java Internationalization and Localizationby Jaric Sng
Internationalization (I18N) and Localization is easier with Java, in contrast with other, previous native applications. Credit goes to IBM's Center for Java Technology, Silicon Valley.
Although it is much easier to use I18N and L10N due to the different approaches by Sun and Microsoft, we are faced with new challenges. On one hand we want to target a wider audience, without maintaining two sets of code (using the Java "write once, run anywhere" vision). On the other, we want to use as many features as possible in the latest Java release. Of course, there is a limit to what we can achieve.
In this article, we will look at employing the Java reflection so that our Java applet utilizes system fonts found in Java SDK 1.3 as well as the MS VM implementation, while not causing backward compatibility problems for Navigator 4.76 with Java 1.1.5. With this technique, we will be able to solve the problem of Chinese, Japanese, and Korean characters displayed as "blocks" in IE with MS VM.
The display of these characters with an English language OS in
Navigator 4 requires the necessary changes to the
font.properties file on a client machine. As for
Navigator 6 and IE, we just need to run the test applet and use the
correct font in our applet. That's it.
In JDK 1.1, font mapping between the Java logical fonts and system
physical fonts is achieved by making the necessary changes in
font.properties, which lists the font results only by
logical font names.
The situaion is much better now with JDK 1.3. We can get a list of the user's system TrueType fonts or create it ourselves. Similarly, Microsoft makes it possible to do this with their own implementation. Due to the different implementations of Sun and Microsoft, how can we provide a uniform access to these different solutions?
Java reflection and a helper class NEFontFactory uses the Factory pattern. Before we can do this, we need to
- install the necessary font,
- identify the font name, and
- configure Netscape 4.
Accessing the system font listing
In JDK 1.1, we cannot access the system font listing except logical fonts
names. These logical fonts are mapped to the system physical fonts by
font.properties found in the
..\lib directory (See
font.properties.en for Netscape 4).
In JDK 1.1, the font listing API returns a list of logical font names:
java.awt.Toolkit.getDefaultToolkit().getFontList() // deprecated since JDK1.2
In JDK 1.3, the listing of system fonts is available using the following:
In MS VM, the listing of system fonts is available using the following:
Creating Font Object
In JDK 1.1, we cannot create the TrueType font using its name.
Instead we create the font using a logical font name, which is
mapped to a TrueType font in the
Now in JDK 1.3, we can create the TrueType font simply by specifying its name:
new Font(fontName, fontStyle, fontSize)
In MS Java, the system font is obtained via
public static Font getFont(String face, int style, int size, int flags); public static Font getFont(String face, Vector v, int size);
For your reference, the following hardware and software configurations is recommended for use in our development environment.
- Pentium 700MHz
- Memory - 256 MB
- OS - Microsoft Windows 2000 (Professional)
- Netscape 4.0 with JDK 1.1.5 VM
- Netscape 6.0 with JDK 1.3.0_01 VM
- MS IE 5.0 with VM Release 188.8.131.5202
- Visual SlickEdit 6
- Jakarta Tomcat 3.2.1
- JDK 1.1.8
- JDK 1.3
- MS Java SDK
Installing the True Type Font
One way is to install it from the MultiLanguage Pack from Office 2000.
For a listing of fonts provided by the MultiLanguage Pack (including the code pages and the languages they support), check out Administering Fonts in an International Office.
Otherwise, let IE do the job for you. To download Simplify Chinese font, simply access Chinese language News paper web site in Singapore using IE. IE will prompt you to download the necessary font in order to view the page. For the following fonts, try the sites below:
We may be able to view the page in Chinese, but what font is IE using to display the page?