Recipe 15.4 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.swingui 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 = b.getString(name+".label"); }         catch (MissingResourceException e) { label=name; }         return new JButton(label);     }     /** Convenience routine to make a JMenu */     public static JMenu mkMenu(ResourceBundle b, String name) {         String menuLabel;         try { menuLabel = b.getString(name+".label"); }         catch (MissingResourceException e) { menuLabel=name; }         return new JMenu(menuLabel);     }     /** Convenience routine to make a JMenuItem */     public static JMenuItem mkMenuItem(ResourceBundle b,             String menu, String name) {         String miLabel;         try { miLabel = b.getString(menu + "." + name + ".label"); }         catch (MissingResourceException e) { miLabel=name; }         String key = null;         try { key = b.getString(menu + "." + name + ".key"); }         catch (MissingResourceException e) { key=null; }         if (key == null)             return new JMenuItem(miLabel);         else             return new JMenuItem(miLabel, key.charAt(0));     }     /** Show a JOptionPane message dialog */     public static void mkDialog(ResourceBundle b,JFrame parent,         String dialogTag, String titleTag, int messageType) {             JOptionPane.showMessageDialog(                 parent,                 getString(b, dialogTag, "DIALOG TEXT MISSING " + dialogTag),                 getString(b, titleTag, "DIALOG TITLE MISSING"  + titleTag),                 messageType);     }     /** Just get a String (for dialogs, labels, etc.) */     public static String getString(ResourceBundle b, String name, String dflt) {         String result;         try {             result = b.getString(name);         } catch (MissingResourceException e) {             result = dflt;         }         return result;     } }



Java Cookbook
Java Cookbook, Second Edition
ISBN: 0596007019
EAN: 2147483647
Year: 2003
Pages: 409
Authors: Ian F Darwin

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net