You want your program to take “sensitivity lessons” so it can communicate well internationally.
Your program must obtain all control and message strings via the internationalization software. Here’s how:
Get a ResourceBundle
.
ResourceBundle b = ResourceBundle.getBundle("Menus");
I’ll talk about ResourceBundle
in Section 14.7, but briefly, a
ResourceBundle
represents a collection of
name-value pairs (resources). The names are names you assign to each
GUI control or other user interface text, and the values are the text
to assign to each control in a given language.
Use this ResourceBundle
to fetch the localized
version of each control name.
Old way:
somePanel.add(new JButton("Exit"));
New way:
rb = ResourceBundle.getBundle("Widgets"); try { label = rb.getString("exit.label"); } catch (MissingResourceException e) { label="Exit"; } // fallback somePanel.add(new JButton(label));
This is quite a bit of code for one button, but distributed over all the widgets (buttons, menus, etc.) in a program, it can be as little as one line with the use of convenience routines, which I’ll show in Section 14.4.
The default locale is used, since we didn’t specify one. The default locale is platform-dependent:
Unix/POSIX: LANG environment variable (per user)
Windows 95: Start->Control Panel->Regional Settings
Others: see platform documentation
ResourceBundle.getBundle( )
locates a file with the named resource
bundle name (Menus
in the
previous example), plus an underscore and the locale name (if any
locale is set), plus another underscore and the locale variation (if
any variation is set), plus the extension
.properties
. If a
variation is set but the file can’t be found, it falls back to
just the country code. If that can’t be found, it falls back to
the original default. Table 14-1 shows some
examples for various
locales.
Table 14-1. Property filenames for different locales
Locale |
Filename |
---|---|
Default locale |
|
Swedish |
|
Spanish |
|
French |
|
French-Canadian |
|
Locale names are two-letter ISO language codes (lowercase); locale variations are two-letter ISO country codes (uppercase)
On Windows, go into the Control Panel. Changing this setting entails a reboot, so exit any editor windows.
On Unix, set your LANG environment variable. For example, a Korn
shell user in Mexico might have this line in his or her
.profile
:
export LANG=es_MX
On either system, for testing a different locale, you need only
define the locale in the System Properties at runtime using the
command-line option -D
, as in:
java -Duser.language=es Browser
to run the program named Browser
in the Spanish
locale.
3.137.41.205