2005-05-06 Michael Koch <konqueror@gmx.de>

* java/util/Locale.java
	(defaultLocale): Use gnu.classpath.SystemProperties to get properties.
	(getLocale): New methods. Use it everywhere where instances of Locales
	are needed.
	(getDisplayLanguage): Merged javadoc.
	(getDisplayCountry): Likewise.
	(getDisplayVariant): Likewise.

From-SVN: r99303
This commit is contained in:
Michael Koch 2005-05-06 06:52:44 +00:00 committed by Michael Koch
parent 8108f99852
commit cb881fb176
2 changed files with 142 additions and 41 deletions

View File

@ -1,3 +1,13 @@
2005-05-06 Michael Koch <konqueror@gmx.de>
* java/util/Locale.java
(defaultLocale): Use gnu.classpath.SystemProperties to get properties.
(getLocale): New methods. Use it everywhere where instances of Locales
are needed.
(getDisplayLanguage): Merged javadoc.
(getDisplayCountry): Likewise.
(getDisplayVariant): Likewise.
2005-05-06 Archie Cobbs <archie@dellroad.org> 2005-05-06 Archie Cobbs <archie@dellroad.org>
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c: * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c:

View File

@ -1,5 +1,5 @@
/* Locale.java -- i18n locales /* Locale.java -- i18n locales
Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. Copyright (C) 1998, 1999, 2001, 2002, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath. This file is part of GNU Classpath.
@ -38,6 +38,8 @@ exception statement from your version. */
package java.util; package java.util;
import gnu.classpath.SystemProperties;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
@ -76,55 +78,56 @@ import java.io.Serializable;
* @author Jochen Hoenicke * @author Jochen Hoenicke
* @author Paul Fisher * @author Paul Fisher
* @author Eric Blake (ebb9@email.byu.edu) * @author Eric Blake (ebb9@email.byu.edu)
* @author Andrew John Hughes (gnu_andrew@member.fsf.org)
* @since 1.1 * @since 1.1
* @status updated to 1.4 * @status updated to 1.4
*/ */
public final class Locale implements Serializable, Cloneable public final class Locale implements Serializable, Cloneable
{ {
/** Locale which represents the English language. */ /** Locale which represents the English language. */
public static final Locale ENGLISH = new Locale("en"); public static final Locale ENGLISH = getLocale("en");
/** Locale which represents the French language. */ /** Locale which represents the French language. */
public static final Locale FRENCH = new Locale("fr"); public static final Locale FRENCH = getLocale("fr");
/** Locale which represents the German language. */ /** Locale which represents the German language. */
public static final Locale GERMAN = new Locale("de"); public static final Locale GERMAN = getLocale("de");
/** Locale which represents the Italian language. */ /** Locale which represents the Italian language. */
public static final Locale ITALIAN = new Locale("it"); public static final Locale ITALIAN = getLocale("it");
/** Locale which represents the Japanese language. */ /** Locale which represents the Japanese language. */
public static final Locale JAPANESE = new Locale("ja"); public static final Locale JAPANESE = getLocale("ja");
/** Locale which represents the Korean language. */ /** Locale which represents the Korean language. */
public static final Locale KOREAN = new Locale("ko"); public static final Locale KOREAN = getLocale("ko");
/** Locale which represents the Chinese language. */ /** Locale which represents the Chinese language. */
public static final Locale CHINESE = new Locale("zh"); public static final Locale CHINESE = getLocale("zh");
/** Locale which represents the Chinese language as used in China. */ /** Locale which represents the Chinese language as used in China. */
public static final Locale SIMPLIFIED_CHINESE = new Locale("zh", "CN"); public static final Locale SIMPLIFIED_CHINESE = getLocale("zh", "CN");
/** /**
* Locale which represents the Chinese language as used in Taiwan. * Locale which represents the Chinese language as used in Taiwan.
* Same as TAIWAN Locale. * Same as TAIWAN Locale.
*/ */
public static final Locale TRADITIONAL_CHINESE = new Locale("zh", "TW"); public static final Locale TRADITIONAL_CHINESE = getLocale("zh", "TW");
/** Locale which represents France. */ /** Locale which represents France. */
public static final Locale FRANCE = new Locale("fr", "FR"); public static final Locale FRANCE = getLocale("fr", "FR");
/** Locale which represents Germany. */ /** Locale which represents Germany. */
public static final Locale GERMANY = new Locale("de", "DE"); public static final Locale GERMANY = getLocale("de", "DE");
/** Locale which represents Italy. */ /** Locale which represents Italy. */
public static final Locale ITALY = new Locale("it", "IT"); public static final Locale ITALY = getLocale("it", "IT");
/** Locale which represents Japan. */ /** Locale which represents Japan. */
public static final Locale JAPAN = new Locale("ja", "JP"); public static final Locale JAPAN = getLocale("ja", "JP");
/** Locale which represents Korea. */ /** Locale which represents Korea. */
public static final Locale KOREA = new Locale("ko", "KR"); public static final Locale KOREA = getLocale("ko", "KR");
/** /**
* Locale which represents China. * Locale which represents China.
@ -145,16 +148,16 @@ public final class Locale implements Serializable, Cloneable
public static final Locale TAIWAN = TRADITIONAL_CHINESE; public static final Locale TAIWAN = TRADITIONAL_CHINESE;
/** Locale which represents the United Kingdom. */ /** Locale which represents the United Kingdom. */
public static final Locale UK = new Locale("en", "GB"); public static final Locale UK = getLocale("en", "GB");
/** Locale which represents the United States. */ /** Locale which represents the United States. */
public static final Locale US = new Locale("en", "US"); public static final Locale US = getLocale("en", "US");
/** Locale which represents the English speaking portion of Canada. */ /** Locale which represents the English speaking portion of Canada. */
public static final Locale CANADA = new Locale("en", "CA"); public static final Locale CANADA = getLocale("en", "CA");
/** Locale which represents the French speaking portion of Canada. */ /** Locale which represents the French speaking portion of Canada. */
public static final Locale CANADA_FRENCH = new Locale("fr", "CA"); public static final Locale CANADA_FRENCH = getLocale("fr", "CA");
/** /**
* Compatible with JDK 1.1+. * Compatible with JDK 1.1+.
@ -195,10 +198,48 @@ public final class Locale implements Serializable, Cloneable
* bootstrapping has completed. * bootstrapping has completed.
*/ */
private static Locale defaultLocale = private static Locale defaultLocale =
new Locale(System.getProperty("user.language", "en"), getLocale(SystemProperties.getProperty("user.language", "en"),
System.getProperty("user.region", ""), SystemProperties.getProperty("user.region", ""),
System.getProperty("user.variant", "")); SystemProperties.getProperty("user.variant", ""));
/**
* Retrieves the locale with the specified language from the cache.
*
* @param language the language of the locale to retrieve.
* @return the locale.
*/
private static Locale getLocale(String language)
{
return getLocale(language, "", "");
}
/**
* Retrieves the locale with the specified language and region
* from the cache.
*
* @param language the language of the locale to retrieve.
* @param region the region of the locale to retrieve.
* @return the locale.
*/
private static Locale getLocale(String language, String region)
{
return getLocale(language, region, "");
}
/**
* Retrieves the locale with the specified language, region
* and variant from the cache.
*
* @param language the language of the locale to retrieve.
* @param region the region of the locale to retrieve.
* @param variant the variant of the locale to retrieve.
* @return the locale.
*/
private static Locale getLocale(String language, String region, String variant)
{
return new Locale(language, region, variant);
}
/** /**
* Convert new iso639 codes to the old ones. * Convert new iso639 codes to the old ones.
* *
@ -529,19 +570,36 @@ public final class Locale implements Serializable, Cloneable
} }
/** /**
* Gets the language name suitable for display to the user, formatted * <p>
* for a specified locale. * Gets the name of the language specified by this locale, in a form suitable
* for display to the user. If possible, the display name will be localized
* to the specified locale. For example, if the locale instance is
* <code>Locale.GERMANY</code>, and the specified locale is <code>Locale.UK</code>,
* the result would be 'German'. Using the German locale would instead give
* 'Deutsch'. If the display name can not be localized to the supplied
* locale, it will fall back on other output in the following order:
* </p>
* <ul>
* <li>the display name in the default locale</li>
* <li>the display name in English</li>
* <li>the ISO code</li>
* </ul>
* <p>
* If the language is unspecified by this locale, then the empty string is
* returned.
* </p>
* *
* @param locale locale to use for formatting * @param inLocale the locale to use for formatting the display string.
* @return the language name of this locale localized to the given locale, * @return the language name of this locale localized to the given locale,
* with the ISO code as backup * with the default locale, English and the ISO code as backups.
* @throws NullPointerException if the supplied locale is null.
*/ */
public String getDisplayLanguage(Locale locale) public String getDisplayLanguage(Locale inLocale)
{ {
try try
{ {
ResourceBundle bundle ResourceBundle bundle
= ResourceBundle.getBundle("gnu.java.locale.iso639", locale); = ResourceBundle.getBundle("gnu.java.locale.iso639", inLocale);
return bundle.getString(language); return bundle.getString(language);
} }
catch (MissingResourceException ex) catch (MissingResourceException ex)
@ -567,19 +625,36 @@ public final class Locale implements Serializable, Cloneable
} }
/** /**
* Gets the country name suitable for display to the user, formatted * <p>
* for a specified locale. * Gets the name of the country specified by this locale, in a form suitable
* for display to the user. If possible, the display name will be localized
* to the specified locale. For example, if the locale instance is
* <code>Locale.GERMANY</code>, and the specified locale is <code>Locale.UK</code>,
* the result would be 'Germany'. Using the German locale would instead give
* 'Deutschland'. If the display name can not be localized to the supplied
* locale, it will fall back on other output in the following order:
* </p>
* <ul>
* <li>the display name in the default locale</li>
* <li>the display name in English</li>
* <li>the ISO code</li>
* </ul>
* <p>
* If the country is unspecified by this locale, then the empty string is
* returned.
* </p>
* *
* @param locale locale to use for formatting * @param inLocale the locale to use for formatting the display string.
* @return the country name of this locale localized to the given locale, * @return the country name of this locale localized to the given locale,
* with the ISO code as backup * with the default locale, English and the ISO code as backups.
* @throws NullPointerException if the supplied locale is null.
*/ */
public String getDisplayCountry(Locale locale) public String getDisplayCountry(Locale inLocale)
{ {
try try
{ {
ResourceBundle bundle = ResourceBundle bundle =
ResourceBundle.getBundle("gnu.java.locale.iso3166", locale); ResourceBundle.getBundle("gnu.java.locale.iso3166", inLocale);
return bundle.getString(country); return bundle.getString(country);
} }
catch (MissingResourceException ex) catch (MissingResourceException ex)
@ -605,15 +680,31 @@ public final class Locale implements Serializable, Cloneable
} }
/** /**
* Returns the variant name of this locale localized to the * <p>
* given locale. If the localized is not found, the variant code * Gets the name of the variant specified by this locale, in a form suitable
* itself is returned. * for display to the user. If possible, the display name will be localized
* to the specified locale. For example, if the locale instance is a revised
* variant, and the specified locale is <code>Locale.UK</code>, the result
* would be 'REVISED'. Using the German locale would instead give
* 'Revidiert'. If the display name can not be localized to the supplied
* locale, it will fall back on other output in the following order:
* </p>
* <ul>
* <li>the display name in the default locale</li>
* <li>the display name in English</li>
* <li>the ISO code</li>
* </ul>
* <p>
* If the variant is unspecified by this locale, then the empty string is
* returned.
* </p>
* *
* @param locale locale to use for formatting * @param inLocale the locale to use for formatting the display string.
* @return the variant code of this locale localized to the given locale, * @return the variant name of this locale localized to the given locale,
* with the ISO code as backup * with the default locale, English and the ISO code as backups.
* @throws NullPointerException if the supplied locale is null.
*/ */
public String getDisplayVariant(Locale locale) public String getDisplayVariant(Locale inLocale)
{ {
// XXX - load a bundle? // XXX - load a bundle?
return variant; return variant;