plexus-i18n-1.0-beta-10/ 0000755 0001750 0001750 00000000000 11226432471 014536 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/ 0000755 0001750 0001750 00000000000 11226432471 015325 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/ 0000755 0001750 0001750 00000000000 11226432471 016304 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/resources/ 0000755 0001750 0001750 00000000000 11226432471 020316 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/resources/org/ 0000755 0001750 0001750 00000000000 11226432471 021105 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/resources/org/codehaus/ 0000755 0001750 0001750 00000000000 11226432471 022700 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/resources/org/codehaus/plexus/ 0000755 0001750 0001750 00000000000 11226432471 024220 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/resources/org/codehaus/plexus/i18n/ 0000755 0001750 0001750 00000000000 11226432471 024777 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/test/resources/org/codehaus/plexus/i18n/Messages.properties 0000644 0001750 0001750 00000000047 11043774766 030702 0 ustar twerner twerner msg1=Hellow Orld!
msg2=Hellow {0} Orld! plexus-i18n-1.0-beta-10/src/test/resources/org/codehaus/plexus/i18n/BarBundle_xx.properties 0000644 0001750 0001750 00000000015 11041733116 031461 0 ustar twerner twerner name = plexus plexus-i18n-1.0-beta-10/src/test/resources/org/codehaus/plexus/i18n/DefaultI18NTest.xml 0000644 0001750 0001750 00000000541 11041733116 030340 0 ustar twerner twerner
*
* @author Daniel Rall
* @author Jason van Zyl
*/
public class DefaultI18NTest
extends PlexusTestCase
{
private I18N i18n;
protected void setUp()
throws Exception
{
super.setUp();
/* Set an unsupported locale to default to ensure we do not get unexpected matches */
Locale.setDefault( new Locale( "jp" ) );
i18n = (I18N) lookup( I18N.ROLE );
}
public void testLocalization()
{
String s0 = i18n.getString( null, null, "key1" );
assertEquals( "Unable to retrieve localized text for locale: default", s0, "[] value1" );
String s1 = i18n.getString( null, new Locale( "en", "US" ), "key2" );
assertEquals( "Unable to retrieve localized text for locale: en-US", s1, "[en_US] value2" );
String s2 = i18n.getString( "org.codehaus.plexus.i18n.BarBundle", new Locale( "ko", "KR" ), "key3" );
assertEquals( "Unable to retrieve localized text for locale: ko-KR", s2, "[ko] value3" );
String s3 = i18n.getString( "org.codehaus.plexus.i18n.BarBundle", new Locale( "ja" ), "key1" );
assertEquals( "Unable to fall back from non-existant locale: jp", "[] value1", s3 );
String s4 = i18n.getString( "org.codehaus.plexus.i18n.FooBundle", new Locale( "fr" ), "key3" );
assertEquals( "Unable to retrieve localized text for locale: fr", s4, "[fr] value3" );
String s5 = i18n.getString( "org.codehaus.plexus.i18n.FooBundle", new Locale( "fr", "FR" ), "key3" );
assertEquals( "Unable to retrieve localized text for locale: fr-FR", s5, "[fr] value3" );
String s6 = i18n.getString( "org.codehaus.plexus.i18n.i18n", null, "key1" );
assertEquals( "Unable to retrieve localized properties for locale: default", "[] value1", s6 );
Locale old = Locale.getDefault();
Locale.setDefault(Locale.FRENCH);
try
{
String s7 = i18n.getString( "org.codehaus.plexus.i18n.i18n", Locale.ENGLISH, "key1" );
assertEquals( "Not picking up new default locale: fr", "[fr] value1", s7 );
String s8 = i18n.getString( "org.codehaus.plexus.i18n.i18n", Locale.ITALIAN, "key1" );
assertEquals( "Unable to retrieve localized properties for locale: it", "[it] value1", s8 );
} finally {
Locale.setDefault(old);
}
}
public void testLocalizedMessagesWithFormatting()
{
// Format methods
String s6 = i18n.format( "org.codehaus.plexus.i18n.i18n", null, "thanks.message", "jason" );
assertEquals( s6, "Thanks jason!" );
String s7 = i18n.format( "org.codehaus.plexus.i18n.i18n", null, "thanks.message1", "jason", "van zyl" );
assertEquals( s7, "Thanks jason van zyl!" );
String s8 = i18n.format( "org.codehaus.plexus.i18n.i18n", null, "thanks.message2", new Object[]{ "jason", "van zyl" } );
assertEquals( s8, "Thanks jason van zyl!" );
}
public void testLocalizedMessagesWithNonStandardLocale()
{
String s0 = i18n.getString( "name", new Locale( "xx" ) );
assertEquals( "plexus", s0 );
}
}
plexus-i18n-1.0-beta-10/src/main/ 0000755 0001750 0001750 00000000000 11226432471 016251 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/main/java/ 0000755 0001750 0001750 00000000000 11226432471 017172 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/main/java/org/ 0000755 0001750 0001750 00000000000 11226432471 017761 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/ 0000755 0001750 0001750 00000000000 11226432471 021554 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/ 0000755 0001750 0001750 00000000000 11226432471 023074 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/ 0000755 0001750 0001750 00000000000 11226432471 023653 5 ustar twerner twerner plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/LanguageException.java 0000644 0001750 0001750 00000000534 11041733116 030115 0 ustar twerner twerner package org.codehaus.plexus.i18n;
public class LanguageException extends Exception
{
public LanguageException()
{
}
public LanguageException(String message)
{
super(message);
}
public LanguageException(Throwable cause)
{
super(cause);
}
public LanguageException(String message, Throwable cause)
{
super(message, cause);
}
}
plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/DefaultLanguage.java 0000644 0001750 0001750 00000003445 11043651740 027553 0 ustar twerner twerner package org.codehaus.plexus.i18n;
import java.util.Locale;
import java.util.ResourceBundle;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
/**
*
*
* @author Oleg Gusakov
*
* @plexus.component
* role="org.codehaus.plexus.i18n.Language"
*/
public class DefaultLanguage
implements Language
{
private String bundleName;
private Locale locale;
// private ResourceBundle rb;
private DefaultI18N i18n = new DefaultI18N();
private String error;
//-------------------------------------------------------------------------------------
public DefaultLanguage()
{
}
//-------------------------------------------------------------------------------------
public DefaultLanguage( Class clazz )
{
this.bundleName = clazz.getPackage().getName()+"."+DEFAULT_NAME;
try
{
i18n.initialize();
}
catch( InitializationException e )
{
error = e.getMessage();
}
}
//-------------------------------------------------------------------------------------
public DefaultLanguage( Class clazz, Locale locale )
{
this( clazz );
this.locale = locale;
// rb = ResourceBundle.getBundle( clazz.getPackage().getName()+"."+DEFAULT_NAME, locale, clazz.getClassLoader() );
}
//-------------------------------------------------------------------------------------
public String getMessage( String key, String... args )
{
if( error != null )
return error;
if( args == null || args.length == 0)
return i18n.getString( bundleName, locale, key );
return i18n.format( bundleName, locale, key, args );
}
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
}
plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/DefaultI18N.java 0000644 0001750 0001750 00000037456 11041733116 026514 0 ustar twerner twerner package org.codehaus.plexus.i18n;
/*
* Copyright 2001-2007 Codehaus Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.util.StringUtils;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.lang.reflect.Field;
/**
* @plexus.component
* role="org.codehaus.plexus.i18n.I18N"
*/
public class DefaultI18N
extends AbstractLogEnabled
implements I18N, Initializable
{
private static final Object[] NO_ARGS = new Object[0];
private HashMap bundles;
private String[] bundleNames;
private String defaultBundleName;
private Locale defaultLocale = Locale.getDefault();
private String defaultLanguage = Locale.getDefault().getLanguage();
private String defaultCountry = Locale.getDefault().getCountry();
private boolean devMode;
// ----------------------------------------------------------------------
// Accessors
// ----------------------------------------------------------------------
public String getDefaultLanguage()
{
return defaultLanguage;
}
public String getDefaultCountry()
{
return defaultCountry;
}
public String getDefaultBundleName()
{
return defaultBundleName;
}
public String[] getBundleNames()
{
return (String[]) bundleNames.clone();
}
public ResourceBundle getBundle()
{
return getBundle( getDefaultBundleName(), (Locale) null );
}
public ResourceBundle getBundle( String bundleName )
{
return getBundle( bundleName, (Locale) null );
}
/**
* This method returns a ResourceBundle given the bundle name and
* the Locale information supplied in the HTTP "Accept-Language"
* header.
*
* @param bundleName Name of bundle.
* @param languageHeader A String with the language header.
* @return A localized ResourceBundle.
*/
public ResourceBundle getBundle( String bundleName, String languageHeader )
{
return getBundle( bundleName, getLocale( languageHeader ) );
}
/**
* This method returns a ResourceBundle for the given bundle name
* and the given Locale.
*
* @param bundleName Name of bundle (or null
for the
* default bundle).
* @param locale The locale (or null
for the locale
* indicated by the default language and country).
* @return A localized ResourceBundle.
*/
public ResourceBundle getBundle( String bundleName, Locale locale )
{
// Assure usable inputs.
bundleName = ( bundleName == null ? getDefaultBundleName() : bundleName.trim() );
// ----------------------------------------------------------------------
// A hack to make sure the properties files are always checked
// ----------------------------------------------------------------------
if ( devMode )
{
try
{
Class klass = ResourceBundle.getBundle( bundleName ).getClass().getSuperclass();
Field field = klass.getDeclaredField( "cacheList" );
field.setAccessible( true );
// SoftCache cache = (SoftCache) field.get( null );
//
// cache.clear();
Object cache = field.get( null );
cache.getClass().getDeclaredMethod( "clear", null ).invoke( cache, null );
field.setAccessible( false );
}
catch ( Exception e )
{
// Intentional
}
}
if ( locale == null )
{
locale = getLocale( null );
}
// Find/retrieve/cache bundle.
ResourceBundle rb;
HashMap bundlesByLocale = (HashMap) bundles.get( bundleName );
if ( bundlesByLocale != null )
{
// Cache of bundles by locale for the named bundle exists.
// Check the cache for a bundle corresponding to locale.
rb = (ResourceBundle) bundlesByLocale.get( locale );
if ( rb == null )
{
// Not yet cached.
rb = cacheBundle( bundleName, locale );
}
}
else
{
rb = cacheBundle( bundleName, locale );
}
return rb;
}
/**
* @see I18N#getLocale(String)
*/
public Locale getLocale( String header )
{
if ( !StringUtils.isEmpty( header ) )
{
I18NTokenizer tok = new I18NTokenizer( header );
if ( tok.hasNext() )
{
return (Locale) tok.next();
}
}
// Couldn't parse locale.
return defaultLocale;
}
public String getString( String key )
{
return getString( key, null );
}
public String getString( String key, Locale locale )
{
return getString( getDefaultBundleName(), locale, key );
}
/**
* @throws MissingResourceException Specified key cannot be matched.
* @see I18N#getString(String, Locale, String)
*/
public String getString( String bundleName, Locale locale, String key )
{
String value;
if ( locale == null )
{
locale = getLocale( null );
}
// Look for text in requested bundle.
ResourceBundle rb = getBundle( bundleName, locale );
value = getStringOrNull( rb, key );
// Look for text in list of default bundles.
if ( value == null && bundleNames.length > 0 )
{
String name;
for ( int i = 0; i < bundleNames.length; i++ )
{
name = bundleNames[i];
if ( !name.equals( bundleName ) )
{
rb = getBundle( name, locale );
value = getStringOrNull( rb, key );
if ( value != null )
{
locale = rb.getLocale();
break;
}
}
}
}
if ( value == null )
{
String loc = locale.toString();
String mesg = "Noticed missing resource: " + "bundleName=" + bundleName + ", locale=" + loc + ", key=" + key;
getLogger().debug( mesg );
// Just send back the key, we don't need to throw an exception.
value = key;
}
return value;
}
public String format( String key, Object arg1 )
{
return format( defaultBundleName, defaultLocale, key, new Object[]{arg1} );
}
public String format( String key, Object arg1, Object arg2 )
{
return format( defaultBundleName, defaultLocale, key, new Object[]{arg1, arg2} );
}
/**
* @see I18N#format(String, Locale, String, Object)
*/
public String format( String bundleName,
Locale locale,
String key,
Object arg1 )
{
return format( bundleName, locale, key, new Object[]{arg1} );
}
/**
* @see I18N#format(String, Locale, String, Object, Object)
*/
public String format( String bundleName,
Locale locale,
String key,
Object arg1,
Object arg2 )
{
return format( bundleName, locale, key, new Object[]{arg1, arg2} );
}
/**
* Looks up the value for key
in the
* ResourceBundle
referenced by
* bundleName
, then formats that value for the
* specified Locale
using args
.
*
* @return Localized, formatted text identified by
* key
.
*/
public String format( String bundleName, Locale locale, String key, Object[] args )
{
if ( locale == null )
{
// When formatting Date objects and such, MessageFormat
// cannot have a null Locale.
locale = getLocale( null );
}
String value = getString( bundleName, locale, key );
if ( args == null )
{
args = NO_ARGS;
}
// FIXME: after switching to JDK 1.4, it will be possible to clean
// this up by providing the Locale along with the string in the
// constructor to MessageFormat. Until 1.4, the following workaround
// is required for constructing the format with the appropriate locale:
MessageFormat messageFormat = new MessageFormat( "" );
messageFormat.setLocale( locale );
messageFormat.applyPattern( value );
return messageFormat.format( args );
}
/**
* Called the first time the Service is used.
*/
public void initialize()
throws InitializationException
{
bundles = new HashMap();
defaultLocale = new Locale( defaultLanguage, defaultCountry );
initializeBundleNames();
if ( "true".equals( System.getProperty( "PLEXUS_DEV_MODE" ) ) )
{
devMode = true;
}
}
// ----------------------------------------------------------------------
// Implementation
// ----------------------------------------------------------------------
protected void initializeBundleNames()
{
//System.err.println("cfg=" + getConfiguration());
if ( defaultBundleName != null && defaultBundleName.length() > 0 )
{
// Using old-style single bundle name property.
if ( bundleNames == null || bundleNames.length <= 0 )
{
bundleNames = new String[]{defaultBundleName};
}
else
{
// Prepend "default" bundle name.
String[] array = new String[bundleNames.length + 1];
array[0] = defaultBundleName;
System.arraycopy( bundleNames, 0, array, 1, bundleNames.length );
bundleNames = array;
}
}
if ( bundleNames == null )
{
bundleNames = new String[0];
}
}
/**
* Caches the named bundle for fast lookups. This operation is
* relatively expesive in terms of memory use, but is optimized
* for run-time speed in the usual case.
*
* @throws MissingResourceException Bundle not found.
*/
private synchronized ResourceBundle cacheBundle( String bundleName, Locale locale )
throws MissingResourceException
{
HashMap bundlesByLocale = (HashMap) bundles.get( bundleName );
ResourceBundle rb = ( bundlesByLocale == null ? null : (ResourceBundle) bundlesByLocale.get( locale ) );
if ( rb == null )
{
bundlesByLocale = ( bundlesByLocale == null ? new HashMap( 3 ) : new HashMap( bundlesByLocale ) );
try
{
rb = ResourceBundle.getBundle( bundleName, locale );
}
catch ( MissingResourceException e )
{
rb = findBundleByLocale( bundleName, locale, bundlesByLocale );
if ( rb == null )
{
throw (MissingResourceException) e.fillInStackTrace();
}
}
if ( rb != null )
{
// Cache bundle.
bundlesByLocale.put( rb.getLocale(), rb );
HashMap bundlesByName = new HashMap( bundles );
bundlesByName.put( bundleName, bundlesByLocale );
this.bundles = bundlesByName;
}
}
return rb;
}
/**
*
Retrieves the bundle most closely matching first against the * supplied inputs, then against the defaults.
* *Use case: some clients send a HTTP Accept-Language header * with a value of only the language to use * (i.e. "Accept-Language: en"), and neglect to include a country. * When there is no bundle for the requested language, this method * can be called to try the default country (checking internally * to assure the requested criteria matches the default to avoid * disconnects between language and country).
* *Since we're really just guessing at possible bundles to use,
* we don't ever throw MissingResourceException
.
ResourceBundle.getBundle(String, Locale)
method,
* returning null
instead of throwing
* MissingResourceException
.
*/
private ResourceBundle getBundleIgnoreException( String bundleName, Locale locale )
{
try
{
return ResourceBundle.getBundle( bundleName, locale );
}
catch ( MissingResourceException ignored )
{
return null;
}
}
/**
* Gets localized text from a bundle if it's there. Otherwise,
* returns null
(ignoring a possible
* MissingResourceException
).
*/
protected final String getStringOrNull( ResourceBundle rb, String key )
{
if ( rb != null )
{
try
{
return rb.getString( key );
}
catch ( MissingResourceException ignored )
{
// intentional
}
}
return null;
}
}
plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/Language.java 0000644 0001750 0001750 00000000521 11043651740 026236 0 ustar twerner twerner package org.codehaus.plexus.i18n;
import java.util.Locale;
public interface Language
{
public static String ROLE = Language.class.getName();
/** look for Messages.properties in the clazz package by default */
public static final String DEFAULT_NAME = "Messages";
public String getMessage( String key, String... args )
;
}
plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/I18NTokenizer.java 0000644 0001750 0001750 00000011732 11041733116 027067 0 ustar twerner twerner package org.codehaus.plexus.i18n;
/*
* Copyright 2001-2007 Codehaus Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Locale;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
/**
* Parses the HTTP Accept-Language
header as per section
* 14.4 of RFC 2068 (HTTP 1.1 header field definitions).
*
* @author Daniel Rall
* @version $Id: I18NTokenizer.java 6675 2007-07-20 23:05:53Z olamy $
*
* @todo Move this class out of here as its purely web related.
*/
public class I18NTokenizer
implements Iterator
{
/**
* Separates elements of the Accept-Language
HTTP
* header.
*/
private static final String LOCALE_SEPARATOR = ",";
/**
* Separates locale from quality within elements.
*/
private static final char QUALITY_SEPARATOR = ';';
/**
* The default quality value for an AcceptLanguage
* object.
*/
private static final Float DEFAULT_QUALITY = new Float(1.0f);
/**
* The parsed locales.
*/
private ArrayList locales = new ArrayList(3);
/**
* Parses the Accept-Language
header.
*
* @param header The Accept-Language
header
* (i.e. en, es;q=0.8, zh-TW;q=0.1
).
*/
public I18NTokenizer(String header)
{
StringTokenizer tok = new StringTokenizer(header, LOCALE_SEPARATOR);
while (tok.hasMoreTokens())
{
AcceptLanguage acceptLang = new AcceptLanguage();
String element = tok.nextToken().trim();
int index;
// Record and cut off any quality value that comes after a
// semi-colon.
if ( (index = element.indexOf(QUALITY_SEPARATOR)) != -1 )
{
String q = element.substring(index);
element = element.substring(0, index);
if ( (index = q.indexOf('=')) != -1 )
{
try
{
acceptLang.quality =
Float.valueOf(q.substring(index + 1));
}
catch (NumberFormatException useDefault)
{
}
}
}
element = element.trim();
// Create a Locale from the language. A dash may separate the
// language from the country.
if ( (index = element.indexOf('-')) == -1 )
{
// No dash means no country.
acceptLang.locale = new Locale(element, "");
}
else
{
acceptLang.locale = new Locale(element.substring(0, index),
element.substring(index + 1));
}
locales.add(acceptLang);
}
// Sort by quality in descending order.
Collections.sort(locales, Collections.reverseOrder());
}
/**
* @return Whether there are more locales.
*/
public boolean hasNext()
{
return !locales.isEmpty();
}
/**
* Creates a Locale
from the next element of the
* Accept-Language
header.
*
* @return The next highest-rated Locale
.
* @throws NoSuchElementException No more locales.
*/
public Object next()
{
if (locales.isEmpty())
{
throw new NoSuchElementException();
}
return ((AcceptLanguage) locales.remove(0)).locale;
}
/**
* Not implemented.
*/
public final void remove()
{
throw new UnsupportedOperationException(getClass().getName() +
" does not support remove()");
}
/**
* Struct representing an element of the HTTP
* Accept-Language
header.
*/
private class AcceptLanguage implements Comparable
{
/**
* The language and country.
*/
Locale locale;
/**
* The quality of our locale (as values approach
* 1.0
, they indicate increased user preference).
*/
Float quality = DEFAULT_QUALITY;
public final int compareTo(Object acceptLang)
{
return quality.compareTo( ((AcceptLanguage) acceptLang).quality );
}
}
}
plexus-i18n-1.0-beta-10/src/main/java/org/codehaus/plexus/i18n/I18N.java 0000644 0001750 0001750 00000003351 11041733116 025172 0 ustar twerner twerner package org.codehaus.plexus.i18n;
/*
* Copyright 2001-2007 Codehaus Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.util.Locale;
import java.util.ResourceBundle;
public interface I18N
{
public static String ROLE = I18N.class.getName();
String ACCEPT_LANGUAGE = "Accept-Language";
String getDefaultLanguage();
String getDefaultCountry();
String getDefaultBundleName();
String[] getBundleNames();
ResourceBundle getBundle();
ResourceBundle getBundle( String bundleName );
ResourceBundle getBundle( String bundleName, String languageHeader );
ResourceBundle getBundle( String bundleName, Locale locale );
Locale getLocale( String languageHeader );
String getString( String key );
String getString( String key, Locale locale );
String getString( String bundleName, Locale locale, String key );
String format( String key, Object arg1 );
String format( String key, Object arg1, Object arg2 );
String format( String bundleName, Locale locale, String key, Object arg1 );
String format( String bundleName, Locale locale, String key, Object arg1, Object arg2 );
String format( String bundleName, Locale locale, String key, Object[] args );
}
plexus-i18n-1.0-beta-10/pom.xml 0000644 0001750 0001750 00000004033 11051352372 016050 0 ustar twerner twerner