Writing Internationalization Convenience Routines

Problem

You want convenience.

Solution

I’ve got it.

Discussion

Convenience routines are mini-implementations that can be more convenient and effective than the general-purpose routines. Here I present the convenience routines to create buttons, menus, etc. First, a simple one, mkMenu( ) :

/** Convenience routine to make up a Menu with its name L10N'd */
Menu mkMenu(ResourceBundle b, String menuName) {
    String label;
    try { label = b.getString(menuName+".label"); }
    catch (MissingResourceException e) { label=menuName; }
    return new Menu(label);
}

There are many such routines that you might need; I have consolidated several of them into my class I18N.java , which is part of the com.darwinsys.util package. All methods are static, and can be used without having to instantiate an I18N object because they do not maintain any state across calls. The method mkButton( ) creates and returns a localized Button, and so on. The method mkDialog is slightly misnamed, since the JOptionPane method showMessageDialog() doesn’t create and return a Dialog object, but it seemed more consistent to write it as shown here:

package com.darwinsys.util; import java.util.*; import javax.swing.*; /** Set of convenience routines for internationalized code. * All convenience methods are static, for ease of use. */ public class I18N { /** Convenience routine to make a JButton */ public static JButton mkButton(ResourceBundle b, String name) { String label; try { label ...

Get Java Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.