001 /* 002 * Copyright 2003-2005 The Apache Software Foundation 003 * Copyright 2005 Stephen McConnell 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package net.dpml.cli.resource; 018 019 import java.text.MessageFormat; 020 021 import java.util.Locale; 022 import java.util.MissingResourceException; 023 import java.util.ResourceBundle; 024 025 /** 026 * A utility class used to provide internationalisation support. 027 * 028 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 029 * @version 1.0.0 030 */ 031 public final class ResourceHelper 032 { 033 /** system property */ 034 private static final String PROP_LOCALE = "net.dpml.cli.resource.bundle"; 035 036 /** default package name */ 037 private static final String DEFAULT_BUNDLE = 038 "net.dpml.cli.resource.CLIMessageBundle_en_US"; 039 040 private static ResourceHelper m_HELPER; 041 042 /** resource bundle */ 043 private ResourceBundle m_bundle; 044 045 private String m_prop; 046 047 /** 048 * Create a new ResourceHelper for the specified class. 049 */ 050 private ResourceHelper() 051 { 052 String bundleName = System.getProperty( PROP_LOCALE ); 053 054 if( bundleName == null ) 055 { 056 bundleName = DEFAULT_BUNDLE; 057 } 058 059 m_prop = bundleName; 060 061 int firstUnderscore = bundleName.indexOf( '_' ); 062 int secondUnderscore = bundleName.indexOf( '_', firstUnderscore + 1 ); 063 064 Locale locale; 065 if( firstUnderscore != -1 ) 066 { 067 String language = bundleName.substring( firstUnderscore + 1, secondUnderscore ); 068 String country = bundleName.substring( secondUnderscore + 1 ); 069 locale = new Locale( language, country ); 070 } 071 else 072 { 073 locale = Locale.getDefault(); 074 } 075 // initialize the bundle 076 try 077 { 078 m_bundle = ResourceBundle.getBundle( bundleName, locale ); 079 } 080 catch( MissingResourceException exp ) 081 { 082 m_bundle = ResourceBundle.getBundle( DEFAULT_BUNDLE, locale ); 083 } 084 } 085 086 /** 087 * Return the resource bundle name. 088 * @return the name 089 */ 090 public String getBundleName() 091 { 092 return m_prop; 093 } 094 095 /** 096 * Gets the ResourceHelper appropriate to the specified class. 097 * @return a ResourceHelper 098 */ 099 public static ResourceHelper getResourceHelper() 100 { 101 String bundleName = System.getProperty( PROP_LOCALE ); 102 if( m_HELPER == null || !m_HELPER.getBundleName().equals( bundleName ) ) 103 { 104 m_HELPER = new ResourceHelper(); 105 } 106 return m_HELPER; 107 } 108 109 /** 110 * Returns the message for the specified key. 111 * 112 * @param key the unique identifier of the message 113 * @return String the formatted String 114 */ 115 public String getMessage( final String key ) 116 { 117 return getMessage( key, new Object[0] ); 118 } 119 120 /** 121 * Returns the message for the specified key and argument. 122 * 123 * @param key the unique identifier of the message 124 * @param value the argument value 125 * @return String the formatted String 126 */ 127 public String getMessage( final String key, final Object value ) 128 { 129 return getMessage( key, new Object[]{value} ); 130 } 131 132 /** 133 * Returns the message for the specified key and arguments. 134 * 135 * @param key the unique identifier of the message 136 * @param value1 an argument value 137 * @param value2 an argument value 138 * @return String the formatted String 139 */ 140 public String getMessage( 141 final String key, final Object value1, final Object value2 ) 142 { 143 return getMessage( key, new Object[]{value1, value2} ); 144 } 145 146 /** 147 * Returns the message for the specified key and arguments. 148 * 149 * @param key the unique identifier of the message 150 * @param value1 an argument value 151 * @param value2 an argument value 152 * @param value3 an argument value 153 * 154 * @return String the formatted String 155 */ 156 public String getMessage( 157 final String key, final Object value1, final Object value2, final Object value3 ) 158 { 159 return getMessage( key, new Object[]{value1, value2, value3} ); 160 } 161 162 /** 163 * Returns the message for the specified key and arguments. 164 * 165 * @param key the unique identifier of the message 166 * @param values argument values 167 * @return String the formatted String 168 */ 169 public String getMessage( final String key, final Object[] values ) 170 { 171 final String msgFormatStr = m_bundle.getString( key ); 172 final MessageFormat msgFormat = new MessageFormat( msgFormatStr ); 173 return msgFormat.format( values ); 174 } 175 }